我们在项目中使用自定义编写的 Git 挂钩。
钩子存储在项目的存储库中,当它们发生变化时,要获得新版本,每个用户必须手动将它们复制到他的 .git/hooks 目录中。这是相当不方便的。
改善这一点的一种方法是使 .git/hooks 成为工作树的符号链接。但这意味着每个分支(甚至是正在开发的用户本地功能分支)都应该具有最新版本的钩子。这也不方便。
你会如何解决这个问题?
维护一个单独的钩子存储库和符号链接。
我同意,如果 Git 有一个用于传播钩子脚本的内置机制,那就太好了,但它没有。
http://benjamin-meyer.blogspot.com/2010/06/managing-project-user-and-global-git.html似乎是一种自动化钩子符号链接的便捷方式,以促进全局、每个用户和每个项目钩子。
pre-commit有很多看起来很有前途的功能
在 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 钩子脚本可以与存储库一起管理吗?
您可以将存储库的.git
目录设置为 git 存储库,只需向其中添加钩子和其他配置,将objects
,refs
等目录和文件添加index
到其.gitignore
. 不仅如此,您还可以设置一个 post-receive 挂钩来更新 metarepo 的来源。一旦您设置了初始配置,您就可以让它在没有任何额外工作的情况下引入更新。
我正在研究这个细节,比如忽略列表中应该包含的内容;我将结果保存在这个 repo的分支中。
对于基于 NodeJS 的项目,我建议你看看ghooks。
我们将 .git/hooks 做成了工作树的符号链接。
对于那些需要提交钩子会拒绝的文件的罕见情况,我们使用git commit --no-verify