我们想做一些基本的钩子脚本,大家都可以共享——比如预先格式化提交消息。Git有钩子脚本,通常存储在<project>/. Git /hooks/下。但是,当人们进行克隆时,这些脚本不会传播,并且它们不受版本控制。
是否有一种好方法可以帮助每个人获得正确的钩子脚本?我能不能让那些钩子脚本指向我的repo中的版本控制脚本?
我们想做一些基本的钩子脚本,大家都可以共享——比如预先格式化提交消息。Git有钩子脚本,通常存储在<project>/. Git /hooks/下。但是,当人们进行克隆时,这些脚本不会传播,并且它们不受版本控制。
是否有一种好方法可以帮助每个人获得正确的钩子脚本?我能不能让那些钩子脚本指向我的repo中的版本控制脚本?
当前回答
使用git-hooks。它将.git/hooks调用路由到项目目录githooks下的脚本中。
还有很多功能,使您能够最大限度地减少复制和符号链接钩子到处。
其他回答
如果你的项目是一个JavaScript项目,并且你使用npm作为包管理器,你可以使用shared-git-hooks在npm install上强制使用Git钩子。
完全披露:这个包是我写的
使用git-hooks。它将.git/hooks调用路由到项目目录githooks下的脚本中。
还有很多功能,使您能够最大限度地减少复制和符号链接钩子到处。
你可以让你的hooks文件夹成为另一个Git存储库,并将其链接为子模块…
我想,只有当你有很多成员和钩子定期改变时,这是值得的。
对于Gradle用户
我发现这些脚本对于Gradle项目非常有用。
build.gradle
从:rootProject.file('gradle/install-git-hooks.gradle')
gradle - install-git-hooks gradle。
tasks.create(name: 'gitExecutableHooks') {
doLast {
Runtime.getRuntime().exec("chmod -R +x .git/hooks/");
}
}
task installGitHooks(type: Copy) {
from new File(rootProject.rootDir, 'pre-commit')
into { new File(rootProject.rootDir, '.git/hooks') }
}
gitExecutableHooks.dependsOn installGitHooks
clean.dependsOn gitExecutableHooks
未雨绸缪
.... your pre commit scripts goes here
要对hooks目录进行版本化(假设它存储在hooks/中),在工作副本根目录下创建一个.gitconfig文件,包含以下内容:
[core]
hooksPath = hooks
它将覆盖.git/config。