2014-12-03 71 views
2

,我已经在我的公司被卷入一期工程已在SVN已经有点乱了(我会怪我们的期望,工程师应该知道如何使用它,恕不另行曝光和无训练)。该项目以前由一名工程师拥有,但所有权已转让给较新员工,他们对SVN的工作原理不熟悉。当他开始对代码库工作,他做了一个“分支”来制定的,但忽略了用TortoiseSVN 科/标签...命令。分支合并到主干不共享祖先

相反,他只是在./branches目录中创建了一个名为Development的目录,并手动复制了所有文件。在过去的6个月里,这个分支已经成为了主干应该是什么,并且它已经被广泛使用而没有合并回主干。自那时以来,该项目已在规模和增长能力,到现在有几个新的目录,文件,并添加到Development分支的外部哪里。在这一点上,我们正在讨论800个修订差异。

那么,如何解决呢?

目前,如果我通过合并......命令来运行,使用合并一个版本范围的选择,我可以乱用几种方式的选择,但他们没有通过测试合并没有冲突和树木冲突。具体而言,主要发生在第二冲突提交到Development“分支”,并认为冲突可能就不会发生了。到目前为止,我已经试过:

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

在这5个组合中,最后一个看起来最有希望,因为只有树冲突,它们只出现在添加的文件夹和文件中(外部看起来像它们会被合并,但很难分辨何时使用测试合并

我想尽可能保留历史记录,但是此时trunk中的代码已经过时,无法使用,我不会完全反对仅仅复制它。将这条“分支”转移到trunk上最无痛的路径是什么,同时保留关于发生的事情的最多信息?

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

回答

3
  • 在疑难案件CLI-方式是更好,更安全,比GUI
  • “合并两个不同的树”是99%的合并重返社会的坏的和丑陋的方式合并
  • 重新仔细阅读"Noticing or Ignoring Ancestry"从SVN书,以便更好地了解内部和一个必须选项,你的情况

NotShort恢复

为了得到Development状态在躯干和从Development开始放弃所有干线的历史,你必须调用(在后备箱的清洁WC)

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

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

对于TSVN它

合并一个版本范围的 - >次所有的修订特定范围 = empty等于“所有”) - >忽略祖先 = True

但你不能够定义自动解决冲突(--accept选项),因为它可以在CLI中完成