27

我们在项目中使用自定义编写的 Git 挂钩。

钩子存储在项目的存储库中,当它们发生变化时,要获得新版本,每个用户必须手动将它们复制到他的 .git/hooks 目录中。这是相当不方便的。

改善这一点的一种方法是使 .git/hooks 成为工作树的符号链接。但这意味着每个分支(甚至是正在开发的用户本地功能分支)都应该具有最新版本的钩子。这也不方便。

你会如何解决这个问题?

4

7 回答 7

14

维护一个单独的钩子存储库和符号链接。

我同意,如果 Git 有一个用于传播钩子脚本的内置机制,那就太好了,但它没有。

于 2010-01-12T16:35:02.987 回答
9

http://benjamin-meyer.blogspot.com/2010/06/managing-project-user-and-global-git.html似乎是一种自动化钩子符号链接的便捷方式,以促进全局、每个用户和每个项目钩子。

于 2010-09-02T18:54:34.107 回答
3

pre-commit有很多看起来很有前途的功能

  • 适用于多种语言,并具有插件架构以添加对其他语言的支持
  • 能够引导挂钩依赖项(依赖于语言)
  • 以增量方式应用钩子(仅对作为提交的一部分的更改运行钩子)
  • 利用init.templateDir使签出的 repos 自动安装正确的钩子
  • 使用环境变量临时禁用特定的钩子——不要仅仅因为你不能运行其中一个就跳过所有的检查

源代码在这里

于 2021-03-24T02:18:08.647 回答
3

在 Git 2.9 中,您可以使用配置指向自定义挂钩目录core.hooksPath

Git 2.9 发行说明 - https://github.com/blog/2188-git-2-9-has-been-released

文档提及core.hooksPath- https://git-scm.com/docs/githooks

注意 - 这个问题可能是Git 钩子脚本可以与存储库一起管理吗?

于 2016-06-16T14:26:15.573 回答
2

您可以将存储库的.git目录设置为 git 存储库,只需向其中添加钩子和其他配置,将objects,refs等目录和文件添加index到其.gitignore. 不仅如此,您还可以设置一个 post-receive 挂钩来更新 metarepo 的来源。一旦您设置了初始配置,您就可以让它在没有任何额外工作的情况下引入更新。

我正在研究这个细节,比如忽略列表中应该包含的内容;我将结果保存在这个 repo的分支中。

于 2010-10-10T01:36:20.467 回答
2

对于基于 NodeJS 的项目,我建议你看看ghooks

于 2016-07-13T00:57:57.670 回答
0

我们将 .git/hooks 做成了工作树的符号链接。

对于那些需要提交钩子会拒绝的文件的罕见情况,我们使用git commit --no-verify

于 2010-01-12T17:41:12.340 回答