8

这是谜语:

C:\code\trunk> svn merge --reintegrate http://svn.e.com/repos/branches/lih --accept postpone --dry-run
svn: E195016: Reintegrate can only be used if revisions 11430 through 12384 were previously merged from http://svn.e.com/repos/trunk to the reintegrate source, but this is not the case:
  branches/lih
    Missing ranges: /trunk:11902

但是,如果我进入分支目录并尝试合并该范围,则没有可合并的内容!

C:\code\branches\branch> svn merge -r 11901:11902 http://svn.e.com/repos/trunk --accept postpone --dry-run
C:\code\branches\branch>

甚至svn merge -r 11898:11903显示没有什么可以合并的。

现在我似乎无法将我的分支重新整合到主干中!请帮忙!

PS lih 分支直到 11906 年才创建。它是从 hd 分支分支出来的,而 hd 分支是从 trunk 分支出来的(并且 hd 已经合并回 trunk)。

4

2 回答 2

5

我刚刚遇到了类似的问题,问题是主干有两个取消修订(即主干上的 rev 20865 undid rev 20857)。因此,当我第一次从主干合并到分支时,这对修订没有任何要合并的内容,但没有将它们包含在相关文件的合并信息中。然后,当我尝试从分支合并回主干时,它反对缺少这两个修订。

我的解决方案(在手动验证为有问题的文件取消了修订之后)是将两个修订中的每一个明确合并到分支(通过 svn merge ^/trunk -c 20857 和 svn merge ^/trunk -c 20865),提交,然后将分支合并回主干。第二次,一切顺利。这是使用 Subversion 1.8.0 (r1490375)。

我之前可以使用 merge with --record-only 来解决类似的问题,以将更改标记为在分支上正确合并,但合并实际文件可能更安全(以防万一发生的更改不完全取消)。

看起来 Subversion 1.8 处理合并信息以取消对我的更改的方式中的错误。

于 2013-11-26T23:24:41.407 回答
3

这似乎对我有用,但我不能声称理解它或保证这是解决我的问题的最佳方法。

首先,您的分支必须拥有所有对主干的最新提交,这一点很重要。所以同步它(从主干合并到分支)。

然后,您基本上可以通过在主干目录中执行此操作来强制重新集成:( svn merge http://svn.e.com/repos/trunk/@REV http://svn.e.com/repos/branches/lih/ . --dry-run但将 REV 替换为最新版本 #)。

于 2012-10-25T21:25:23.610 回答