Skip to main content
 首页 » 编程设计

version-control之SVN合并我做错了什么

2025年05月04日197think

当带有合并跟踪的 SVN 工作时,它真的很棒,我喜欢它。但它一直在扭曲。我们正在使用 TortoiseSVN。我们不断收到以下消息:

Error: Reintegrate can only be used if revisions 1234 through 2345 were previously merged from /Trunk to the reintegrate source, but this is not the case



作为引用,这是我们使用的方法:
  • 创建分支
  • 分支内开发
  • 偶尔 合并一系列修订版 从树干到分支
  • 当分支稳定时,重新整合一个分支从分支到主干
  • 删除分支

  • 合并一系列修订版 在重新集成操作之前从主干到分支(将范围留空,因此应该是所有修订版),因此分支应与主干正确同步。

    现在,Trunk 有多个与之关联的 SVN 合并跟踪属性。应该是?或者 Reintegrate 不应该添加任何合并跟踪信息?

    我们的流程有问题吗?这使 SVN 无法使用 - 每 3 个重新集成中就有 1 个迫使我潜入并破解合并跟踪信息。

    请您参考如下方法:

    当过去从主干到分支完成部分合并时,有时会发生此问题。部分合并是指对整个树执行合并但只提交其中的一部分。这将为您的树中的文件提供与树的其余部分不同步的合并信息数据。
    --reintegrate上面的错误消息应该列出 svn 有问题的文件(至少在 svn 1.6 中是这样)。

    您可以:

  • 使用错误消息中的范围将问题文件从主干手动合并到分支。注意:您必须从范围的开头减去 1,因此您要运行的命令是:
    cd <directory of problem file in branch working copy> 
    svn merge -r1233:2345 <url of file in trunk> 
    svn commit 
    

  • 如果您确定分支中文件的内容是正确的,并且只想将文件标记为已合并,则可以使用 --record-only标志到 svn merge :
    cd <directory of problem file in branch working copy> 
    svn merge --record-only -r1233:2345 <url of file in trunk> 
    svn commit 
    

  • (我认为您可以在整个树上使用 --record-only,但我还没有尝试过,您必须绝对确定没有真正的合并需要来自主干)