繁体   English   中英

git不能像钩子一样执行python-script

[英]git cannot execute python-script as hook

我在python中创建了一个小pre-commit钩子。 这个钩子在Linux下就像一个魅力,但在Windows中它一直告诉我:

error: cannot spawn .git/hooks/pre-commit: No such file or directory

我知道这里有类似的问题关于同一个问题和结论接缝是shebang。 我的脚本在第一行有这个:

#!F:\PortableApps\PortablePython3.2\App\python.exe

另外有趣的是,只需编写.git/hooks/pre-commit可以很好地执行脚本,但是一旦我尝试提交,git就会吐出上面的消息。

另一件有趣的事情是,当我将编码从ANSI转换为UTF-8(使用Notepad ++)时,在尝试执行脚本时出现以下错误:

.git/hooks/pre-commit: Cannot execute binary file

我正在使用以下工具:

我使用代理方法使python脚本在windows下运行(使用msysgit)。 可以在这里找到完整的脚本(以及我如何做的描述): https//gist.github.com/1839424

这是使其在Windows下工作的重要部分


如果你正在使用Windows(和“msysgit”),它会有点复杂。 由于“msysgit”似乎在处理SHEBANG时遇到问题,因此您必须使用一个小技巧来使脚本可执行(有关此问题的更多信息可在此处找到)。

为了使脚本有效,您需要从Python脚本中删除SHEBANG(“pre -commit.py”)并使用包装器bash脚本来调用解释器。 此脚本应如下所示:

#!/bin/sh
python .git/hooks/pre-commit.py

将此脚本存储为名为“pre-commit”的文件(无文件结尾)。 这假设你的PATH中有Python。 如果不这样做,您还可以指定解释器可执行文件的完整路径。

这个脚本将由“git commit”调用,并调用python脚本来检查巨大的文件。 SHEBANG之后的路径不应该更改,因为“msysgit”会自动重新映射它。 您必须为要执行的Python脚本指定相对于repo-root的路径(因为这是调用脚本的位置)。

之后你会想要将包装文件(“pre-commit”)和Python脚本(“pre -commit.py”)复制到你的repos“.git / hooks”-directory,个性化Python脚本(“max_file_size”和“git_binary_path”)并标记“预提交”文件可执行文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM