一直在 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
对我来说,该错误消息表明该分支最初不是来自主干,这是不正确的。
有任何想法吗?
如果您在一个分支上工作并且一直与其他工作保持同步,那么当您创建主干的工作副本并尝试重新集成您的分支时,如果您收到如下消息,您可能会感到困惑:
$ 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.
一旦我这样做了,我就能够返回到主干的工作副本并重新集成分支而没有任何问题。
我希望这有帮助
[[ 虽然我的解决方案过去对我有用,但它可能会导致现代 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
要查找包含合并信息信息的文件,您可以执行以下操作:
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 看到类似这样的错误:
https://i.imgur.com/MOtKx1f.png
单击错误文本并按 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 一样,现在您应该将更改提交到分支并再次尝试重新集成。这次应该可以了!
\s+
替换文字空间以使其适合您?
+
。在我的例子中,有些行有两个空格,而其他行有三个,因此需要支持可变数量的空格。我不知道为什么我把空间改成了 \s
;这可能是不需要的,很抱歉那部分!
+
因为它对你有用。
实际上,我使用“合并两个不同的分支”选项修复了它,将主干和分支合并到我的工作副本中。然后我把它交给了后备箱。
奇妙
https://i.stack.imgur.com/0kQDi.png
就像 SVN 告诉你的那样。
从 SVN 告诉您的 Reversion 中合并分支 Reintegrate from Branch to trunk
使用分支的部分结帐后出现此错误。我使分支与主干保持同步,但未签出的部分分支的主干修订当然没有更新。解决方法是对分支进行全面检查,然后合并所有主干更改。将这些提交到分支后,我可以成功地将分支合并到主干。
遇到了这个问题
TortoiseSVN 1.9.7,内部版本 27907 - 64 位,2017/08/08 19:34:38
颠覆 1.9.7,-发布
月 1.5.2
四月实用程序 1.5.4
农奴 1.3.9
OpenSSL 1.0.2l 2017 年 5 月 25 日
zlib 1.2.8
SQLite 3.14.1
右键单击要合并的分支(但收到此消息)并选择“更新到修订版”选项,然后在打开的对话框中(下面的屏幕截图)选择这些修订版并单击“确定” - 一旦所有先前的修订版被合并,你不会收到这条消息
https://i.stack.imgur.com/uC41Q.png
在此处添加此内容以帮助使用 Tortoise SVN 的人
我遇到了这个问题。我在我的分支上做了一个 SVN 日志,以查找我是否已将主干合并到我的分支。
我注意到所有的修订。
然后我通过手动指定修订将我的分支合并到主干。如果我合并了主干,我指定了所有范围以排除修订。我设法让我的分支合并。
我不得不对mergeinfo 进行一些还原,但是我合并了我的代码。
我立即删除了我的分支。
我知道这是一篇旧帖子,但我也一直在努力解决这个问题,直到我发现错误消息中列出的文件存在 SVN 属性问题。
我确实右键单击了有问题的文件:TortoiseSVN > 属性,发现该文件有两个 svn:mergeinfo,其中一个没有从数据继承。所以我删除了那个mergeinfo。
我使用 TortoiseSVN 1.12.2,内部版本 28653 - 64 位。
svn merge
。