[英]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.