重新整合合并声明缺少修订,数字位于分支创建之前

Reintegrate merge claims missing revisions with numbers lying before branch creation

在 SVN reintegrate-merge (TortoiseSVN/Windows) 期间,出现以下错误:

Command: Auto-merge /svn/branches/branchX into C:\MyRepoFolder
Error: Reintegrate can only be used if revisions 59635 through 65976 were previously
Error: merged from svn/trunk to the reintegrate source, but this is not the case:
Error:
Error: svn/branches/branchX/Applications/.../source/someFile.cpp
Error:
Error: Missing ranges:
Error: /trunk/Applications/.../source/someFile.cpp:43835,43956,43965,...
...
(and so on)
...

分支创建于 Rev 59635,为什么过去从主干创建分支时缺少 43835 左右的旧范围? 有人可以告诉我这是怎么可能的以及如何解决这个问题吗?

我已经尝试了很多东西,包括:

后者确实有效,但手动执行此操作非常详尽,因为列表非常长(我在这里只列出了一小部分)。所有其他尝试均无效。但我不认为手动将修订添加到相应的合并信息是这里最好的解决方案。也许我可以编写一个自动执行的脚本。我会对替代品很感兴趣吗?我无法想象这里没有更好的解决方案。

我怀疑这个问题是使用的不同 svn 版本的组合,以及子树合并。单独第一个根本不是问题,但子树合并是不断令人头疼的主要原因。

我的建议:查明回购协议的维护者是否有关于子树合并的政策,即他们是否明确允许或禁止合并,不仅在分支的根级别,而且在单个文件或子文件夹。

如果他们允许:抱歉,你完蛋了。尝试找到进行子树合并的人,并询问他们是否仍在使用此子树合并信息(以及他们最初进行合并时的想法)。

如果不允许子树合并(或者你是repo的唯一维护者),只需删除所有子树合并信息,但将其保留在根级别。您可以通过转到 clean 分支工作副本的根目录并执行

svn pd svn:mergeinfo . -R
svn revert . 

第一个命令将递归删除所有合并信息(包括坏东西),第二个命令将在分支根部恢复有用和必要的合并信息。在继续之前,确保你没有改变任何其他东西(如果你做对了,svn st 应该在第二列中显示一堆 files/folders 和 M only ,表示只改变了属性)并提交。之后,重新整合应该再次起作用。

请注意:svn:mergeinfo 属性 是 "sticky",所以一旦您再次将 t运行k 合并到您的分支(或通过子树合并重新整合其他分支信息),错误的合并信息属性将重新出现。要真正摆脱它们,您需要删除 t运行k 本身中的子树合并信息,并强制所有用户在重新集成回 t运行k 之前对其分支执行相同的操作。大约一年前我们有一个类似的问题,我们所做的是检查整个分支/子文件夹和 运行 一个脚本来同时从所有分支中删除所有不必要的合并信息。