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

如何在SVN(Tortoise SVN)中从多个开发人员分支合并后创建主干,svn,merge,tortoisesvn,Svn,Merge,Tortoisesvn,我的团队是SVN的新手,我认为我们犯了一个错误,每个开发人员都创建了自己的分支,并开始向自己的分支添加代码。现在,我需要将所有分支合并到一个主干中。有安全的方法吗?我一直在研究这个问题,但是当分支中有一个文件,而不是主干中的文件时,我总是会遇到“树冲突”错误。除了少数会产生错误的文件外,大多数文件都会被添加 主干最初是空的,我试图一次合并一个分支 我们使用的是乌龟SVN 1.7.9 这是我们目前的结构 projectFoo - branches - dev1

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

主干最初是空的,我试图一次合并一个分支

我们使用的是乌龟SVN 1.7.9

这是我们目前的结构

projectFoo

    - branches
        - dev1
            - proj1

        - dev2
            - proj1

        - dev3
            etc...

    - trunk
        - <empty>
projectFoo
-分支机构
-dev1
-proj1
-dev2
-proj1
-dev3
等
-树干
- 

你会玩得很开心,因为每个人都在自己的分支机构工作,而分支机构之间没有任何关系。这不是编程意义上的合并。真正的合并意味着您将分支“A”从分支“B”中拆分,因此这两个分支有一个共同的祖先版本,现在您将从“A”合并到“B”或从“B”合并到“A”

做你需要做的事情没有简单的方法。如果幸运的话,所有开发人员都在编写单独的代码,因此合并只是意味着将分支合并在一起,而不会有真正的冲突。如果开发人员在同一个文件上工作,但是在不同的分支中工作,那么您就有麻烦了

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

  • 不稳定的行李箱:我个人的最爱。每个人都在车尾箱外工作。这是上帝设计颠覆的方式。分支仅在必要时进行。必要时的定义有点模糊。基本上,您可以在需要时进行分支,因为您不希望开发人员处于空闲状态

  • 流开发:在流开发中,您有一个集成流(通常是主干),开发人员创建开发流(也称分支)来完成他们的工作。开发流可能是开发人员的个人工作区、敏捷任务、Jira问题或特性。您基本上是在主干上创建一个分支,完成工作,重新设置基础(即从主干合并到开发分支流),以及交付(即从开发流合并回主干)

正如您所看到的,在不稳定的主干中,一切都非常简单,因为几乎没有发生分支。因为每个人都在主干之外工作,所以他们与每个人的沟通会更好一些,并且他们会接受更小的开发任务。当与持续集成相结合时,它工作得非常好

你什么时候在不稳定的树干上分支?通常,当您开始完成一个版本,开发人员开始处理当前版本,然后是下一个版本时。假设每个人都在开发1.2版。每个人都在后备箱上工作。当一些开发人员完成了1.2版的工作,并希望在1.3版上工作,而在1.2版上还有一些清理工作要做时,您就从主干上分支出了1.2版的分支

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

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

流开发受到敏捷团队的青睐,因为它允许您选择集成分支(也称为主干)中要包含的内容。很多时候,直到sprint几乎完成,软件才被交付到trunk中。喜欢这种方法的人喜欢它,因为它提供了灵活性,但我不喜欢它,因为这种方法不能很好地进行连续集成。另外,通常要到发布前几天,你才有一个像样的构建