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

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


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

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


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

设置如下:

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

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

对于1.7.1以上的Git版本,执行Git init——template ~/。如果您像我一样,仍然想管理. Git_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

参见“change default git hooks”:这样做是为了管理集中式钩子。