32

我正在尝试将开发分支重新集成到我的 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 抱怨缺少范围,但 mergeinfo 似乎是正确的

4

6 回答 6

33

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

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

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

对于您收到的消息中的每个“缺失范围:路径:修订范围”行:

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

提交所有更改并重新集成

于 2014-08-24T11:03:32.783 回答
29

您必须先将修订版 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

于 2010-03-19T02:22:13.723 回答
17

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

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

在此处输入图像描述

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

在此处输入图像描述

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

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

于 2016-12-20T09:24:56.943 回答
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
  1. 当我解决任何冲突并测试我的代码时,我将合并提交到分支,然后使用相同的基本选项(尤其是 -rBranchPoint:HEAD)将分支合并到主干

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

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

--depth infinity(在 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'

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

祝你好运

于 2010-09-28T13:40:36.193 回答
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 提供的解决方案合并了修订,仍然收到错误消息。

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

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

我不知道我应该如何修改这个内容。看起来缺少的范围都在那里。

于 2019-05-24T13:53:22.873 回答
-1

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

于 2013-04-16T14:25:40.403 回答