我们想做一些基本的钩子脚本,大家都可以共享——比如预先格式化提交消息。Git有钩子脚本,通常存储在<project>/. Git /hooks/下。但是,当人们进行克隆时,这些脚本不会传播,并且它们不受版本控制。

是否有一种好方法可以帮助每个人获得正确的钩子脚本?我能不能让那些钩子脚本指向我的repo中的版本控制脚本?


当前回答

我们使用的Visual Studio解决方案(以及项目)具有构建前和构建后事件。我正在添加一个名为“GitHookDeployer”的额外项目。项目在生成后事件中自我修改文件。该文件被设置为复制到构建目录。因此,项目每次都被构建,并且从未被跳过。在构建事件中,它还确保所有git钩子都到位。

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

其他回答

灵感来自a3765910对Gradle的回答,但修改为运行每个构建。

将以下内容添加到应用程序的构建中。Gradle(假设你已经创建了你想要保存在源代码控制中的githooks/pre-commit文件):

copy {
    from new File(rootProject.rootDir, 'githooks/pre-commit')
    into { new File(rootProject.rootDir, '.git/hooks') }
}

我目前正在我们的代码库中工作,我遇到了一个名为husky的库,它简化了如何在团队中使用和共享GitHub Hooks。我强烈建议你调查一下。

如果你的项目是一个JavaScript项目,并且你使用npm作为包管理器,你可以使用shared-git-hooks在npm install上强制使用Git钩子。

完全披露:这个包是我写的

要对hooks目录进行版本化(假设它存储在hooks/中),在工作副本根目录下创建一个.gitconfig文件,包含以下内容:

[core]
hooksPath = hooks

它将覆盖.git/config。

大多数现代编程语言,或者说它们的构建工具,都支持插件来管理Git钩子。这意味着您所需要做的就是配置您的包。Json, pom.xml等文件,团队中的任何人都没有选择,除非他们更改构建文件。

该插件将为您添加内容到.git目录。

例子:

Git构建钩子Maven插件

githook-maven-plugin

git-hooks-js