将git post-commit挂钩应用于所有当前和未来的repos

时间:2010-02-19 01:24:42

标签: git hook githooks

我写了一个Git post-commit钩子,它工作正常。但是,我想添加此钩子以应用于我正在处理的所有当前(和将来)git存储库。我尝试将钩子添加到我的~/.git/hooks/而不是项目目录中的hooks目录中,但是,这似乎不起作用。

有没有办法创建适用于我系统上所有存储库的全局Git挂钩(无需将它们复制到每个项目目录中)?如果没有,那么未来最好的解决方案是什么 - 也许是git-init模板?

4 个答案:

答案 0 :(得分:282)

从git 1.7.1开始,你可以在你的gitconfig中设置init.templatedir来告诉git在哪里寻找模板。

设置如下:

git config --global init.templatedir '~/.git_template'

之后,您创建或克隆的新存储库将使用此目录作为模板。将所需的挂钩放在~/.git_template/hooks中。通过在git init所在的同一目录中运行.git,可以使用适当的模板重新初始化现有存储库。

对于早于1.7.1的git版本,如果您像我一样并且仍想管理您的git init --template ~/.git_template目录以及其余的点文件,则运行.git_template会有效。您还可以使用$GIT_TEMPLATE_DIR环境告诉git init模板目录所在的位置。

答案 1 :(得分:150)

  

我想添加此钩子以应用于我正在处理的所有当前(和将来)git存储库

使用git 2.9+(2016年6月),您所要做的就是:

git config --global core.hooksPath /path/to/my/centralized/hooks

请参阅" change default git hooks":这样做是为了管理集中式挂钩。

答案 2 :(得分:69)

如果您希望系统中的任何地方(包括您以外的用户)都可以使用它们,则可以修改已安装模板目录的内容 - 这些目录位于$PREFIX/share/git-core/templates/hooks,其中$PREFIX可能是/usr/local }或/usr

如果你想让它只适合你,那么是的,最简单的就是git-init的--template选项。你可以轻松地保存一个个人模板目录,其中符号链接返回到你想要保留的默认值的默认值(单个挂钩,信息目录...),然后是hooks/post-commit中你自己的内容以及你想要的任何其他内容定制

答案 3 :(得分:5)

极简主义的方法是在您的存储库中创建一个git_hooks/目录,以跟踪您为该项目编写的钩子,通过在README中提及它来引起未来用户的注意,并且克隆后依靠他们做正确的事。我已经对此进行了一段时间的考虑并选择了增量方法。在路上,我可能会考虑使用像git-hooks这样的工具。