Git钩子:应用`git config core.hooksPath`

Nic*_*all 10 git githooks

我有一个带有预提交钩子的git存储库:

my-repo
|- .git
   |- hooks
      |- pre-commit     # I made this file executable
Run Code Online (Sandbox Code Playgroud)

一直到那里,一切正常.我提交时挂钩正在运行.

=================================

我现在跑git config core.hooksPath ./git-config/hooks进去了my-repo.

文件夹结构是这样的:

my-repo
|- .git
   |- hooks
|- git-config
   |- hooks
      |- pre-commit     # I made this file executable as well
Run Code Online (Sandbox Code Playgroud)

会发生什么:

  • 新的预提交脚本不会在提交时运行
  • 如果我保留它,旧的预提交脚本仍会在提交时运行 my-repo/.git/hooks
  • git config --get core.hooksPathmy-repo输出中运行./git-config/hooks

如何在提交时运行新的预提交钩子?

以下是我显然不太了解的文档的链接:
https://git-scm.com/docs/git-config
https://git-scm.com/docs/githooks

tor*_*rek 20

这个core.hooksPath支持是Git 2.9版中的新增功能,已经提交了867ad08a2610526edb5723804723d371136fc643.如果您的Git版本不是至少2.9.0,设置hooks-path变量将完全没有效果.

  • 嗯,我不敢相信我之前没有检查过!不管怎样,就是这样,我更新了 git,它工作得很好。谢谢 ! (2认同)
  • @onmyway133:钩子是一种痛苦,因为大约有 40 多种方法可以*阻止*它们运行,当这些方法中的任何一种阻止它们运行时,Git 绝对不会说什么。所以你必须枚举所有钩子失败的方式,依次检查每一种:(1)Git 能找到吗?(2) 是否可执行 (chmod +x)?(3) 它是否*真的* 可执行(如果需要,#! 解释器行)?(4) 它*真的*可执行吗?(ACL 等)... (2认同)
  • 我的 hooksPath 设置仍然被忽略...已将 git 更新到 2.33 ...我已经创建了从 .git/hooks 到实际路径的符号链接,但我宁愿让它工作... (2认同)