重新集成只能用于修改X到Y先前从<URL>合并重新集成源,但事实并非如此

一直使用SVN分支与乌龟1.6。 我已经定期将树干合并到分支中以保持最新状态。

今天,我以为我会重新整合分支。 我从Tortoiseselect了“重新整合分支”,并收到以下错误消息:

重新集成只能在修订版本4709到5019先前从http://subversion/svn/saxdev/trunk合并到重新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是主版本。 当我创build分支时,修订版本是4737。

我从修改4737的日志中得到这个

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

对我来说,那个错误信息说,这个分​​支本来不是来自干线,这是不正确的。

有任何想法吗?

如果你正在一个分支上工作,并且一直与其他人一起工作,那么当你创build一个工作副本并尝试重新整合你的分支时,如果你得到这样的信息,你可能会感到困惑:

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

一旦我这样做,我就可以回到树干的工作副本,并重新整合分支没有任何问题。

我希望这有帮助

[[虽然我的解决scheme过去对我来说很有效,但是现代SVN客户端可能会导致不正确的结果。 在我们的案例中,合并错误似乎是自动化的副产品,这使我们的SVN历史混乱,而不是真正的活动。 我在这里留下后代,但请考虑接受的答案。 ]]

我的解决scheme是删除任何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 ... 

在完成这个之后,我的合并执行得很好。

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

合并重新集成测试只失败!:“重新集成只能使用,如果有一些修订以前从主干合并,但事实并非如此”

单击错误文本,然后按CTRL + ACTRL + 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的文件的相对path,并输出一个命令列表来修复每个文件。

您可能必须更改'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'. 

正如在格雷的回答中 ,现在你应该改变分支,并尝试重新整合。 这一次它应该工作!

其实我使用“合并两个不同的分支”选项来解决它,把树干和分支合并到我的工作副本。 然后我把它交给行李箱。

奇妙

只要SVN告诉你。

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

乌龟SVN中的一些东西对我来说很有用:不是合并分支的所有修订,而是select特定的范围,并从分支手动select所有修订。

对于我在类似案例中的经验,也请参阅我的答案。 我不确定这是否是你的问题的根源,但是看起来Subversion 1.8和mergeinfo有问题,当两个改变相互抵消的时候。

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

我注意到所有的修改。

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

我不得不在mergeinfo上做一些恢复,但我得到了我的代码合并。

我立即删除了我的分支。