【问题标题】:How to configure git hooks for all developers如何为所有开发人员配置 git 钩子
【发布时间】:2021-05-19 12:28:25
【问题描述】:

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

使用企业 github。

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

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

【问题讨论】:

  • 您应该在每次提交时触发一个基本 CI,并在提交时使用 linter。或者添加github操作github.com/marketplace/actions/gs-commit-message-checker
  • 我明白了,.git/hook 下的 commit-msg,gist.github.com/veewee/939539fef7953bd11cdb。这可以以某种方式全局配置,以便每个人的 .git 文件夹都可以使用它吗?

标签: git github gitlab git-commit githooks


【解决方案1】:

in.git/hooks 中的任何文件都不是存储库的一部分,并且不会通过任何推送或获取操作(包括 git pull 运行的获取)传输.原因很简单;见下文。同样,拥有 Git 存储库的开发人员完全控制他/她/他们的.git/hooks 目录是否有任何 pre-commit 和 commit-msg 挂钩正在运行(git commit --no-verify 将跳过这两个钩子)。

这意味着您不能强制开发人员使用任何特定的 pre-commit 或 commit-msg 挂钩。与其让这种情况发生(你不能这样做),不如尽你所能让开发人员轻松使用你提供的一些钩子。有许多方法可以实现这一点。在下面的示例中,我将提到 pre-commit 钩子而不是 commit-msg 钩子。

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

  1. 克隆一个或多个开发人员应该使用的存储库;那么
  2. 将您希望它们使用的钩子添加到这些克隆中。

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

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

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

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

为什么不复制钩子

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

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

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

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多