相关文章推荐
腼腆的柠檬  ·  python ...·  1 周前    · 
有情有义的大白菜  ·  python ...·  1 周前    · 
完美的馒头  ·  python QTreeWidget ...·  6 天前    · 
失眠的烤红薯  ·  python qt textBrowser ...·  4 天前    · 
坏坏的西红柿  ·  jquery selector ...·  1 年前    · 
安静的饭盒  ·  Keyword not supported ...·  1 年前    · 

Git预提交钩子在windows上不工作

2 人关注

我有一个git预提交钩子,但提交到本地repo后,脚本没有被调用。这就是它的样子,它是用python编写的,钩子文件的名字叫pre-commit,没有任何扩展名。

#!C:/Users/al/AppData/Local/Programs/Python/Python35-32 python
import sys, os
sys.exit(1)
    
python
git
pre-commit-hook
shebang
luca.p.alexandru
luca.p.alexandru
发布于 2015-12-14
1 个回答
Ashutosh Jindal
Ashutosh Jindal
发布于 2015-12-14
已采纳
0 人赞同

Your pre-commit hook might suffer from one or more of the following issues:

Is the shebang line correct?

shebang行应该是用于运行脚本的可执行文件的完整路径。参见 this 来了解shebang行何时被使用(或不被使用)。在预提交钩子的情况下,只有当脚本上的可执行位被设置时,才会使用shebang行。

Handling spaces in the shebang line

如果在解释器的全路径中有一个空格,可以像这样引用整个路径。

#!"C:/Users/al/AppData/Local/Programs/Python/Python35-32 python"

或者,像这样逃离路径中的空间。

#! C:/Users/al/AppData/Local/Programs/Python/Python35-32\ python

Using a python script on Windows with msysgit

据报道,msysgit在解释shebang行时有问题。以下是一个变通方法。将 python precommit-hook(例如 precommit.py)重命名为其他内容,并使用以下内容作为 precommit-hook。

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

Is the pre-commit hook script executable?

(这并不严格适用于目前的问题,因为OP是在windows上,但为了完整起见,我将把以下内容留在这里)

如果预提交钩子没有被设置为可执行,它将不会被执行。我在本地测试了这一点,下面的输出结果证明了这一点。

$ cd ~/test-git 
$ cat .git/hooks/pre-commit
#!/usr/local/bin/python
import sys, os
print "yo! this is the pre-commit hook"
sys.exit(1)
$ chmod -x .git/hooks/pre-commit
$ git commit -am "Test"
[master (root-commit) 0b1edce] Test
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ chmod +x .git/hooks/pre-commit
$ git commit -am "Test"
yo! this is the pre-commit hook

另外,从https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks