ChatGPT解决这个技术问题 Extra ChatGPT

仅当先前从 <URL> 合并修订 X 到 Y 以重新集成源时,才能使用重新集成,但情况并非如此

一直在 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

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

有任何想法吗?

好的。我不再使用 Subversion,但会相信你的话!
多谢,伙计。我认为页面更适合它。

G
Gray

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

$ 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 merge
这对我很有用。主要的技巧是乌龟没有告诉我问题的修订。升级我的命令行 svn 客户端后,我能够让它像你一样给我一条消息,然后能够合并问题修订并返回到主干。
这对我不起作用,因为列出的“丢失”合并已经在分支中完成(重新集成源)。
虽然这个答案听起来很合理,但它对我不起作用。我不断收到相同的错误消息。有帮助的是从列出的文件中删除 svn:mergeinfo 属性,就像接受的答案所暗示的那样。
G
Gray

[[ 虽然我的解决方案过去对我有用,但它可能会导致现代 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 ...

完成此操作后,我的合并执行得很好。


这确实帮助我解决了我的问题,但我的问题是由于合并来自子文件夹的修订而不是在根文件夹上执行此操作。我的问题是 - 我已经执行了合并,但根文件夹没有识别出合并已经发生,这意味着我必须使用缺少的修订号手动更新 mergeinfo 道具。注意我只能这样做,因为修订版没有其他文件更改,并且如果需要合并其他文件会导致意外行为 - 如果是这种情况,您将需要重新合并修订版。
在 TortoiseSVN 中,您可以右键单击该文件,选择“TortoiseSVN”-->“属性”并删除 svn:mergeinfo 属性。
@StephenKennedy 您可能会遇到重用已重新集成的分支的问题。如果是这样,请查看 svnbook.red-bean.com/en/1.7/… 的最后一部分,以“一旦从分支到主干完成 --reintegrate 合并,该分支不再可用于进一步的工作”。
+1。您不需要删除所有的合并信息;只是那些缺少范围的。有关通过过滤 TortoiseSVN 错误输出仅删除问题 mergeinfos 的方法,请参阅 my answer
-1。除非您确实确定自己在做什么,否则不应删除 mergeinfo 属性。很多人可能会阅读这篇文章,删除这些属性,并无意中引入其他问题。 Paul Whipp 有一个更好的答案。
C
Community

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


在重新集成之前很久,我确实从我的分支合并(而不是重新集成)一些对主干的更改,因为当我打算提交到主干时,我不小心提交到了我的分支。这可能是这些重新整合错误背后的原因吗?
在我的情况下,这似乎正是导致此问题的原因。感谢您花时间编写脚本!
@Sam 很高兴您发现它很有帮助。您是否需要用 \s+ 替换文字空间以使其适合您?
有点;它更需要它为我工作的+。在我的例子中,有些行有两个空格,而其他行有三个,因此需要支持可变数量的空格。我不知道为什么我把空间改成了 \s;这可能是不需要的,很抱歉那部分!
@Sam 不用担心,但我现在将它改回文字空间,直到 TortoiseSVN 开始将它与制表符或其他任何东西混合起来:-) 我已经离开了 + 因为它对你有用。
c
colinjwebb

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

奇妙


这个答案并没有真正解释你做了什么。没有示例,甚至没有指向手册必要部分的链接。
事后看来,不,它没有。但是,由于这是我与问题同一天的答案,因此这是几个月来最好的答案。我想假设你仍然使用 Tortoise SVN 1.6 是有道理的。我现在已经接受了格雷的答案作为接受的答案。
示例:svn 合并 ^/tags/wx ^/tags/yz 。当我使用 1.8 并合并到合并源具有先前从主干合并到其中的特定修订版的主干时,会弹出重新集成错误。 1.8 似乎决定正在尝试重新集成合并,但事实并非如此。与 1.6 的试运行合并可以正常工作,但两个 URL 合并也适合。
1.8 失败的确切场景是从一些修订版本中复制标签以用于补丁版本,通过合并到已修补的标签中从主干到反向端口中挑选更改,对已修补的标签进行进一步更改,然后将其合并回来进入后备箱。基本标签和修补版本之间的更改需要合并回主干,并且 2 URL 合并可以解决这个问题。
在花了 3 天时间试图了解发生了什么之前,我应该已经阅读了这个答案。我仍然不明白为什么我会遇到这个问题,但怀疑来自@Nick 的评论是原因 - 现在一切正常,我不会再看下去了......
O
Olga Perederieieva

https://i.stack.imgur.com/0kQDi.png


谢谢你提出这样一个基本的想法。在所有答案中,这不仅是最不复杂的,而且是唯一对我有用的答案。
F
Farshid Eilami

就像 SVN 告诉你的那样。

从 SVN 告诉您的 Reversion 中合并分支 Reintegrate from Branch to trunk


没有为我工作。分支中已经存在更改。您的说明看起来应该适用于某些情况,但它们似乎是基于假设,因此它们似乎并不普遍。
C
Community

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


J
John W

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


A
Akber Iqbal

遇到了这个问题

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 的人


D
David Lublink

我遇到了这个问题。我在我的分支上做了一个 SVN 日志,以查找我是否已将主干合并到我的分支。

我注意到所有的修订。

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

我不得不对mergeinfo 进行一些还原,但是我合并了我的代码。

我立即删除了我的分支。


a
awan.soekamto

我知道这是一篇旧帖子,但我也一直在努力解决这个问题,直到我发现错误消息中列出的文件存在 SVN 属性问题。

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅