我试图与SVNKit合并,但会导致树冲突。为了找到原因,我使用svn命令行工具进行了一些实验。此命令将导致与SVNKit相同的冲突:
svn merge –r 0:HEAD "https://svnserver.com/svn/test/trunk"
但
svn merge "https://svnserver.com/svn/test/trunk"
工作正常。
那么,如何使用SVNKit做同样的事情? doMerge需要SVNRevisionRange。
SVNRevisionRange r = new SVNRevisionRange(SVNRevision.create(0), SVNRevision.HEAD);
dc.doMerge(mergeUrl, mergeRev, Arrays.asList(r), mr, INFINITY, true, false, false, false);
最佳答案
首先,您不需要像第一个示例中那样对存储库中的所有修订版本运行合并。之所以会发生树冲突,是因为在那些0:HEAD修订版中存在文件夹重命名,并且它们不能完全干净地应用。阅读SVNBook | Dealing with Structural Conflicts。
关于您的SVNKit代码段,似乎您想运行重新集成合并(对吗?)。在这种情况下,您做错了。阅读SVNKit SvnMerge class documentation on reintegrate merges。
我猜您的Subversion svn.exe客户端具有版本1.8或更高版本。从版本1.8开始,客户端does reintegrate merges automatically,在我看来,当您运行svn merge "https://svnserver.com/svn/test/trunk"
时,它确实进行了自动重新集成。