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

Posted

技术标签:

【中文标题】在 Subversion 1.5 中将分支重新集成到主干时缺少范围错误消息【英文标题】:Missing ranges error message when reintegrating a branch into trunk in Subversion 1.5 【发布时间】:2011-01-29 03:47:58 【问题描述】:

我正在尝试将开发分支重新集成到我的 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  
...

然后消息继续抱怨我的项目中的一些文件夹。但是当我尝试再次将主干的更改合并到开发分支时,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

【问题讨论】:

我遇到了类似的问题,SVN 认为我错过了合并,但是当我尝试合并时,没有什么可以合并的。见***.com/questions/13056057/… 【参考方案1】:

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

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

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

对于您收到的消息中的每个“缺失范围:path:revision_range”行:

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

提交所有更改并重新集成

【讨论】:

太丑了……但是解决这种破碎的行为非常有效。确实,有时是唯一的解决方案。 编辑 svn:mergeinfo 属性可以使用svn propedit svn:mergeinfo path/to/file/or/folder【参考方案2】:

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

您似乎已经将 r325 合并到您的分支中,但是 --reintegrate 需要将 所有 修订版合并到您的最新修订版。不得有间隙。 所以这里有一个小诊断:

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

我认为这是您的分支结构,因此您需要将所有更改从主干同步到您的分支。您只合并了 r325,所以只需合并 r280-r324,完成此操作后您应该可以使用 --reintegrate

【讨论】:

不幸的是,事实并非如此。当我尝试从主干合并特定的修订范围(280 到 325)时,执行 devel 分支,TortoiseSVN 说没有要合并的内容(我之前合并了这些更改,当然也提交了合并)。但是当我尝试重新整合时,我收到了错误消息。 @pako 如果不是这样,您为什么要接受答案?要么删除您的评论,要么不接受答案...在这种情况下,答案是正确的,但您的评论令人困惑 @pako 确实与上述评论相冲突并且也接受了答案,但我可以说我也遇到了同样的问题。将所有修订合并到我的分支,当我尝试重新集成时,我收到“缺少范围”消息。 svn,版本 1.6.2 (r37639) 和乌龟 1.6.5(我相信)。 我也遇到了同样的问题。我今天设法通过删除分支上的所有 mergeinfo 属性来修复它,而不是分支根文件夹上的属性。如果你只在每个分支的根级别合并,那么这些属性不应该真的在附近。 我通过从主干合并到分支并单击“所有修订”来解决这个问题 - 然后我再次从分支到主干执行“所有修订”。然后合并到主干就成功了。【参考方案3】:

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

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

然后指定只记录合并例如

此操作正确地将我的分支与主干对齐,并且我随后将分支重新集成到主干中成功,没有缺少范围错误消息。

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

【讨论】:

在我看来,这是正确的答案,前提是您尝试合并特定修订版并且报告无事可做。谢谢!【参考方案4】:

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

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

 cd branchWorkArea/topDir
 svn merge -r<branchPoint>:HEAD [otheroptions] svn://svn/project/trunk/topDir

    当我解决任何冲突并测试我的代码后,我将合并提交到分支,然后使用相同的基本选项(尤其是 -rBranchPoint:HEAD)将分支合并到主干

    李>

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

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

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

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

要找到一个分支的分支点,你执行一个 svn log --stop-on-copy 然后查看最后一个版本——它将是创建分支的 svn 副本。

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

svn 日志 --stop-on-copy svn://svn/project/trunk/topDir | grep '^r' |尾-1 | sed -e 's/^r//1'-e 's/ .*//g'

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

祝你好运

【讨论】:

【参考方案5】:

这不是一个答案,而是一个澄清问题。

我的错误信息是:

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,仍然收到错误消息。

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

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

我不确定应该如何修改此内容。看起来缺少的范围都在那里。

【讨论】:

【参考方案6】:

我刚遇到这个问题,对我有用的是首先,将分支与主干同步,以便分支可以从主干获得最新更新。在此之后,我尝试将分支重新集成到主干并且工作正常。

【讨论】:

以上是关于在 Subversion 1.5 中将分支重新集成到主干时缺少范围错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

如何在 CentOS 5 上升级到 Subversion 1.5? [关闭]

在 Subversion 中跨分支合并并不是添加所有新文件。为啥不?

什么时候真正需要重新整合选项?

在 Subversion 中合并分支时的冲突预防

Subversion 是不是支持分支的别名