我正在使用node.js项目,我需要使用各种应用程序,如github,sourcetree等..来检查git源代码。是否可以在git commit消息上自定义验证并在提交更改时在所有应用程序中显示错误消息?
我知道有一个git hook' commit-msg'可以使用git,但我不知道如何使用它。
答案 0 :(得分:2)
这是一个样本。
#!/bin/sh
path=$1
echo path is $path
a=$(cat $path)
echo commit message is
echo $a
if [[ "$a" =~ "hello world" ]];then
echo commit format test passed
exit 0
else
echo commit format test failed
exit 1
fi
将其保存为名为commit-msg
的文件,并使其可执行并将其放入.git / hooks /。
此示例检查提交消息是否具有“hello world”子字符串。如果是这样,提交将成功。如果没有,提交将失败。
这是一个python版本
#!/usr/bin/python
import sys
path = sys.argv[1]
print "path is " + path
with open(path) as f:
lines = f.read()
print "commit message is"
print lines
if "hello world" in lines:
print "format test passed"
exit(0)
else:
print "format test failed"
exit(1)
你可以用你的逻辑改进这个钩子。您可以检查.git / hooks /是否有commit-msg.sample
。如果是,您可以将其作为参考阅读。你可以cp .git/hooks/commit-msg.smaple .git/hooks/commit-msg
然后编辑它。
此外,如果你想将这个钩子部署到每个repo中,你可以将这个钩子复制到/ usr / share / git-core / templates / hooks中,如果你使用的是Ubuntu。我不知道其他系统中的默认模板路径是什么。您可能需要检查。执行此操作后,当您git clone
时,此挂钩将被复制到.git / hook /中。至于已经存在的回购,你可以运行git init
来复制钩子。
还有一件事,如果你不想让钩子运行,你可以在--no-verify
时添加选项-n
或git commit
,这也会绕过钩{{1}如果它存在。
答案 1 :(得分:2)
正如您在Nodejs项目中提到的那样,我假设您有一个package.json
。我建议您查看ghooks,validate-commit-msg,commitizen和conventional-changelog。
我意识到这里有很多链接,但所有这些链接here's an example在AngularJS' commit convention之后一起工作:
package.json
:
"devDependencies": {
…
"commitizen": "2.8.1",
"cz-conventional-changelog": "1.1.6",
"ghooks": "1.3.2",
"validate-commit-msg": "2.6.1",
…
}
…
"config": {
"ghooks": {
"commit-msg": "validate-commit-msg"
},
"commitizen": {
"path": "node_modules/cz-conventional-changelog"
}
}
…