我写了一个Git post-commit钩子,它工作正常。但是,我想添加此钩子以应用于我正在处理的所有当前(和将来)git存储库。我尝试将钩子添加到我的~/.git/hooks/
而不是项目目录中的hooks目录中,但是,这似乎不起作用。
有没有办法创建适用于我系统上所有存储库的全局Git挂钩(无需将它们复制到每个项目目录中)?如果没有,那么未来最好的解决方案是什么 - 也许是git-init模板?
答案 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这样的工具。