【问题标题】:Git hooks : applying `git config core.hooksPath`Git 钩子:应用 `git config core.hooksPath`
【发布时间】:2017-01-12 22:21:24
【问题描述】:

我有一个设置了预提交挂钩的 git 存储库:

my-repo
|- .git
   |- hooks
      |- pre-commit     # I made this file executable

直到那里,一切正常。当我提交时,钩子正在运行。

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

我现在在my-repo 中运行git config core.hooksPath ./git-config/hooks

文件夹结构是这样的:

my-repo
|- .git
   |- hooks
|- git-config
   |- hooks
      |- pre-commit     # I made this file executable as well

会发生什么:

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

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

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

【问题讨论】:

  • 自己尝试实现core.hooksPath。除了您的自定义挂钩之外,还会运行默认的适合挂钩还是只运行您的自定义挂钩?
  • @Xerri core.hooksPath 选项会覆盖默认值 (./.git/hooks),因此只会检测并运行您指定的新文件夹中的挂钩脚本。

标签: git githooks


【解决方案1】:

core.hooksPath 支持是new in Git version 2.9,已与commit 867ad08a2610526edb5723804723d371136fc643 一起放入。如果您的 Git 版本不是至少 2.9.0,则设置 hooks-path 变量将完全没有效果。

【讨论】:

  • 嗯,我不敢相信我以前没有检查过!无论如何,就是这样,我更新了 git,它运行良好。谢谢!
  • @onmyway133: 钩子有点痛苦,因为有大约 40 种方法可以防止它们运行,当其中任何一种方法发生时,Git 绝对不会说什么预防。所以你必须枚举所有钩子失败的方式,依次检查每一个:(1)Git 能找到它吗? (2) 是否可执行 (chmod +x)? (3) 它是真的 可执行文件吗(如果需要,#! 解释器行)? (4) 它真的真的 可执行吗? (ACL 等)...
  • 谢谢@torek,你的评论应该是一个独立的回应,因为它节省了我的时间,因为我忘了让它可执行
  • 我的 hooksPath 设置仍然被忽略...已将 git 更新到 2.33 ...我已经创建了从 .git/hooks 到实际路径的符号链接,但我宁愿让它工作...
  • @Guian:所以当符号链接到位时,挂钩文件可以工作,但是当通过core.hooksPath 引用时,它们不会?这有点奇怪。查看任何特定于操作系统的怪异之处,例如限制跨文件系统的 exec() 。 (这在很大程度上取决于您的操作系统、ACL 等)
猜你喜欢
  • 1970-01-01
  • 2018-12-13
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 2013-07-17
  • 2012-02-02
  • 2011-01-04
相关资源
最近更新 更多