0

如果修订不是合并的,我试图编写一个预提交挂钩来阻止开发人员提交到发布分支。仅允许开发人员提交合并的修订。

这是我计划好的行动

svn:mergeinfo 属性将跟踪合并的修订。所以如果我设法获得即将提交的修订,则在我的预提交挂钩中。我可以根据 mergeinfo 输出检查它以查看修订是否是合并的.

从理论上讲,这似乎很容易。问题是我怎样才能得到修订。

我如何从 SVNLOOK 命令中获取修订号

如果我的问题很愚蠢,请原谅我。

4

1 回答 1

0

如果您的开发人员没有那么受过教育,那么他们可能不会意识到您的 svn 钩子在做什么,并且如果他们故意编辑 svn:mergeinfo 属性纯粹是为了提交到发布分支而不是合并,那么您会遇到更大的问题。

此脚本检查提交是否针对发布分支。然后它使用 svnlook diff 检查是否有属性更改以及 svn:mergeinfo 是否已更改。

!#/bin/bash
REPOS="$1"
TXN="$2"

#Make the release branch only accept merge commits
if svnlook changed $REPOS -t $TXN |grep -q "my-release-branch-name/" ; then
    if svnlook diff $REPOS -t $TXN |grep 'Modified: svn:mergeinfo' && svnlook diff $REPOS -t $TXN |grep 'Property changes on:'; then
        #Assume that someone hasn't gone to the trouble of making a commit look like a merge!
        exit 0
    else
        echo "Branch my-release-branch-name only accepts merge commits! " 1>&2
        exit 1
    fi
fi

# All checks passed, so allow the commit.
exit 0
于 2012-11-26T16:49:06.033 回答