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立的。