【问题标题】:git pre- and post- commit hooks not runninggit 提交前和提交后挂钩未运行
【发布时间】:2018-09-29 11:05:52
【问题描述】:

什么可能导致我的 git 提交前和提交后挂钩不运行?

(请注意:这个问题不是重复的;其他每个问题的答案都是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

【问题讨论】:

    标签: git


    【解决方案1】:

    检查您的 Git 版本是否高于 2.9。

    【讨论】:

    • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
    【解决方案2】:

    我只想补充一点,如果您对 git hooks 的路径有任何困惑,请使用终端打开 git hooks 文件并从终端运行 pwdcd 以获得绝对路径并将其用于您的hooksPath =

    【讨论】:

      【解决方案3】:

      在我的情况下,core.hooksPath 中的 projRootDir/.git/config 设置不正确。从配置文件中删除条目就可以了

      【讨论】:

      • 这个。只需删除本地配置文件的 hooksPath 条目
      【解决方案4】:

      例如,我已经看到配置 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
      

      【讨论】:

      • 啊是的,就是这样!我前段时间设置了它,并假设它会在本地挂钩之外运行,而不是代替。您似乎是正确的 - 如果存在core.hooksPath,则永远不会检查.git/hooks/(即使core.hooksPath 缺少挂钩脚本)。
      • @DavidWolever 做得好。您确实发布了具有挑战性的问题!
      • 啊,这让我省了很多痛苦。出色的保存。
      猜你喜欢
      • 2011-07-02
      • 2015-09-10
      • 1970-01-01
      • 2014-08-10
      • 2021-09-10
      • 2014-01-03
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多