Git钩子脚本可以和仓库一起pipe理吗?
我们想制作一些我们可以共享的基本钩子脚本 – 例如预格式化提交消息。 Git的钩子脚本通常存储在<project>/.git/hooks/
。 但是,这些脚本不会在人员进行克隆时传播,而且也不受版本控制。
有没有一种方法可以帮助每个人获得正确的钩子脚本? 我可以让这些钩子脚本指向版本控制脚本在我的回购?
理论上讲,你可以用你所有的脚本在你的项目目录中创build一个hooks
目录(或者你喜欢的任何名字),然后用.git/hooks
它们符号链接起来。 当然,每个克隆回购的人都必须build立这些符号链接(虽然你可能真的很喜欢,并且有一个部署脚本,克隆人可以运行半自动设置它们)。
在Git 2.9中 ,configuration选项core.hooksPath
指定一个自定义的挂钩目录。
将您的挂钩移动到存储库中的hooks
跟踪目录。 然后,configuration存储库的每个实例以使用跟踪的hooks
而不是$GIT_DIR/hooks
:
git config core.hooksPath hooks
一般来说,path可以是绝对的,也可以是相对于运行钩子的目录(通常是工作树的根目录;请参阅man githooks
说明部分)。
@Jefromi对一个类似的问题有一个很好的答案,他的回答包括代码显示如何做@mipadibuild议:
- 回答“把git挂钩到存储库”
除此之外,我在这个主题上发现了一篇很好的博客文章:
- “如何在存储库中包含git钩子,并仍然个性化你的机器”
怎么样的git钩子 ,它路由.git/hooks
调用到项目目录githooks
下的脚本。
还有很多的function,使您尽可能减less副本和符号链接钩到处。
如果你的项目是一个JavaScript项目,并且你使用npm
作为包pipe理器,你可以使用shared-git-hooks来执行npm install
上的githooks。
pre-commit
使预先提交钩子变得容易。 不回答OP关于pipe理任何任意git钩子的问题,但是pre-commit钩子可能是最常用于代码质量目的的。
我们正在使用Visual Studio解决scheme(以及项目),这些解决scheme具有事前和事后构build事件。 我添加了一个名为“GitHookDeployer”的项目。 项目自我修改后构build事件中的文件。 该文件被设置为复制到构build目录。 因此,这个项目每次都会build立,永远不会被跳过。 在构build事件中,它也确保所有的git钩子都到位。
请注意,这不是一个通用的解决scheme,因为有些项目当然没有什么可build立的。