将分支合并到不共享祖先的主干上

时间:2014-12-03 23:38:24

标签: svn version-control merge tortoisesvn

我在公司工作过的一个项目在SVN中有点搞砸了(我会责怪我们的期望,工程师应该知道如何在没有事先曝光和没有培训的情况下使用它)。该项目之前由一名工程师拥有,但所有权已转移给更熟悉SVN如何工作的新员工。当他开始研究代码库时,他做了一个“分支”来解决问题,但忽略了使用TortoiseSVN Branch / tag ... 命令。

相反,他只是在Development目录中创建了一个名为./branches的目录,并手动复制了所有文件。在过去的6个月里,这个分支已成为后备箱应该是什么,它已经被广泛使用而没有合并到后备箱。从那时起,该项目的规模和能力不得不增长,现在有几个新的目录,文件和外部添加到Development分支。我们现在谈论800个版本的差异。

那我该如何修复呢?

目前,如果我运行 Merge ... 命令,使用合并一系列修订选项,我可以通过多种方式搞乱选项,但没有他们通过测试合并没有冲突和树冲突。特别是,冲突主要发生在Development“分支”的第二次提交上,之后冲突可能不会发生。到目前为止,我已经尝试过:

  • 合并一系列修订 - > 所有修订 - > 测试合并
  • 合并一系列修订 - > 特定范围 = REV1-REV2 - > 测试合并
  • 合并一系列修订 - > 特定范围 = REV1-REV2 - > 忽略祖先 = True - > 测试合并
  • 合并两棵不同的树 - > 测试合并
  • 合并两棵不同的树 - > 忽略祖先 = True - > 测试合并

在这5种组合中,最后一种看起来最有希望的是,只有树冲突,它们只发生在添加的文件夹和文件上(外部看起来像是要正确合并,但是很难说出来的时候只是使用测试合并

我想尽可能保留历史记录,但此时trunk中的代码已经过时,以至于它无用,我不会完全反对仅仅复制它。将这个“分支”移回trunk同时保留关于所发生事件的最大量信息的最轻松的路径是什么?

我已经和拥有这个项目的开发人员谈过了,我们将一起解决这个问题,这样他就可以更多地了解SVN如何工作以及如何正确使用它。我想做好准备,以便我们能够迅速完成并尽可能多地从经验中获益。

1 个答案:

答案 0 :(得分:3)

  • 在艰难情况下,CLI方式比GUI
  • 更好,更安全
  • “合并两棵不同的树”是99%的合并丑陋和丑陋的重新融合方式合并
  • 仔细阅读SVN Book中的"Noticing or Ignoring Ancestry",以便更好地了解您的案例的内部和必须选项

NotShort简历

为了在行李箱中获得Development状态并从Development开始放弃所有行李箱的历史记录,您必须致电(在行李箱的干净厕所中)

svn merge --ignore-ancestry --accept 'tf' /PATH/TO/Development

(没有合并冲突,可能树冲突)

对于TSVN,它是

合并一系列修订 - > 所有修订特定范围 = empty等于“全部”) - > 忽略祖先 = True

但您无法定义自动冲突解决方案(--accept选项),因为它可以在CLI中完成