我的同事很固执。一开始他们会在没有任何消息的情况下提交,所以我试图教育他们并放入一个预提交脚本以检查是否为空,以防他们忘记。然后他们会输入类似“已修复”的消息,所以我再次与他们交谈并更新脚本以强制它链接到错误跟踪器。现在他们为同一个文件连续 8 次输入相同的提交消息(Bug ID:Bug Title)。
在我与他们讨论这如何没有帮助之后,我如何制作一个预提交挂钩来检查提交消息是否与最后 20 条提交消息之一不同?
我的同事很固执。一开始他们会在没有任何消息的情况下提交,所以我试图教育他们并放入一个预提交脚本以检查是否为空,以防他们忘记。然后他们会输入类似“已修复”的消息,所以我再次与他们交谈并更新脚本以强制它链接到错误跟踪器。现在他们为同一个文件连续 8 次输入相同的提交消息(Bug ID:Bug Title)。
在我与他们讨论这如何没有帮助之后,我如何制作一个预提交挂钩来检查提交消息是否与最后 20 条提交消息之一不同?
您可以在预提交挂钩中使用 SVN 命令或任何其他 shell 命令。您只需要提供已安装工具的完整路径。请记住,这是在服务器上运行的,因此它具有对存储库的 file:// 访问权限。因此,执行svnlook log
(首选)或svn log
并检查结果输出是否与当前日志消息匹配。
svnlook 有 2 个选项组合在一起可以解决这个问题。
svnlook 日志http://svnbook.red-bean.com/en/1.7/svn.ref.svnlook.c.log.html
svnlook 最年轻http://svnbook.red-bean.com/en/1.7/svn.ref.svnlook.c.youngest.html
最年轻的得到头部修正。然后我将最后 20 次提交回显到一个临时文件。文件并使用 grep 在临时文件中搜索提交消息。文件。
grep 选项是 F 使用文件作为输入,x 匹配整行和 q 安静。
#Prevent people putting in the same commit message multiple times by looking for an identical message in the last 20 commits
ID=$(svnlook youngest $REPOS)
COMMITS=/tmp/svncommits.txt
rm $COMMITS
for (( i=$ID-20; i<=$ID; i++ ))
do
echo $(svnlook log $REPOS -r $i) >> $COMMITS
done
if $(grep -Fxq "$COMMIT_MSG" "$COMMITS") ; then
echo "Please describe what your change is, why you made it and don't use the same commit message every time." 1>&2
exit 1
fi