只有先前从<URL>合并修订版X到Y以重新集成源,才能使用重新集成,但事实并非如此

col*_*ebb 124 svn tortoisesvn

一直在使用Tortoise 1.6的SVN分支机构.我一直在定期将主干合并到分支中以使其保持最新状态.

今天,我以为我会重新融入分支机构.我从Tortoise选择"重新整合分支"并收到以下错误消息:

只有先将4709到5019版本合并http://subversion/svn/saxdev/trunk到重新集成源时才能使用重新集成,但事实并非如此

然后它列出了大约50个文件,其中包含以下描述:

Error: branches/qst/kobalt/sax/businessobjects/util/HistoryParent.java

Error: Missing ranges: /trunk/kobalt/sax/businessobjects/util/HistoryParent.java:4709-5018

修订版5019是主要修订版.修订版4737是我创建分支时的修订版.

我从修订版4737的日志中得到了这个

操作:添加路径:/ branches/qst从路径复制:/ trunk

对我来说,该错误消息表明该分支最初不是来自主干,这不是真的.

有任何想法吗?

Pau*_*ipp 133

如果您正在分支机构并且一直在与其他人一起工作,那么当您创建主干的工作副本并尝试重新集成您的分支时,如果您收到如下消息,则可能会感到困惑:

$ svn merge --reintegrate https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693
Run Code Online (Sandbox Code Playgroud)

我在谷歌上看到过一些变通方法,但是他们让我感到紧张,因为"黑客".为了解决这个问题,我决定做一下subversion在消息中暗示的内容.我回到我的分支并明确合并了指定的修订:

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.
Run Code Online (Sandbox Code Playgroud)

一旦我这样做,我就能够返回到trunk的工作副本并重新集成分支而没有任何问题.

我希望这有帮助

  • 太好了!"做一下颠覆在消息中暗示的内容".:) (16认同)
  • 这对我不起作用,因为列出的"缺失"合并已经在分支中完成(重新集成源). (7认同)
  • 虽然这个答案听起来很合理,但对我来说并没有用.我一直收到相同的错误消息.有用的是从列出的文件中删除svn:mergeinfo属性,就像接受的答案所暗示的那样. (6认同)
  • 我同意,更受欢迎的答案是诱人的,但可能更好地正确解决它.我不得不去特定的有问题的文件和`svn合并它从主干. (5认同)

Gra*_*ray 85

[[虽然我的解决方案过去对我有用,但它可能导致现代SVN客户端的不正确结果.在我们的例子中,合并错误似乎是自动化的副产品,它们混淆了我们的SVN历史而不是真正的活动.我将此留给后人,但请考虑接受的答案.]]

我的解决方案是删除svn:mergeinfo以某种方式附加到层次结构中的单个文件的任何属性.

svn merge --reintegrate svn+ssh://svn/usr/local/svn/repos/all/trunk 
svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:
trunk/proj/src/main/java/com/foo/furniture.java
Missing ranges: /trunk/proj/src/main/java/com/foo/furniture.java:18765-18920
Run Code Online (Sandbox Code Playgroud)

要查找包含mergeinfo信息的文件,您可以执行以下操作:

cd ~/svn/branches/2.7
svn propget -R svn:mergeinfo .
Run Code Online (Sandbox Code Playgroud)

然后,您可以删除mergeinfo属性:

svn propdel svn:mergeinfo proj/src/main/java/com/foo/furniture.java ...
svn commit -m 'removed mergeinfo' proj/src/main/java/com/foo/furniture.java ...
Run Code Online (Sandbox Code Playgroud)

完成此操作后,我的合并执行正常.

  • +1.您不需要删除所有mergeinfos; 只是缺少范围的那些.请参阅[我的回答](http://stackoverflow.com/a/17750925/111424),了解通过过滤TortoiseSVN错误输出来删除问题mergeinfos的方法. (6认同)
  • 在TortoiseSVN中,您可以右键单击该文件,选择"TortoiseSVN" - >"Properties"并删除svn:mergeinfo属性. (5认同)
  • @StephenKennedy您可能遇到了重新使用已经重新集成的分支的问题.如果是这样,请查看http://svnbook.red-bean.com/en/1.7/svn.branchmerge.basicmerging.html#svn.branchemerge.basicmerging.reintegrate的最后一节,以"一旦完成 - 整合合并完成"开头从分支到主干,分支机构不再可用于进一步的工作." (3认同)
  • -1.除非您确定自己在做什么,否则不应删除mergeinfo属性.很多人可能会读到这个,删除这些属性,并无意中引入其他问题.Paul Whipp有更好的答案. (3认同)
  • 这真的帮助我解决了我的问题,但我的原因是合并了一个子文件夹的修订,而不是在根文件夹上这样做.我的问题是 - 我已经执行了合并,但是根文件夹没有发现合并已经发生,这意味着我必须手动更新mergeinfo prop与缺少的修订号.**注意**我只能这样做,因为修订版没有其他文件更改,如果需要合并其他文件,将导致意外行为 - 如果是这种情况,则需要重新合并修订版. (2认同)

Iai*_*der 15

如果你试图将你的分支重新集成到trunk,你会看到TortoiseSVN的错误:

合并重新集成测试只能失败!:

单击错误文本,然后按CTRL+ A,CTRL+ C复制所有文本.

将文本粘贴到此PowerShell脚本的here-string中:

@"
Command: Reintegrate merge http://svn.cloudcorp.com/branches/myproject into C:\Users\iain\Documents\Repositories\CloudCorp\trunk  
Error: Reintegrate can only be used if revisions 18089 through 18612 were previously  
Error:  merged from http://svn.corp.skyscanner.local/svn/SkyScannerDatabase/trunk to  
Error:  the reintegrate source, but this is not the case:  
Error:    
Error:  branches/myproject/userdata/usermanagementservice  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/usermanagementservice:18365,18404  
Error:    
Error:  branches/myproject/userdata/auto_create_db.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/auto_create_db.sql:18406  
Error:   
Error:    
Error:  branches/myproject/userdata/create_audit_tables_triggers_uds.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/create_audit_tables_triggers_uds.sql:18406  
"@ -split "`n" |
? { $_ -match ('Error: +branches') } |
% { $_.Substring($_.IndexOf('userdata')) } |
% { "svn propdel svn:mergeinfo $_" }
Run Code Online (Sandbox Code Playgroud)

该脚本提取具有问题mergeinfo的文件的相对路径,并输出命令列表以修复每个文件.

您可能必须更改'userdata'值以适合您的存储库结构.

执行脚本以输出删除问题mergeinfos所需的命令.

在此示例中,脚本将生成此输出:

svn propdel svn:mergeinfo userdata/usermanagementservice  
svn propdel svn:mergeinfo userdata/auto_create_db.sql  
svn propdel svn:mergeinfo userdata/create_audit_tables_triggers_uds.sql  
Run Code Online (Sandbox Code Playgroud)

在命令提示符下,您可以导航到分支库(myproject)并执行命令以删除问题mergeinfos.

你应该看到这样的输出:

property 'svn:mergeinfo' deleted from 'userdata\usermanagementservice'.
property 'svn:mergeinfo' deleted from 'userdata\auto_create_db.sql'.
property 'svn:mergeinfo' deleted from 'userdata\create_audit_tables_triggers_uds.sql'.
Run Code Online (Sandbox Code Playgroud)

正如Gray的回答,现在你应该将更改提交给分支并尝试再次重新集成.这次它应该工作!


col*_*ebb 11

实际上我使用"合并两个不同的分支"选项来修复它,将主干和分支合并到我的工作副本中.然后我把它交给了行李箱.

奇妙

  • 这个答案并没有真正解释你的所作所为.没有例子,甚至没有链接到手册的必要部分. (4认同)

小智 6

在togoise SVN中对我有用的东西:不是从分支合并所有修订版本,而是选择特定范围并从分支中手动选择所有修订版本.