我写了一个Git后提交钩子,它可以正常工作。但是,我想添加这个钩子,以应用于我正在处理的所有当前(和未来)Git存储库。我尝试将钩子添加到我的~/.git/hooks/目录中,而不是在项目目录中的hooks目录中,然而,这似乎不起作用。
~/.git/hooks/
是否有一种方法可以创建应用于系统上所有存储库的全局Git钩子(而不必将它们复制到每个项目目录中)?如果不是,那么接下来的最佳解决方案是什么——也许是git-init模板?
如果你想让它们在你的系统中到处都是(包括你以外的用户),你可以修改已安装模板目录的内容——它们在$PREFIX/share/git-core/templates/hooks中,其中$PREFIX可能是/usr/local或/usr。
$PREFIX/share/git-core/templates/hooks
$PREFIX
/usr/local
/usr
如果你想让它只是为你,那么是的,最简单的事情是git-init的--template选项。你可以很容易地保留一个个人模板目录,其中包含指向你想保留的默认安装版本的符号链接(单个钩子,info目录…),然后在hooks/post-commit中保存你自己的内容和任何你想自定义的内容。
--template
hooks/post-commit
从Git 1.7.1开始,你可以在gitconfig中设置init.templatedir来告诉Git在哪里寻找模板。
设置如下:
git config --global init.templatedir '~/.git_template'
之后,您创建或克隆的新存储库将使用此目录作为模板。将你想要的钩子放在~/.git_template/hooks中。通过在.git所在的目录中运行git init,可以使用适当的模板重新初始化现有的存储库。
~/.git_template/hooks
.git
git init
对于1.7.1以上的Git版本,如果你像我一样,仍然想管理你的.git_template目录以及其他点文件,运行git init --template ~/.git_template就可以了。你也可以使用$GIT_TEMPLATE_DIR环境来告诉git init你的模板目录在哪里。
.git_template
git init --template ~/.git_template
$GIT_TEMPLATE_DIR
一个极简的方法是在你的存储库中创建一个git_hooks/目录来跟踪你为该项目编写的钩子,通过在README中提到它来引起未来用户的注意,并依赖他们在克隆后做正确的事情。我已经考虑了一段时间,并选择了一种渐进的方法。接下来,我可能会考虑使用git-hooks这样的工具。
git_hooks/
README
我想添加这个钩子来应用到我正在工作的所有当前(和未来)git存储库
使用git 2.9+(2016年6月),你所要做的就是:
git config --global core.hooksPath /path/to/my/centralized/hooks
参见"更改默认的git钩子":这样做是为了管理集中式钩子。