我在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
我正在使用以下工具:
答案 0 :(得分:11)
我使用代理方法使python脚本在windows下运行(使用msysgit)。可以在此处找到完整的脚本(包含我如何操作的说明):https://gist.github.com/1839424
以下是使其在Windows下运行的重要部分
如果你正在使用Windows(和“msysgit”),那就有点复杂了。由于“msysgit”似乎在处理SHEBANG时遇到问题,因此您必须使用一个小技巧来使脚本可执行(有关此问题的更多信息可以找到here)。
为了使脚本有效,你需要从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”)并标记“pre-commit”文件可执行文件。