只有在修订X到Y之前从<url>合并以重新集成源时,才能使用重新集成,但事实并非如此</url>

时间:2011-01-19 16:08:54

标签: 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

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

有什么想法吗?

11 个答案:

答案 0 :(得分:125)

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

$ 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 :(得分: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

要查找包含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 ...

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

答案 2 :(得分:15)

如果您尝试将分支重新集成到主干,并且您在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一样,现在您应该将更改提交到分支并尝试重新集成。这次它应该工作!

答案 3 :(得分:11)

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

非凡

答案 4 :(得分:5)

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

答案 5 :(得分:3)

正如SVN告诉你的那样。

  1. 合并SVN告诉你的Reversion的分支
  2. 从分支重新整合到主干

答案 6 :(得分:1)

另请参阅我的回答here,了解我对类似案例的体验。我不确定这是否是您的问题的根源,但是当两个更改相互抵消时,Subversion 1.8看起来似乎与mergeinfo有问题。

答案 7 :(得分:0)

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

我注意到了所有的修改。

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

我必须在mergeinfo上做一些恢复,但是我把代码合并了。

我立即删除了我的分支。

答案 8 :(得分:0)

在使用分支的部分检出后,出现此错误。我正在使分支与主干保持最新,但是分支中未被检出的部分的主干修订当然不会被更新。解决方法是对分支进行全面检出,然后合并所有主干更改。将这些提交到分支后,我可以将分支成功合并到主干。

答案 9 :(得分:0)

解决此问题

  • TortoiseSVN 1.9.7,内部版本27907-64位,2017/08/08 19:34:38
  • Subversion 1.9.7,-release
  • apr 1.5.2
  • apr-util 1.5.4
  • 农奴1.3.9
  • OpenSSL 1.0.2l 2017年5月25日
  • zlib 1.2.8
  • SQLite 3.14.1

右键单击要合并的分支(但收到此消息),然后选择“更新至修订版”选项,然后在打开的对话框中(以下屏幕截图)选择这些修订版,然后单击“确定”-单击所有先前的修订版被合并,您将不会收到此消息

enter image description here

在此处添加此内容可帮助使用Tortoise SVN的人

答案 10 :(得分:-1)

我知道这是一篇过时的文章,但是直到发现错误消息中列出的文件都存在SVN属性问题为止,我也在努力解决此问题。

我确实右键单击了有问题的文件:TortoiseSVN>属性,发现该文件有两个svn:mergeinfo,其中一个没有继承自数据。因此,我删除了该mergeinfo。

我使用TortoiseSVN 1.12.2,内部版本28653-64位。