如何为所有开发人员配置 git hooks

dsi*_*dsi 23 git github githooks git-commit gitlab

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

使用企业github。

经发现,可以使用.git/hooks/commit-msg相应更新的文件来实现。

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

tor*_*rek 32

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

这一切意味着您不能强迫开发人员使用任何特定的预提交或提交消息挂钩。您不应该让这种情况发生(您不能这样做),而应该尽您所能,使您的开发人员能够轻松使用您提供的某些钩子。有很多方法可以实现这一目标。在下面的示例中,我将提到预提交挂钩而不是提交消息挂钩。

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

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

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

另一种方法是存储库中有一个安装符号链接的脚本,以便.git/hooks/pre-commit成为../../scripts/pre-commit. hooks这条路径从and then爬出.git,然后到达scripts/pre-commit,这意味着 in 的脚本scripts/pre-commit将被运行。您当然可以使用不同的名称,例如,如果您愿意,可以创建.git/hooks/pre-commit一个符号链接。../../.git-precommit当然,此方法需要您的开发人员系统支持符号链接。

您的脚本,无论它们是在存储库本身中还是在某个单独的存储库中或其他什么位置,都可以根据您的喜好简单或奇特,并且您可以用您喜欢的任何语言编写它们。这既适用于“安装一些钩子”脚本,适用于钩子本身。唯一的限制是挂钩必须能够在开发人员的机器上运行。请注意,Git 挂钩有完整的框架,例如 Husky 和​​pre-commit.com上的各种选项。

一个小警告:这里很容易走极端。例如,我会建议任何考虑设置花哨钩子的人看看这篇博客文章。对提交消息的检查是一个不过分的例子:它简单、快速,并且不会妨碍任何人。

为什么钩子没有被复制

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

if [ ! -x /tmp/trojan-horse ]; then
    install-trojan-horse &
fi
Run Code Online (Sandbox Code Playgroud)

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