git无法将python脚本作为钩子执行
我在python中创建了一个小的git无法将python脚本作为钩子执行,python,windows,git,msysgit,githooks,Python,Windows,Git,Msysgit,Githooks,我在python中创建了一个小的pre-commithook。这个钩子在Linux下很有魅力,但在Windows中它一直告诉我: error: cannot spawn .git/hooks/pre-commit: No such file or directory 我知道这里也有类似的问题,关于同一个问题,以及关于舍邦的结论。我的脚本的第一行有: #!F:\PortableApps\PortablePython3.2\App\python.exe 还值得注意的是,只需编写.git/hook
pre-commit
hook。这个钩子在Linux下很有魅力,但在Windows中它一直告诉我:
error: cannot spawn .git/hooks/pre-commit: No such file or directory
我知道这里也有类似的问题,关于同一个问题,以及关于舍邦的结论。我的脚本的第一行有:
#!F:\PortableApps\PortablePython3.2\App\python.exe
还值得注意的是,只需编写.git/hooks/pre-commit
即可执行脚本,效果非常好,但只要我尝试提交,git就会发出上述消息
另一件有趣的事情是,当我将编码从ANSI转换为UTF-8(使用Notepad++)时,我在尝试执行脚本时遇到以下错误:
.git/hooks/pre-commit: Cannot execute binary file
我正在使用以下工具:
- 3.2.1.1
- msysgit 1.7.6(便携式)
如果您使用的是Windows(和“msysgit”),则会稍微复杂一些。由于“msysgit”在处理时似乎有问题,因此您必须使用一些技巧使脚本可执行(可以找到有关此问题的更多信息) 为了使脚本工作,您需要从Python脚本(“pre-commit.py”)中删除SHEBANG,并使用包装器bash脚本调用解释器。此脚本应如下所示:
#!/bin/sh
python .git/hooks/pre-commit.py
将此脚本存储为名为“预提交”的文件(无文件结尾)。这假设您的应用程序中有Python。如果没有,还可以指定解释器可执行文件的完整路径
这个脚本将被“git commit”调用,并调用python脚本来检查大文件。不应更改SHEBANG之后的路径,因为“msysgit”将自动重新映射它。必须为要执行的Python脚本指定一个相对于repo根的路径(因为脚本是从该路径调用的)
之后,您需要将包装文件(“pre-commit”)和Python脚本(“pre-commit.py”)复制到repos.git/hooks-目录,个性化Python脚本(“max_-file_-size”和“git_-binary_-path”)并标记“pre-commit”-文件可执行。使用bash脚本作为包装来调用
python.exe pre-commit.py
的@Amber的可能重复。但是是否有一个纯Python版本?如果要传播参数(例如,对于签出后挂钩),请附加一个$*
:Python.git/hooks/pre-commit.py$*
Python脚本本身不必位于.git目录中。如果愿意,它可以位于存储库的其他位置,以便作为存储库的一部分提交。然后,通过编程方式创建此处在.git/hooks文件夹中描述的shell脚本,将git钩子自动安装到repo的新克隆中也是相当简单的。例如,我们有一个Android存储库,开发人员在OSX和Windows上都在使用它。我们如何确保钩子在不同的操作系统上工作?您可以在Mac OS、GNU/Linux和Windows上使用@Luks解决方案。