仅当先前从<URL>合并了X至Y版本以重新集成源时,才可以使用重新集成。


127

已在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

行动:添加路径:/ branchs / qst从路径复制:/ trunk

对我来说,该错误消息表明该分支最初不是来自中继的,这是不正确的。

有任何想法吗?


1
好的。我真的不再使用Subversion了,但是您会信服的!
colinjwebb

1
多谢,伙计。我认为该页面更好。
灰色

Answers:


138

如果您在分支上工作,并且一直与其他工作保持同步,那么当您创建主干的工作副本并尝试重新集成分支时,如果收到以下消息,您可能会感到困惑:

$ 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

我已经在Google上看到了许多解决方法,但它们使我感到“骇客”。为了解决这个问题,我决定执行邮件中暗示的颠​​覆。我回到分支,并明确合并指定的修订:

$ 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.

完成此操作后,我便可以返回主干的工作副本并重新集成分支,而不会出现任何问题。

我希望这有帮助


16
真好!“执行消息中暗示的颠​​覆”。:)
亚当

7
我同意,更流行的答案很诱人,但正确地解决它可能更好。我必须svn merge从树干转到特定的有问题的文件。
史蒂夫·凯莱特

1
这对我来说很棒。主要技巧是Tortoise不会告诉我问题修订。升级了命令行svn客户端后,我能够获得它像我一样向我发送消息,然后能够合并问题修订并返回到主干。
user12861 2013年

7
这对我来说不起作用,因为列出的“缺失”合并已经在分支中完成(重新集成源代码)。
山姆

6
虽然这个答案听起来很合理,但对我却没有用。我一直收到相同的错误消息。有用的是,从列出的文件中删除svn:mergeinfo属性,就像接受的答案所暗示的那样。
珍妮·奥雷利

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
这确实帮助我解决了问题,但是我的是由于合并了子文件夹的修订,而不是在根文件夹上进行的。我的问题是-我执行了合并,但根文件夹没有意识到合并已发生,这意味着我必须手动使用缺少的修订号更新mergeinfo道具。 注意我只能这样做,因为该修订没有其他文件更改,如果需要合并其他文件,则会导致意外的行为-如果是这种情况,您将需要重新合并修订。
ExecutionOrder

5
在TortoiseSVN中,可以右键单击该文件,选择“ TortoiseSVN”->“属性”,然后删除svn:mergeinfo属性。
StarCub

3
@StephenKennedy您可能会遇到重用已经重新集成的分支的问题。如果是这样,请查看svnbook.red-bean.com/en/1.7/…的最后一部分,开头为“一旦--reintegrate合并从分支到主干完成,则该分支将不再可用于进一步的工作。”
AlexMA 2013年

6
+1。您不需要删除所有的mergeinfos。只是那些缺少范围的。请参阅我的答案,以获取通过过滤TortoiseSVN错误输出来仅删除问题mergeinfos的方法。
Iain Samuel McLean年长者,

4
-1。除非您真的确定自己在做什么,否则不应删除mergeinfo属性。许多人可能会读到此内容,删除这些属性并无意间引入了其他问题。保罗·惠普(Paul Whipp)有一个更好的答案。
Bizmarck 2014年

15

如果您尝试将分支重新集成到主干,并且您从TortoiseSVN中看到这样的错误:

合并重新集成测试仅失败!

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

将文本粘贴到此PowerShell脚本的here-字符串中:

@"
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的答案一样,现在您应该将更改提交到分支,然后尝试再次重新集成。这次应该可以了!


1
在重新集成很久之前,我确实从分支合并(而不是重新集成)分支的一些更改,因为当我打算提交到主干时,我意外地提交了到分支。可能是这些重新整合错误背后的原因吗?
伊恩·塞缪尔·麦克莱恩

就我而言,这正是造成此问题的原因。感谢您抽出宝贵的时间编写脚本!
山姆

@Sam Glad,您发现它很有帮助。您是否需要使用替换文字空间\s+以使其适合您?
伊恩·塞缪尔·麦克莱恩

有点; +为我工作需要的更多。在我的情况下,有些行有两个空格,另一些行有三个空格,因此需要支持可变数量的空格。我不确定为什么将空格更改为\s; 那可能是不需要的,为此感到抱歉!
山姆

@Sam不用担心,但是现在我将其更改回原义空间,直到TortoiseSVN开始将其与制表符或其他内容混合在一起为止:-)我离开了,+因为它对您有用。
伊恩·塞缪尔·麦克莱恩

11

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

奇妙


4
这个答案并不能真正说明您的所作所为。没有示例,甚至没有链接到手册的必要部分。
zigg 2013年

事后看来,不,不是。但是,由于这是我在问题的同一天得到的答案,因此这是几个月以来的最佳答案。我想如果您仍然使用Tortoise SVN 1.6,那是有道理的。我现在接受了格雷的答案作为接受的答案。
colinjwebb 2014年

示例:svn merge ^ / tags / wx ^ / tags / yz。当我使用1.8合并到主干中时,重新合并错误对我突然出现,其中合并源以前具有特定修订版本,已从主干合并到主干中。1.8似乎决定要进行重新整合合并,但并非如此。与1.6进行空运行合并可以很好地工作,但是两个URL合并也很合适。
尼克

1
在1.8版本中失败的精确场景是将某些修订版本的标签复制回以发布补丁,通过合并到补丁标签中挑选出从主干到反向移植的更改,对补丁标签进行进一步更改,然后将其合并进入后备箱。基本标记和修补版本之间的更改是需要合并回主干的内容,而2 URL合并可以解决这一问题。
尼克

我应该花3天的时间来尝试了解发生了什么,然后才能阅读此答案。我仍然不明白为什么会遇到这个问题,但是怀疑来自@Nick的评论是原因-现在一切正常,我将不再进一步看……
Dave Richardson

6

在SVN龟中对我有用的东西:与其合并分支中的所有修订,不如选择特定范围,然后从分支中手动选择所有修订。


1
谢谢您提出这样的基本想法。在所有答案中,这不仅是最简单的答案,而且是唯一对我有用的答案。
redman

3

就像SVN告诉您的那样。

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

2
没为我工作。更改已存在于分支中。您的指令似乎在某些情况下应该可以使用,但是它们似乎是基于假设的,因此它们似乎并不通用。
山姆

1

有关我类似案例中的经历,请参见此处的回答。我不确定这是否是您的问题的根源,但是当两个更改相互抵消时,Subversion 1.8的合并信息确实出现了问题。


0

我遇到了这个问题。我在分支上执行了SVN登录,以查找是否已将中继合并到分支。

我注意到所有修订。

然后,我通过手动指定修订将分支合并到主干。我指定了所有范围以排除合并主干时的修订。我设法合并了分支机构。

我必须对mergeinfo进行一些还原,但是我的代码已合并。

我立即删除了我的分支。


0

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


0

在这个问题上

  • TortoiseSVN 1.9.7,内部版本27907-64位,2017/08/08 19:34:38
  • Subversion 1.9.7,-版本
  • 四月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

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

在此处输入图片说明

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


-1

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

我用鼠标右键单击有问题的文件:TortoiseSVN> Properties,发现该文件有两个svn:mergeinfo,并且其中一个没有继承自数据。所以我删除了mergeInfo。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.