【问题标题】:SVN Pre-Commit Hook For Identical Messages相同消息的 SVN 预提交挂钩
【发布时间】:2013-10-03 14:55:31
【问题描述】:

我的同事都很固执。一开始他们会在没有任何消息的情况下提交,所以我试图教育他们并放入一个预提交脚本以检查是否为空,以防他们忘记。 然后他们会输入类似“已修复”的消息,所以我再次与他们交谈并更新脚本以强制它链接到错误跟踪器。现在他们为同一个文件连续 8 次输入相同的提交消息(Bug ID:Bug Title)。

在我与他们讨论这如何没有帮助之后,我如何制作一个预提交挂钩来检查提交消息是否与最后 20 条提交消息之一不同?

【问题讨论】:

  • 不要浪费时间建造墙壁。您的同事总会找到攀登它的方法。
  • 向他们展示信息丰富的提交消息的价值。他们不想被告知做什么,你需要向他们展示好处(对我有什么好处)。设置更多限制性的障碍只会让他们对你更生气,并导致内容和讨论变得更少有用。
  • 我希望问题开头的上下文可以避免这样的 cmets。如前所述,我已经与他们多次交谈,现在需要变得严厉。
  • 最终您会遇到一个问题,您需要查看日志以确定何时引入了某个更改,或者确定某个更改背后的原因。发生这种情况时,向您的同事展示他们的提交消息对于执行该任务是多么无用,以及通过不同的方式可以节省多少时间。老实说,我认为如果您成功创建了预提交挂钩,您将开始收到诸如“修复更多内容”、“再次修复内容”、“修复1”、“修复2”、“修复3”等消息。你真的需要让他们相信为什么,否则他们会继续寻找解决方法。
  • @ben 我认为您应该将此添加为答案。开发人员将坚持他们目前的“方法”,直到 *hit 击中粉丝。

标签: svn


【解决方案1】:

您可以在预提交挂钩中使用 SVN 命令或任何其他 shell 命令。您只需要提供已安装工具的完整路径。请记住,这是在服务器上运行的,因此它具有对存储库的 file:// 访问权限。因此,请执行 svnlook log(首选)或 svn log 并检查结果输出是否与当前日志消息匹配。

【讨论】:

  • svnlook log 是 pre-commit hooks 中的首选选项,而不是 svn log。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    相关资源
    最近更新 更多