我试着编写一个预提交钩子来阻止开发人员进入发布分支,如果修订版本不是合并版本。 开发人员只能提交合并修订版。
这是我计划的行动
svn:mergeinfo属性将跟踪修改merged.so在我的预提交钩子中如果我以某种方式设法获得即将提交的修订。我可以检查它对mergeinfo输出以查看修订是否合并的。
在理论上看起来很容易。问题是如何才能得到修订。
如何从SVNLOOK命令
中获取修订号 如果我的问题很愚蠢,请原谅我。答案 0 :(得分:0)
如果你的开发人员没有受过教育,那么他们可能不会意识到你的svn钩子正在做什么,如果他们故意编辑svn:mergeinfo属性纯粹是为了提交发布分支而不是合并,那么你就会遇到更大的问题。 / p>
此脚本检查提交是否适用于发布分支。 然后它使用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