git pre-and-commit-hook挂钩没有运行

时间:2018-04-19 04:21:38

标签: git

什么可能导致我的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

3 个答案:

答案 0 :(得分:3)

我已经看到,例如,配置core.hooksPath被设置为除$GIT_DIR/hooks之外的另一条路径,从而忽略了该文件夹中的挂钩。

检查您的git config core.hooksPath输出,更常见的是git config -l,以了解任何与众不同的设置。

请注意git commit -n would skip the pre-commit hook

wolever

编辑

我已将此添加到我的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 文件并从终端运行 Childpwd获取绝对路径并将其用于您的 cd