SVN使用--reintegrate合并时提示缺少范围,但合并信息似乎是正确的

12

我有一个项目,其结构如下:

^/project/trunk
^/project/branches/mybranch

当前 HEAD 的版本是 1048。该分支是从主干在 r523 中复制的。主干已经合并到我的分支中,结果为 r1048。关于 ^/project/branches/mybranch 的合并信息如下:

/project/trunk:523-1047

而 trunk 的 mergeinfo 中没有任何记录提到来自 ^/project/branches/mybranch。实际上,trunk 和 branches 都保存了与 mybranch 平行的分支的合并信息,但这些合并信息在两个输出中看起来完全相同。

现在我进入我的 trunk 工作副本并尝试执行

svn merge --reintegrate ^/project/branches/myproject

我收到了一个错误信息,内容为:

svn: Reintegrate can only be used if revisions 523 through 1048 were previously merged from file:///home/svn/project/trunk to the reintegrate source, but this is not the case:
  project/branches/mybranch/src
    Missing ranges: /project/trunk/src:523-1047

这很奇怪,因为我的分支文件夹上的合并信息告诉我523-1047已经正确地从主干合并到了分支。那个子文件夹有什么问题?src是一个显然存在于主干和分支中的目录。

我认为问题出在那里。如果我查看svn pg svn:mergeinfo ^/project/branches/mybranch/src@HEAD命令下mybranch/src的合并信息,我什么都得不到。然而,如果我查看trunk/src (svn pg svn:mergeinfo ^/project/trunk/src@HEAD),我得到以下结果:

/project/branches/mybranch/src:784

看起来似乎有人从分支中精选了一些内容合并到主干代码中,但是在主干代码文件夹中并没有出现这些内容。

问题出在这里吗?最重要的是:我该怎么解决它?

2个回答

14

问题就出在这里了吗?

是的,确切地说-后来合并子树总是会让重新集成变得混乱。

最重要的是:我该怎么治疗它??

从 /project/trunk/src 中删除合并信息(mergeinfo)。


1
不幸的是,这对我没用。我的分支和主干在内容上是相同的,但可能由于某些原因它们在 SVN 树结构中有所不同。我不得不从主干创建一个新的分支,并被迫删除旧的分支,现在它可以工作,但显然这不是理想的解决方案。 - Alessandro C
我知道这已经过去好几年了,但我很好奇为什么删除cherry pick的记录是正确的答案?我想你是说一旦删除了它,无论是向左还是向右合并都成功了,那么问题路径的历史记录在精神上就是正确的,因为以前合并的内容现在真的在新的合并点而不再是旧的cherry pick修订版了?这样对吗? - Joshua
@Joshua - 这是2013年(和当时的SVN版本)的正确答案。据我所知,--reintegrate选项从1.8版本以来就已经被“弃用”,而“子树合并”的当前行为必须与实际的SVN重新检查。 - Lazy Badger

4

这里有一个非常类似的主题,您可能希望查看:

重新集成只能在之前合并了修订版本的URL中用于重新集成源代码

特别是这个答案来自Paul Whipp,当我遇到同样的问题并且不想删除合并信息时,它对我很有帮助,因为这听起来像是一个变通方法而不是一个“真正”的解决方法。

简言之: 尝试手动合并该特定文件/文件夹的缺失信息(就像svn建议的那样)。 对我来说非常有效。

请参阅Paul的答案以获取相应的代码示例等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接