什么可能导致我的git pre-and-commit-commit挂钩无法运行?
(请注意:此问题不重复;其他每个问题的答案都是chmod +x
或“没有文件扩展名”,这里也没有问题。
它们是可执行的:
$ ls -alh .git/hooks/*-commit
-rwxr-xr-x … .git/hooks/post-commit
-rwxr-xr-x … .git/hooks/pre-commit
这是每个人的内容:
#!/bin/sh
echo "$0 IS RUNNING"
exit 1
手动运行它们:
$ .git/hooks/pre-commit
.git/hooks/pre-commit IS RUNNING
但它们不是由git
在提交时运行的:
$ git commit -am "Test hooks"
[master d17c0f38] Test hooks
1 file changed, 1 insertion(+)
这是使用git 2.16.2
答案 0 :(得分:3)
我已经看到,例如,配置core.hooksPath
被设置为除$GIT_DIR/hooks
之外的另一条路径,从而忽略了该文件夹中的挂钩。
检查您的git config core.hooksPath
输出,更常见的是git config -l
,以了解任何与众不同的设置。
请注意git commit -n
would skip the pre-commit hook。
编辑:
我已将此添加到我的core.hooksPath
目录中的脚本中,如果它们存在,它将运行repo的钩子:
#!/bin/sh
set -eu
hook_name="$(basename "$0")"
hook_script=".git/hooks/$hook_name"
[ -e "$hook_script" ] && "$hook_script"
exit 0
答案 1 :(得分:2)
就我而言,core.hooksPath
中的 projRootDir/.git/config
设置不正确。从配置文件中删除条目就可以了
答案 2 :(得分:0)
我只想补充一点,如果您对 git hooks 的路径有任何困惑,请使用终端打开 git hooks 文件并从终端运行 Child
或 pwd
获取绝对路径并将其用于您的 cd