微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为所有开发人员配置 git hooks 为什么钩子没有被复制

如何解决如何为所有开发人员配置 git hooks 为什么钩子没有被复制

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

使用企业 github。

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

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

解决方法

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

这意味着您不能强迫开发人员使用任何特定的 pre-commit 或 commit-msg 挂钩。与其让这件事发生(你做不到),你应该尽你所能,让你的开发人员轻松使用你提供的一些钩子。有许多方法可以实现这一目标。在下面的例子中,我将提到预提交钩子而不是 commit-msg 钩子。

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

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

如果克隆已经存在,这个命令可以简单地更新钩子,这样你的开发人员可以在钩子发生变化时再次运行安装脚本。

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

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

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

为什么钩子没有被复制

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

git clone

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。