将git后提交钩子应用到所有当前和未来的存储库

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

是否有一种方法可以创建应用于系统上所有存储库的全局Git钩子(而不必将它们复制到每个项目目录中)?如果不是,那么接下来的最佳解决方案是什么——也许是git-init模板?

89949 次浏览

如果你想让它们在你的系统中到处都是(包括你以外的用户),你可以修改已安装模板目录的内容——它们在$PREFIX/share/git-core/templates/hooks中,其中$PREFIX可能是/usr/local/usr

如果你想让它只是为你,那么是的,最简单的事情是git-init的--template选项。你可以很容易地保留一个个人模板目录,其中包含指向你想保留的默认安装版本的符号链接(单个钩子,info目录…),然后在hooks/post-commit中保存你自己的内容和任何你想自定义的内容。

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

设置如下:

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

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

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

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

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

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

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

参见"更改默认的git钩子":这样做是为了管理集中式钩子。