我写了一个Git提交后钩子,它工作正常。但是,我想添加这个钩子来应用于我正在处理的所有当前(和未来)git存储库。我尝试将钩子添加到我的~/.git/hooks/
而不是在项目目录中的钩子目录中,但是,这似乎不起作用。Git提交钩子 - 全局设置
有没有什么办法可以创建全局的Git钩子,这些钩子将应用于我系统上的所有仓库(无需将它们复制到每个项目目录中)?如果不是,那么最好的解决方案是什么 - 可能是git-init模板?
我写了一个Git提交后钩子,它工作正常。但是,我想添加这个钩子来应用于我正在处理的所有当前(和未来)git存储库。我尝试将钩子添加到我的~/.git/hooks/
而不是在项目目录中的钩子目录中,但是,这似乎不起作用。Git提交钩子 - 全局设置
有没有什么办法可以创建全局的Git钩子,这些钩子将应用于我系统上的所有仓库(无需将它们复制到每个项目目录中)?如果不是,那么最好的解决方案是什么 - 可能是git-init模板?
我想添加这个钩子应用到我的
使用Git 2.9+(2016年6月)工作的所有电流(和将来)Git仓库,你会做的是:
git config --global core.hooksPath /path/to/my/centralized/hooks
请参阅“change default git hooks”:已完成管理集中挂钩。
如果你想他们无处不在您的系统(包括除了你的用户),您可以修改已安装的模板目录的内容 - 这些都是在$PREFIX/share/git-core/templates/hooks
,其中$PREFIX
可能/usr/local
或/usr
。
如果你想这样做只是为了你,那么最好的办法就是git-init的--template
选项。你可以很容易地保留一个个人模板目录,它的符号链接返回到你想要保留的默认安装版本(单个钩子,info目录...),然后你自己的内容hooks/post-commit
以及任何你想要自定义的内容。
谢谢,这工作得很好。为了将其应用到我现有的项目中,我只是再次运行'git init'并添加了新的钩子。 – swanson 2010-02-19 02:33:51
精彩的提示Jefromi,谢谢大家! – 2011-05-10 14:30:44
这是一个整洁的解决方法,但它会要求您更改所有回购。这是可行的,但是插件或其他东西不存在一些可能性(这是如何在Bazaar上完成的)? – 2011-07-16 04:40:57
从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 init --template ~/.git_template
如果你像我一样会工作,仍然想管理.git_template
dir以及其他点文件。您也可以使用$GIT_TEMPLATE_DIR
环境来告诉git init
您的模板目录是。
用dotfiles管理git钩子是一个好主意。谢谢。 – 2012-07-19 15:29:52
很棒的回答。如果其他人想知道是否在现有的repo上重新运行'git init'会清除它 - **它不会**,请参阅:http://stackoverflow.com/questions/5149694/does-running-git-init-twice -initialize-a-repository-or-reinitialize-an-existing – kontur 2013-10-10 13:16:25
对于我来说,它并不适用于git模板文件夹的相对路径,以便在现有存储库上使用git init复制文件。我使用完整路径代替。 – user847988 2015-02-16 13:10:20
极简主义方法是在您的存储库中创建一个git_hooks/
目录,以跟踪您为该项目编写的挂钩,并通过在README
中提及该挂钩来引起未来用户的注意,并依靠它们执行正确的操作克隆后的东西。我在这方面思考了一段时间,并选择了一种渐进式方法。在路上,我可能会考虑使用像git-hooks这样的工具。
从Git 2.9开始,这个最好的方法已经改变了:VonC的答案是更好的选择。 http://stackoverflow.com/a/37293198/2741954 – 2016-06-16 07:41:43