如何做subversion合并樱桃挑选没有冲突

时间:2015-06-19 11:10:49

标签: svn

使用svn 1.8,我无法弄清楚与cherrypicking进行重新集成合并的最佳方法是什么(即我不想将所有修订合并到主干)。只要我合并所有修订,一切顺利,例如:

svn merge ^/branches/mybranch

现在我有一个版本在我的分支中不应该合并回主干,让我们说我的svn' history'是这样的:

rev 20: reintegrated branch => trunk
rev 21: added 'donotmergetotrunk.txt' to branch 'mybranch'
rev 22: added 'monkey.txt' to trunk
rev 23: added 'dog.txt' to branch 'mybranch'
rev 24: merged trunk => mybranch, monkey.txt added to branch

现在我想将除了修订版21之外的所有内容从mybranch重新集成到主干,但无论我尝试什么,我都会不断发生冲突

Tree conflict on 'monkey.txt'
    local file obstruction, incoming file add upon merge

我尝过这样的话:

svn merge -r 21:24 ^/branches/mybranch
svn merge -r 1:20 -r 21:24 ^/branches/mybranch

当然冲突可以手动解决,但在现实生活中我会遇到很多冲突,解决这些冲突会变得相当繁琐。

如何在不发生冲突的情况下执行此合并?

2 个答案:

答案 0 :(得分:1)

在您的简单案例中,您必须合并-r 23:24

在更常见的情况下,您可以使用-rN:M格式在SRC中使用最小的所需范围,并使用更改集的反向合并排除此范围内的不需要的修订:-c -R

答案 1 :(得分:1)

将分支合并到主干时,应跳过从主干到分支的先前同步合并。

否则,subversion会尝试将它们合并回主干,这会产生冲突:

monkey.txt被添加到rev.22中的trunk中 rev.22作为rev包含在分支中。 24个
然后当你尝试将分支合并到trunk时,Subversion尝试将rev.24应用到trunk并添加monkey.txt。但它已经添加了!冲突。

此外,您可以尝试使用http://svnbook.red-bean.com/en/1.7/svn.branchmerge.advanced.html#svn.branchmerge.advanced.blockchanges来阻止合并到主干中的一些修订。但在这种情况下,当您阻止所有不需要的修订并在trunk上执行时

svn merge ^/branches/mybranch

Subversion可以威胁为重新整合(这适用于所有差异)。我不确定Subversion 1.8如何决定是否同步或重新整合合并,最好是玩。