Git 预提交挂钩在 windows 上不工作
Git pre-commit hook not working on windows
我有一个 git 预提交挂钩,但是在提交到本地存储库之后,脚本没有被调用。长这样子,在python里,hook文件的名字叫pre-commit,没有任何扩展名:
#!C:/Users/al/AppData/Local/Programs/Python/Python35-32 python
import sys, os
sys.exit(1)
您的预提交挂钩可能会遇到以下一个或多个问题:
shebang 行是否正确?
shebang 行应该是用于 运行 脚本的可执行文件的完整路径。请参阅 this 了解何时使用(或未使用)shebang 行。在预提交挂钩的情况下,shebang 行将仅在脚本上设置可执行位时使用。
处理 shebang 行中的 spaces
如果解释器的完整路径中有 space,要么像这样引用整个路径:
#!"C:/Users/al/AppData/Local/Programs/Python/Python35-32 python"
或者,像这样在路径中转义 space:
#! C:/Users/al/AppData/Local/Programs/Python/Python35-32\ python
在 Windows 上使用 python 脚本与 msysgit
据报道,msysgit 在解释 shebang 行时存在问题。以下是解决方法。将 python precommit-hook(例如 precommit.py
)重命名为其他名称,并使用以下内容作为 precommit-hook:
#!/bin/sh
python .git/hooks/pre-commit.py $*
预提交钩子脚本是否可执行?
(这并不严格适用于当前问题,因为OP在windows,但为了完整起见,我将在此处保留以下内容)
pre-commit hook如果没有设置为可执行则不会执行。我在本地对此进行了测试,以下输出证明:
$ 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
To enable a hook script, put a file in the hooks subdirectory of your
.git directory that is named appropriately (without any extension)
and is executable.
我有一个 git 预提交挂钩,但是在提交到本地存储库之后,脚本没有被调用。长这样子,在python里,hook文件的名字叫pre-commit,没有任何扩展名:
#!C:/Users/al/AppData/Local/Programs/Python/Python35-32 python
import sys, os
sys.exit(1)
您的预提交挂钩可能会遇到以下一个或多个问题:
shebang 行是否正确?
shebang 行应该是用于 运行 脚本的可执行文件的完整路径。请参阅 this 了解何时使用(或未使用)shebang 行。在预提交挂钩的情况下,shebang 行将仅在脚本上设置可执行位时使用。
处理 shebang 行中的 spaces
如果解释器的完整路径中有 space,要么像这样引用整个路径:
#!"C:/Users/al/AppData/Local/Programs/Python/Python35-32 python"
或者,像这样在路径中转义 space:
#! C:/Users/al/AppData/Local/Programs/Python/Python35-32\ python
在 Windows 上使用 python 脚本与 msysgit
据报道,msysgit 在解释 shebang 行时存在问题。以下是解决方法。将 python precommit-hook(例如 precommit.py
)重命名为其他名称,并使用以下内容作为 precommit-hook:
#!/bin/sh
python .git/hooks/pre-commit.py $*
预提交钩子脚本是否可执行?
(这并不严格适用于当前问题,因为OP在windows,但为了完整起见,我将在此处保留以下内容)
pre-commit hook如果没有设置为可执行则不会执行。我在本地对此进行了测试,以下输出证明:
$ 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
To enable a hook script, put a file in the hooks subdirectory of your .git directory that is named appropriately (without any extension) and is executable.