将非祖先分支集成到主干中

时间:2013-01-20 10:10:47

标签: svn

当设置SVN时,我们只是在根结构中创建了一个新文件夹,而不是从trunk创建一个分支:

/branches/dev/  
/trunk

并继续努力。当然,现在,由于SVN没有看到分层连接,因此无法将dev合并到trunk。我正在尝试找到使其正确的最佳方法,以便我们的代码中的dev分支与trunk有关,我们可以在将来进行正常的合并。

我找到了两种方法 - 其中一种只是将代码从dev复制到trunk,commit trunk,然后进行适当的分支检查。我对这种方法的问题在于,我们将丢失所有修订历史记录,因为真正的开发分支将开始新鲜。

其他方法是使用--ignore-hierarchy。这似乎迫使东西进入主干,我不确定这种方法的缺点。

基本上,当我们自己创建dev文件夹而不是分支主干时,从头开始修复搞砸的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

为什么不能将该分支合并到trunk中?

在subversion(以及其他所有rcs)中维护分支等有不同的方法。您直观地设置的是传统方式:您创建文件夹并复制分支/主干/标签之间的文件夹修订之间的差异。这是有效的,因为svn层次结构中的节点只是一个文件夹。 svn中没有特殊的魔力。

Subversion只不过是一个带有额外时间轴的文件系统。

所以你要做的就是将你提交给分支节点的更改(修订)合并到主干中:

svn merge -r <start>:<current> https://<server>/<repo>/<path>/branches/dev <trunk-checkout>

(也就是说:如果你的分支最初包含一些主干的修订版。但是我认为它确实如此,因为你没有另外说过。如果它完全独立于主干,那为什么它被称为分支?并且:更多重要的是:你为什么要把它合并到主干?)


更新2013-01-26:

讨论显示,这种情况涉及一个空主干,从未填充过,从未使用过,因此没有任何内容可以将任何更改从分支合并到。相反,整个开发起源于所谓的一个“分支”,它实际上是该项目的唯一“主干”。

所以解决方案如下所示: 在这种情况下,只需将当前称为分支的部分移动到项目主干,并在该新的(更合适的)名称下继续开发。开发工作可以在新的结账时进行,也可以通过改变现有的结账方式来完成。从现在开始,分支应该按照下面描述的方式使用。因此,纠正错误配置名称并调整当前情况,使其与项目的典型措辞相匹配:

  • trunk是“主要”开发线完成或合并的地方
  • trunk是分支内的开发再次重新合并的地方
  • 可以通过在给定时间点分叉主干来创建多个分支
    • 在这些分支机构中,复杂的开发可以与其他更改一起实施,而不会干扰
    • 当完成那些更复杂的开发并且新功能或架构稳定(“准备就绪”)时,分支的更改可以合并回主干