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