在这种情况下如何最好地使用SVN?

时间:2010-12-08 17:59:37

标签: svn version-control repository

在我的产品开发中寻找有关如何使用SVN的建议。

目前我正在使用我的产品的2.2版,并开始使用带有eclipse的SVN来跟踪我的代码。但是,我将开始研究该产品的第3版,该版本与2.2基本相同,只有一些大修和一些新功能。

问题是虽然2.2仍然会进行错误修复和一些次要功能/调整,可能还有2-3个版本才能成为文具,并且不再进行任何工作 - 希望及时发布版本3。所以目前如果我的行李箱是2.2,并且此时有稳定的标签,我该从哪里开始?请记住,我希望3在行李箱中从这个标签分支,但是如果我做了一个小的改动或错误修复,2.2和3有类似的类我希望它在版本3中重新实现而不是必须实现错误修复两次,在v2.2(主干)和v3分支。

还值得注意的是,我的v3分支可能在其上有分支,用于“实验”功能,可能无法进入该特定产品的第一个稳定版本。

对于这种情况的最佳实践的任何想法将不胜感激。

4 个答案:

答案 0 :(得分:1)

基本方法是为每个功能分支开发一个单独的svn分支。

这样做的一个实例就是创建一个2.x分支,它将在2.2,2.3,2.4,...系列中进行所有开发。这将基于您当前的任何位置,您可以使用标记来表示每个发布点。如果它们出现(例如,2.3.x),您还可以在将来为关键版本修复产生新的分支。然后你可以在trunk上继续你的主要开发。

当然,如果有必要,您可以使用svn merge(如http://svnbook.red-bean.com/en/1.5/svn.branchmerge.html所述)来处理分支之间的合并。我强烈建议使用最新版本的Subversion(比如1.5),因为旧版本需要您手动跟踪已经合并的更改,而较新的版本会处理为您跟踪的信息。

要处理要在分支之间向下或向下合并的简单错误修复,可以使用cherry-picking在分支之间移动这些更改。

答案 1 :(得分:1)

考虑此存储库

    ROOT
    |-- trunk
    |-- tags
    |   `-- 2.2 => copy of branches/version_2
    `-- branches
        |-- version_2 => copy of trunk at 2.2
        |-- version_3_experimental => copy of trunk at 2.2
        `-- version_3 => copy of trunk at 2.2

您在trunk中为您的第3版进行了每次开发,并且任何错误修复都在version_2分支中完成。如果为版本2开发的任何内容应该在版本3中,则将其合并到trunk中。之后,您将在branches / version_3中合并您的主干。这样,根据版本3,您的主干继续增长。

完成版本2后,请从version_2分支创建标记。

希望这有帮助。

答案 2 :(得分:0)

您可以使用svn merge合并代码分支。

答案 3 :(得分:0)

您的开发将如下所示:

                                              branch
                                              2.x -------------->
                                               |             |bring some more
                                               |  trunk 3.0  |changes if necessary
   trunk   --------------------------------------------------------------->
    2.2 stable        |      |      |        |  *     incorporated
       |              |      |      |        |  |Merge
   create branch     periodically bring      |  |branch 3 back
       |              | changes from trunk   |  |to trunk
       *              *      *      *        *  |
       branch------------------------------------X branch ends
         3                                            here

我的建议是在将3.x合并到trunk之前延迟创建2.x分支。 这样可以减少合并次数。

从那里进行的任何更改都可以带到trunk(3.x),但不是另一种方式。当逐步淘汰2.x而不是3.x时,这是典型的方法。