2009-01-09 106 views
201

我们希望制作一些我们都可以共享的基本钩子脚本 - 例如预格式化提交消息等。 Git的钩子脚本通常存储在<project>/.git/hooks/之下。但是,这些脚本不会在人们进行克隆时传播,并且它们不受版本控制。Git钩子脚本可以与存储库一起管理吗?

有没有一种方法可以帮助每个人获得正确的钩子脚本?我可以让这些钩子脚本指向我的回购中的版本控制脚本吗?

+1

一个很好的问题。我只希望有更好的答案(不要抱怨@mipadi,我只希望git有办法以更自动的方式做到这一点 - 即使只有指定给git clone的选项。) – lindes 2011-02-08 05:43:50

+0

我同意,@ lindes!但是也许会限制这种有意识的分享?我想,事情会让Windows用户感到混乱。 – kristianlm 2011-09-21 11:21:34

+0

@ kristianlm:有时候有各种各样的原因可能会让人觉得混乱......还有一些时候它很适合那里。我只是希望有一些选择或一些可以复制钩子的东西。我想我只需要在某个时候检查一下git-core代码,然后创建一个补丁。 :)(或者希望别人会......或者在[mipadi的回答](http://stackoverflow.com/a/427269/313756)或其他方法中使用解决方法) – lindes 2012-01-15 05:09:47

回答

105

从理论上讲,您可以使用所有脚本在您的项目目录中创建一个hooks目录(或任何您喜欢的名称),然后在.git/hooks中对它们进行符号链接。当然,每个克隆回购的人都必须设置这些符号链接(尽管你可能会非常喜欢并且有一个部署脚本,克隆人可以运行它们来半自动地设置它们)。

2

git-hooks怎么样,它的路径.git/hooks调用到项目目录下的脚本githooks

还有很多功能可以使您尽可能减少复制和符号链接钩到处。

2

如果您的项目是一个JavaScript项目,并且您使用npm作为包管理器,则可以使用shared-git-hooksnpm install上强制执行githook。

99

Git 2.9中, 配置选项core.hooksPath指定了自定义挂钩目录。

将您的挂钩移至存储库中的hooks跟踪目录。然后,库的配置每个实例使用跟踪hooks而不是$GIT_DIR/hooks

git config core.hooksPath hooks 

一般而言,路径可以是绝对的,或相对于在钩运行目录(通常工作树根;请参见man githooks的说明部分)。

1

pre-commit使预先提交钩子变得很容易。不回答OP关于管理任何任意git钩子的问题,但预先提交钩子可能是最常用于代码质量目的的。

0

我们正在使用Visual Studio解决方案(以及项目),这些解决方案具有构建事件前后的事件。我添加了一个名为'GitHookDeployer'的项目。项目自我修改后构建事件中的文件。该文件被设置为复制到构建目录。因此这个项目每次都会建立,永远不会被跳过。在构建事件中,它还确保所有git钩子都已到位。

请注意,这不是一个通用的解决方案,因为有些项目当然没有任何东西需要构建。

相关问题