首页 文章

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

提问于
浏览
119

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

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

Reintegrate can only be used if revisions 4709 through 5019 were previously merged from http://subversion/svn/saxdev/trunk to the reintegrate source, but this is not the case

然后它列出了大约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

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

有任何想法吗?

8 回答

  • 15

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

    $ 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
    

    我在谷歌上看到过一些变通方法,但是他们让我感到紧张,因为“黑客” . 为了解决这个问题,我决定做一下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.
    

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

    我希望这有帮助

  • 1

    [[ Although my solution has worked for me in the past, it can lead to improper results with modern SVN clients. In our case the merge errors seemed to be byproducts of automations that were confusing our SVN history and not real activity. I'm leaving this here for posterity but please consider the accepted answer instead. ]]

    我的解决方案是删除任何以某种方式附加到层次结构中的单个文件的 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
    

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

    cd ~/svn/branches/2.7
    svn propget -R svn:mergeinfo .
    

    然后,您可以删除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 ...
    

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

  • 11

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

    Merge reintegrate test only failed!: "Reintegrate can only be used if some revisions were previously merged from trunk, but this is not the case"

    单击错误文本,然后按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 $_" }
    

    该脚本提取具有问题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
    

    在命令提示符下,您可以导航到分支库(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'.
    

    Gray's answer中一样,现在您应该将更改提交到分支并尝试再次重新集成 . 这次它应该工作!

  • 124

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

    奇妙

  • 81

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

  • 3

    正如SVN告诉你的那样 .

    • 合并SVN告诉你的Reversion分支

    • 从分支重新整合到主干

  • 0

    有关类似案例的经验,请参阅我的答案here . 我不确定这是否是你的问题的根源,但是当两个更改相互取消时,它看起来像Subversion 1.8有mergeinfo的问题 .

  • 5

    我遇到了这个问题 . 我在我的分支上做了一个SVN日志,发现我已经将trunk合并到了我的分支 .

    我注意到了所有的修改 .

    然后我通过手动指定修订版将我的分支合并到主干 . 我指定所有范围以排除修改我合并后备箱 . 我设法让我的分支合并 .

    我不得不在mergeinfo上做一些恢复,但是我的代码被合并了 .

    我立刻删除了我的分支 .

相关问题