git本身自带hooks入口,支持用户通过脚本的方式在git命令执行前后进行一些检查工作,使用的脚本语言为Shell。相关hook脚本需放在本地.git/hooks
目录下,打开该目录可以看到很多示例脚本,我们要用到的正是commit-msg
这个。
只需要将对应脚本的后缀.sample
去掉即可启动该脚本,然后我们将脚本内容修改为自己的脚本逻辑即可:
#!/bin/sh
COMMIT_MSG=`cat $1 | egrep "^(feat|fix|docs|chore)\(\w+\)?:\s(\S|\w)+"`
if [ "$COMMIT_MSG" = "" ]; then
echo "Commit Message 不规范,请检查!\n"
exit 1
fi
if [ ${#COMMIT_MSG} -lt 15 ]; then
echo "Commit Message 太短了,请再详细点!\n"
exit 1
fi
git是无法将.git
下的文件提交到仓库的,所以上述修改只能在本地生效,为了让团队可以共享这个检查规则,可以把上述脚本文件放在一个新建目录下,然后用gradle脚本同步到.git/hooks
目录下:
比如在项目中新建ci
这个目录:
ci
├── git-commit-msg.sh : 上面的脚本文件
└── script.gradle:用于安装sh脚本
其中script.gradle
内容如下:
import java.security.MessageDigest
final def rootPath = rootProject.rootDir.path
final def oldFile = rootProject.file("$rootPath/.git/hooks/commit-msg")
final def newFile = rootProject.file("$rootPath/ci/git-commit-msg.sh")
if (!oldFile.exists() || !oldFile.isFile() || md5(oldFile) != md5(newFile)) {
copy {
from newFile
into oldFile.parent
rename {
oldFile.name
}
}
}
static md5(File file){
return MessageDigest.getInstance("MD5").digest(file.bytes).encodeHex().toString().toLowerCase()
}