我写了一个 Git 提交后钩子,它工作正常。但是,我想添加这个钩子以应用于我正在处理的所有当前(和未来)Git 存储库。我尝试将钩子添加到我的~/.git/hooks/
目录而不是项目目录的钩子目录中,但是,这似乎不起作用。
有没有办法创建将应用于我系统上所有存储库的全局 Git 挂钩(无需将它们复制到每个项目目录中)?如果不是,那么最好的解决方案是什么——也许是 git-init 模板?
从 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
您的模板目录在哪里。
我想添加这个钩子以应用于我正在处理的所有当前(和未来)git 存储库
使用 git 2.9+(2016 年 6 月),您要做的就是:
git config --global core.hooksPath /path/to/my/centralized/hooks
请参阅“更改默认 git 挂钩”:这是为了管理集中挂钩。
如果您希望它们在您的系统上的任何地方(包括您以外的用户),您可以修改已安装模板目录的内容 - 那些在$PREFIX/share/git-core/templates/hooks
,其中$PREFIX
可能是/usr/local
或/usr
.
如果你想让它只适合你,那么是的,最简单的就是--template
git-init 的选项。您可以轻松地保留一个个人模板目录,其中包含指向您想要保留的默认安装版本的符号链接(单独的挂钩、信息目录...),然后是您自己的内容hooks/post-commit
以及您想要自定义的任何其他内容。
一种极简主义的方法是在您的存储库中创建一个git_hooks/
目录来跟踪您为该项目编写的钩子,通过在 a 中提及它来引起未来用户的注意README
,并在他们克隆后依靠他们做正确的事情。我已经对此进行了一段时间的思考,并选择了一种渐进的方法。以后我可能会考虑使用像git-hooks这样的工具。