在Subversion 1.5中将分支重新集成到主干时,缺少范围错误消息

时间:2010-03-18 18:02:50

标签: svn merge branch trunk svn-reintegrate

我正在尝试将开发分支重新集成到我的Subversion 1.5存储库中的trunk中。在此操作之前,我将所有更改从主干合并到开发分支。现在,当我尝试从分支重新集成更改时,我收到以下错误消息:

Command: Reintegrate merge https://dev/svn/branches/devel into C:\trunk  
Error: Reintegrate can only be used if revisions 280 through 325 were previously   
Error: merged from https://dev/svn/trunk to the reintegrate   
Error: source, but this is not the case:  
Error:   branches/devel/images/test  
Error:     Missing ranges: /trunk/images/test:280-324  
...

然后消息继续抱怨我的项目中的一些文件夹。但是当我尝试将更改从主干再次合并到开发分支时,TortoiseSVN告诉我没有什么可以合并(因为我之前已经合并了所有更改):

Command: Merging revisions 1-HEAD of https://dev/svn/trunk into C:\devel, respecting ancestry  
Completed: C:\devel  

我正在尝试按照此处的说明进行操作:http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html,但没有解决此类问题的任何内容。

有什么想法吗?也许我应该删除主干然后复制我的分支?但我不确定它是否安全。

另见

  

svn merge with --reintegrate complains about missing ranges but mergeinfo seems correct

6 个答案:

答案 0 :(得分:27)

我们在这个问题上挣扎了几个星期,我们终于解决了它。

在我们的案例中,我们每天都在与所有主干版本合并的分支机构上工作。当我们尝试重新集成它(合并回主干)时,我们遇到了这个错误。 当我们尝试将缺失的范围合并到我们的分支时,我们得到消息说没有什么可以合并。它发生在几个不相关的分支和不同的文件和文件夹中。

解决方案是将缺少的范围添加到我们分支中文件或文件夹的svn:mergeinfo属性。

对于每个"缺失范围:路径:revision_range"你收到的信息中的一行:

  • 编辑中提到的文件/文件夹中的svn:mergeinfo属性 合并的分支
  • 在属性值的末尾添加以下内容:string(例如/ trunk / images / test:280-324)
  • 保存SVN属性

提交所有更改并重新集中

答案 1 :(得分:26)

您必须首先将修订版r280到r324从trunk合并到您的分支中。

看起来你已经将r325合并到了你的分支中,但是--reintegrate需要得到所有版本直到合并的最新版本。必须没有差距。 所以这里有一点Diag:

           +----------------------> /branches/devel
          /                    /   \<--merge not working!
 --------/-------+--+---+-----+---------> trunk
         |       \  |  /      |
        280       \ V /      325
                    V
                  missing sync merges from trunk to branch

我认为这是您的分支结构,因此您需要同步从主干到分支的所有更改。你只合并了r325,所以只需合并r280-r324,这样你就可以使用--reintegrate

答案 2 :(得分:9)

我有这个问题,它最终是由我的分支中的文件夹的错误SVN属性引起的。

解决方案很简单 - 我使用已报告丢失的特定修订号从干线合并到我的分支。

enter image description here

然后指定仅记录合并,例如。

enter image description here

此操作正确地使我的分支与trunk一致,并且我的后续分支重新集成到trunk中成功运行,没有遗漏范围错误消息。

此技术避免了对任何文件/文件夹的任何svn:mergeinfo属性的任何手动编辑。

答案 3 :(得分:4)

当我开始使用-r选项进行svn merge命令时,我停止了这些问题,并且在没有它合并之后才尝试执行--reintegrate。我正在使用svn 1.6.1。

这就是我的所作所为:
1.当从分支合并到主干或从主干到分支时,我使用-r选项,如下所示:

 cd branchWorkArea/topDir
 svn merge -r<branchPoint>:HEAD [otheroptions] svn://svn/project/trunk/topDir
  1. 当我解决了任何冲突并测试我的代码时,我将合并提交给分支,然后使用相同的基本选项将分支合并到主干(特别是-rBranchPoint:HEAD)

  2. 当测试并提交了trunk时,我使用--reintegrate选项来关闭分支。确保你也使用-rbranchPoint:HEAD选项。

  3. 对于其他选项,我总是使用

      

    - 深度无穷大(默认值   1.6.2中的无穷大但不是之前)   -x -b -x -w --ignore-eol-style

    也许,我很幸运,但事情似乎确实更好。

    要查找分支的分支点,请执行svn log --stop-on-copy,然后查看最后一次转换 - 它将是创建分支的svn副本。

    要在linux上执行此操作,我会执行以下操作:

      

    svn log --stop-on-copy   svn:// svn / project / trunk / topDir |
      grep'^ r'|尾巴-1 |   sed -e's / ^ r // 1'-e's /。* // g'

    这应该打印分支点的修订号。

    祝你好运

答案 4 :(得分:0)

这不是一个答案,而是一个明确的问题。

我的错误消息是:

Reintegrate can only be used if revisions 2669 through 3403 were previously merged from
https://../schemas
to the integrate source, but this is not the case:
trunk/schemas:
Missing ranges:
../schemas:2673,2682,2720,2736,2878,2960,3003,3057

我使用以下提供的解决方案合并了修订版本: @Greg Trevellick,仍然收到错误消息。

当我按照schema文件夹上@pako的回答打开svn:mergeinfo属性时,内容看起来像

/branches/repos_develop_os/trunk_branch-os/schemas:3329
/trunk/schemas:2669-2673,2682,2720,2736,2878,2960,3003,3057

我不确定该如何修改此内容。看起来丢失的范围就在那里。

答案 5 :(得分:-1)

我刚遇到这个问题,对我来说最重要的是,将分支与Trunk同步,以便分支机构可以从主干获得最新的更新。在此之后,我尝试将分支重新整合到主干并且工作正常。