我试图与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"时,它确实进行了自动重新集成。

10-07 23:05