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

pak*_*ako 26 svn merge branch trunk svn-reintegrate

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

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  
...
Run Code Online (Sandbox Code Playgroud)

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

Command: Merging revisions 1-HEAD of https://dev/svn/trunk into C:\devel, respecting ancestry  
Completed: C:\devel  
Run Code Online (Sandbox Code Playgroud)

我正在尝试按照这里的说明:http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html,但没有解决这样的问题.

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

也可以看看

svn与--reintegrate合并抱怨缺少范围,但mergeinfo似乎是正确的

小智 27

我们在这个问题上奋斗了几个星期,我们终于解决了.

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

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

对于您收到的消息中的每个"Missing ranges:path:revision_range"行:

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

提交所有更改并重新进行重新集成

  • 太丑了……但是解决这种损坏的行为非常有效。确实,有时是唯一的解决办法。 (2认同)

Pet*_*ker 26

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

您似乎已将r325合并到您的分支中,但是--reintegrate需要将所有修订版本合并到最新版本.必须没有差距.所以这里有一点Diag:

           +----------------------> /branches/devel
          /                    /   \<--merge not working!
 --------/-------+--+---+-----+---------> trunk
         |       \  |  /      |
        280       \ V /      325
                    V
                  missing sync merges from trunk to branch
Run Code Online (Sandbox Code Playgroud)

我认为这是你的分支结构,所以你需要同步从trunk到你的分支的所有变化.你只合并了r325,所以只需合并r280-r324,这样做之后你应该可以使用--reintegrate

  • @pako如果不是这样,你为什么接受答案?删除您的评论或不接受答案...在这种情况下答案是正确的,但您的评论令人困惑 (14认同)
  • 不幸的是,这种情况并非如此.当我尝试从主干中合并特定范围的修订版本(2​​80到325)时,开发devel分支,TortoiseSVN表示没有任何合并(我之前合并了这些更改,当然还提交了合并).但是当我尝试重新集成时,我收到错误消息. (2认同)
  • @pako确实与上述评论发生冲突,也接受了答案,但我可以说我也经历过同样的问题.将所有修订合并到我的分支机构,当我尝试重新集成时,我收到"Missing ranges"消息.svn,版本1.6.2(r37639)和乌龟1.6.5(我相信). (2认同)

Gre*_*ick 11

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

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

在此输入图像描述

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

在此输入图像描述

这个动作正确地使我的分支与trunk一致,我的后续分支重新集成到trunk中成功运行,没有遗漏范围错误消息.

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


Low*_*ggs 5

当我开始使用 svn merge 命令的 -r 选项时,我不再遇到这些问题,并且直到我在没有它的情况下合并之后才尝试执行 --reintegrate 。我使用的是 svn 1.6.1。

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

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

  2. 当主干经过测试并提交后,我使用 --reintegrate 选项来关闭分支。确保您也使用了 -rbranchPoint:HEAD 选项。

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

--深度无穷大(在 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 | svn log --stop-on-copy svn://svn/project/trunk/topDir |
grep '^r' | 尾部-1 | sed -e 's/^r//1' -e 's/.*//g'

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

祝你好运