298

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

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

4

4 回答 4

300

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

像这样设置它:

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

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

对于早于 1.7.1 的 Git 版本,git init --template ~/.git_template如果您像我一样仍然想管理您的.git_template目录以及其余的点文件,那么运行将起作用。您还可以使用$GIT_TEMPLATE_DIR环境来判断git init您的模板目录在哪里。

于 2012-01-12T21:34:26.470 回答
238

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

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

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

请参阅“更改默认 git 挂钩”:这是为了管理集中挂钩。

于 2016-05-18T07:42:36.527 回答
72

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

如果你想让它只适合你,那么是的,最简单的就是--templategit-init 的选项。您可以轻松地保留一个个人模板目录,其中包含指向您想要保留的默认安装版本的符号链接(单独的挂钩、信息目录...),然后是您自己的内容hooks/post-commit以及您想要自定义的任何其他内容。

于 2010-02-19T01:49:46.777 回答
6

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

于 2012-06-01T20:50:20.897 回答