Git提交挂钩 – 全局设置

我写了一个Git post-commit钩子,它工作正常。 不过,我想添加这个钩子,以适用于我正在工作的所有当前(和未来)的git仓库。 我试图把钩子添加到我的~/.git/hooks/而不是在项目目录的钩子目录中,但是这似乎不起作用。

有没有什么办法可以创build全局的Git钩子,这些钩子将应​​用于我的系统上的所有仓库(而不必将其复制到每个项目目录中)? 如果不是的话,最好的解决scheme是什么 – 可能是git-init模板?

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

像这样设置:

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

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

对于1.7.1以前的git版本,运行git init --template ~/.git_template将会起作用,如果你像我一样,仍然想要pipe理你的.git_template目录以及其他点文件。 您也可以使用$GIT_TEMPLATE_DIR环境来告诉git init您的模板目录在哪里。

我想添加这个钩子适用于我正在工作的所有当前(和将来)的git存储库

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

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

请参阅“ 更改默认git挂钩 ”:已完成pipe理集中挂钩。

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

如果你想这只是为了你,那么最简单的事情就是git-init的--template选项。 你可以很容易地保留一个个人模板目录的符号链接回到你想要保留的默认设置(单个钩子,info目录…),然后你自己的内容在hooks/post-commit和其他任何你想要的定制。

一个最简单的方法是在你的仓库中创build一个git_hooks/目录来跟踪你为这个项目编写的钩子,通过在README提到它来引起未来用户的注意,并且依靠它们在它们之后做正确的事情已经克隆。 我已经有一段时间了,并select了一个渐进的方法。 在路上,我可能会考虑使用像git-hooks这样的工具。