我已经编写了一个Git提交后钩子,它可以正常工作。但是,我想添加此钩子以应用于我正在使用的所有当前(和将来)的git存储库。我尝试将钩子添加到~/.git/hooks/
项目目录的钩子目录中,而不是添加到我的钩子中,但是,这似乎没有用。
有什么方法可以创建适用于我系统上所有存储库的全局Git挂钩(而不必将它们复制到每个项目目录中)?如果没有,那么最好的解决方案是什么?也许是git-init模板?
我已经编写了一个Git提交后钩子,它可以正常工作。但是,我想添加此钩子以应用于我正在使用的所有当前(和将来)的git存储库。我尝试将钩子添加到~/.git/hooks/
项目目录的钩子目录中,而不是添加到我的钩子中,但是,这似乎没有用。
有什么方法可以创建适用于我系统上所有存储库的全局Git挂钩(而不必将它们复制到每个项目目录中)?如果没有,那么最好的解决方案是什么?也许是git-init模板?
Answers:
我想添加此钩子以应用于我正在使用的所有当前(和将来)git存储库
使用git 2.9+(2016年6月),您要做的就是:
git config --global core.hooksPath /path/to/my/centralized/hooks
请参阅“ 更改默认git挂钩 ”:已完成此操作以管理集中式挂钩。
/.git/hooks/pre_commit
我可以指出吗?
从git 1.7.1开始,您可以在gitconfig中设置init.templatedir来告诉git在哪里寻找模板。
像这样设置:
git config --global init.templatedir '~/.git_template'
之后,您创建或克隆的新存储库将使用此目录作为模板。将所需的挂钩放入~/.git_template/hooks
。通过git init
在与目录相同的目录中运行,可以使用适当的模板重新初始化现有存储库.git
。
对于早于1.7.1的git版本,git init --template ~/.git_template
如果您像我一样,并且仍要管理.git_template
目录以及其余的点文件,则可以运行。您还可以使用$GIT_TEMPLATE_DIR
环境来判断git init
模板目录在哪里。
git init
在现有回购协议上重新运行会擦除它- 不会,请参见:stackoverflow.com/questions/5149694/…–
git init
实际上并没有更新我的想法。似乎它不会覆盖已经存在的文件。stackoverflow.com/questions/10791486/。相反,您需要先删除旧的挂钩文件。
如果你希望他们无处不在您的系统(包括除了你的用户),您可以修改已安装的模板目录的内容-这些都在$PREFIX/share/git-core/templates/hooks
,那里$PREFIX
可能是/usr/local
或/usr
。
如果您只想这样做,那么是的,最简单的--template
选择是git-init。您可以轻松地保留一个个人模板目录,该目录的符号链接指向您想要保留的默认安装版本(各个钩子,信息目录...),然后包含您自己的内容hooks/post-commit
以及您想要自定义的其他内容。
git init
再次运行并添加了新的挂钩。
/Applications/SourceTree.app/Contents/Resources/git_local/share/git-core/templates/hooks
mingw64\share\templates\hooks
(或32位mingw32)下找到
mingw64\share\git-core\templates\hooks
(gfw 2.25)
极简主义的方法是git_hooks/
在存储库中创建一个目录,以跟踪您为该项目编写的钩子,通过在中提到它,以引起将来用户的注意README
,并在克隆后依靠它们来执行正确的操作。我已经对此进行了一段时间的思考,并选择了一种渐进的方法。我可能会考虑使用git-hooks之类的工具。