如何为所有开发者配置 git 钩子

How to configure git hooks for all developers

我想在全球范围内为所有开发人员应用一致的提交消息规则,以便在提交消息中出现 jira 问题。

使用企业 github。

据发现,可以使用 .git/hooks/commit-msg 文件进行相应更新。

问题:如何将此更新的 git 挂钩应用于所有开发人员。 我没有看到 git status 上出现任何变化。 不确定是否必须以不同的方式配置,commit-msg constrain 将适用于所有开发人员而不是本地开发人员。 能否请您指导一下。

.git/hooks中的任何文件都不是存储库的一部分并且不会通过任何推送或获取操作传输(包括 git pull 的获取 运行)。原因很简单;见下文。出于同样的原因,拥有 Git 存储库的开发人员可以 完全控制 his/her/their .git/hooks 目录 是否有任何预提交和提交消息挂钩 运行 (git commit --no-verify 将跳过这两个挂钩)。

这意味着您不能强制 开发人员使用任何特定的预提交或提交消息挂钩。与其让这件事发生(你做不到),你应该尽你所能让你的开发人员容易使用你提供的一些钩子。有许多 种方法可以实现这一点。在下面的示例中,我将提到预提交挂钩而不是提交消息挂钩。

一个非常简单的方法是编写一个脚本作为设置命令:

  1. 克隆开发人员应该使用的存储库;然后
  2. 向这些克隆添加您希望它们使用的挂钩。

如果克隆已经存在,此命令可以简单地更新挂钩,这样如果挂钩已更改,您的开发人员可以再次 运行 安装脚本。

另一个是在安装symbolic link的存储库中有一个脚本,这样.git/hooks/pre-commit就变成了symbolic link到../../scripts/pre-commit。此路径从 hooks 爬回,然后 .git,然后到达 scripts/pre-commit,这意味着 scripts/pre-commit 中的脚本将是 运行 .当然,您可以使用不同的名称,例如,如果您愿意,可以将 .git/hooks/pre-commit 设为 link 到 ../../.git-precommit 的符号。此方法当然需要您的开发人员的系统支持符号 links.

您的脚本,无论它们都在存储库本身还是在某个单独的存储库或其他任何地方,都可以像您喜欢的那样简单或花哨,并且您可以用您喜欢的任何语言编写它们。这适用于“安装一些钩子”脚本, 都适用于钩子本身。唯一的限制是挂钩必须能够 运行 在开发人员的机器上。请注意,Git 钩子有完整的框架,例如 Husky 和 ​​pre-commit.com.

上的各种选项

一个小警告:这里很容易过火。例如,我建议任何打算设置花式挂钩的人都看看 this blog post。您对提交消息的检查是没有过火的一个例子:它简单快速,不会妨碍任何人。

为什么没有复制 hooks

想象一下,如果 git clone 确实 复制并安装了挂钩。然后想象一下某个存储库中的钩子在 post-checkout 钩子中包含了这段伪 shell 脚本:

if [ ! -x /tmp/trojan-horse ]; then
    install-trojan-horse &
fi

一旦你克隆了这个存储库,boom,你就被打败了。