如何在SVN(Tortoise SVN)中的多个开发者分支合并后创建主干

时间:2012-12-05 00:56:18

标签: svn merge tortoisesvn

我的团队是SVN的新手,我认为每个开发人员创建自己的分支并开始向自己的分支添加代码时犯了一个错误。现在,我需要将所有分支合并到一个主干中。有没有一种安全的方法来做到这一点?我一直在努力,但是当分支中有一个文件时,我不断收到“树冲突”错误,这不在主干中。除了少数会产生错误的文件外,大多数文件都会被添加。

主干最初是空的,我正在尝试一次合并一个分支。

我们正在使用Tortoise SVN 1.7.9。

这是我们目前的结构。

projectFoo

    - branches
        - dev1
            - proj1

        - dev2
            - proj1

        - dev3
            etc...

    - trunk
        - <empty>

1 个答案:

答案 0 :(得分:2)

因为每个人都在自己的分支机构工作,所以你们将度过一个愉快的时光,而分支机构之间无关。这不是编程意义上的 merge 。真正的合并意味着您从分支“B”中拆分分支“A”,因此这两个分支具有共同的祖先修订版,您现在从“A”合并“到”B“或”B“到”A“。

没有简单的方法可以做你需要做的事情。如果幸运的话,所有开发人员都在处理单独的代码,因此合并只是意味着将分支合并在一起,并且您将没有真正的冲突。如果开发人员正在处理同一个文件,但是在不同的分支中,则会遇到麻烦。

合并时需要使用--ignore-ancestors参数,因为没有祖先。这是我唯一可以说的。但是,一旦克服了这种痛苦,您就可以决定使用更标准的方式来处理分支和合并。有两种范例 这实际上很好用。 (还有其他一些,但它们基本上是有毒的):

  • 不稳定的中继:我个人的最爱。每个人都在行李箱上工作。这是上帝设计Subversion工作的方式。分支仅在必要时完成。必要时的定义有点模糊。基本上,您可以在需要时进行分支,因为您不希望开发人员闲置。

  • 流式开发:在流式开发中,您有一个集成流(通常是 trunk ),开发人员创建了_development流(又名分支机构)做他们的工作。开发流可能是开发人员的个人工作空间,敏捷任务,Jira问题,功能。你基本上创建了一个分支机构的分支,做了工作, rebase (也就是从主干到开发分支 的合并)和_deliver(又称从开发流合并回主干。

正如您所看到的,在不稳定主干中,一切都非常简单,因为进行的分支非常少。而且由于每个人都在行李箱上工作,他们与每个人沟通得更好,而且他们会采取较小的发展方式。与持续集成结合使用时效果很好。

你何时在不稳定的树干中分支?通常当您开始完成一个修订版本时,开发人员开始处理当前版本,然后是下一个版本。假设每个人都在开发1.2版本。每个人都在后备箱上工作。当你到达某些开发人员完成1.2工作并希望在1.3版本上工作并且仍然需要在1.2版本上进行清理工作时,你可以从trunk中分支1.2版本分支。

在1.3版上工作的开发人员继续在trunk上工作。开发人员在1.2分支上完成1.2版的工作。当1.2 i准备发布时,1.2版本在1.2分支上完成,并在1.2分支上标记。如果需要补丁/修补程序版本1.2.1,它也在1.2分支上完成。

如果在1.2分支上发现问题,并且在1.3版本的trunk上也存在问题,则可以轻松地将1.2上的特定更改合并回主干,因为1.2分支来自主干。

流开发受到敏捷人群的青睐,因为它允许您选择要包含在集成分支(又称trunk)中的内容。很多时候,在sprint几乎完成之前,软件不会被发送到主干。喜欢这种方法的人喜欢它,因为它提供了灵活性,但我不喜欢它,因为持续集成对这种方法效果不佳。另外,在发布前几天,你通常没有合适的版本。