Svn 从标记创建补丁分支并将其与主干合并

Svn 从标记创建补丁分支并将其与主干合并,svn,branching-and-merging,Svn,Branching And Merging,现在我们在分支中执行工作。它们被合并到主干中,并在完成其中的功能时终止。因此,主干总是包含最新的稳定代码 当主干准备好发布时,将在该给定点从主干创建一个标签。 现在,我们如何最好地处理需要为以前的版本创建补丁的情况 我们有一个标签标记该版本。但是主干现在包含了更多的新特性。 如果我们从旧的标签创建一个分支,我们如何将修补程序干净地放入我们的主干,并用新的标签标记新的补丁发布 我可以标记从初始释放标记创建的分支,并将分支与我们的主干重新整合?还是会造成问题?我觉得这可能会混淆颠覆 这张“图片”试图

现在我们在分支中执行工作。它们被合并到主干中,并在完成其中的功能时终止。因此,主干总是包含最新的稳定代码

当主干准备好发布时,将在该给定点从主干创建一个标签。 现在,我们如何最好地处理需要为以前的版本创建补丁的情况

我们有一个标签标记该版本。但是主干现在包含了更多的新特性。 如果我们从旧的标签创建一个分支,我们如何将修补程序干净地放入我们的主干,并用新的标签标记新的补丁发布

我可以标记从初始释放标记创建的分支,并分支与我们的主干重新整合?还是会造成问题?我觉得这可能会混淆颠覆

这张“图片”试图说明流程

Work branches /-- itter. 1.0 --\      /- 2.0 -\           /------ 3.0 ----------\
             /                  \    /         \         /                   /   \
    ------------trunk----------------------------------------------------------------------  
                                  |                | v2.0 tag              /      | v3.0 tag  
                                  |                                       /
                                  | V1.0 tag----------\                  /
                                                       \-- Branch 1.1 --/
                                                                        |
                                                                        | V1.1 tag
请注意,尽管标记和分支在此位于同一行,但它们实际上位于标准的主干、分支、标记文件夹布局中


注意:工作分支与给定的发布没有任何关系。我只是将它们命名为1.0等,但它们可以命名为foo、bar或其他任何名称。

更常见的方法是保持发布分支(1.x、2.x等)打开,并从中标记特定的发布

仅在停止支持该版本时关闭分支

        1.0     1.1         2.0     2.1         (release tags)
       /       /           /       /
   /----------- 1.x       /----------- 2.x      (release branches)
  /                      / 
----------------------------------------------- trunk

将修复程序从这样一个发布分支合并到主干是安全的,无论该分支从何处分支(主干、标记或其他分支).

我们现在使用的方法是标记trunk中的发布,如果需要一段时间的补丁,并且它可以与单个和多个团队一起正常工作,则可以使用该标记创建分支。

我还想说,如果您定期进行合并,您可能会发现分布式版本控制系统(例如git或mercurial)比Subversion更受欢迎。但是,如果名为1.0、2.0等的分支不包含发行版怎么办?如果它们是sprint分支,或者甚至是sprint分支中的功能分支怎么办?这样做的目的是没有“逻辑”在分支中,指示什么是发布。这由产品负责人决定,并且在任何给定的时间从主干中发布。当时可能有1个、10个或0个正在进行的分支尚未合并到主干中。这就是为什么我们在主干上标记发布时的点。唯一的问题是如何最好地进行b确认并修补该类型的标记版本。如果您必须并行管理应用程序的多个版本(2.1、3.0,…)你不能仅仅依靠主干来发布。发布分支是必需的。@inquam:功能分支在工作时就存在。当它们的功能准备好发布时,你将它们合并到主干并关闭它们。然后,该状态被分支以发布。但由于补丁是在主干上完成的工作,就像很久以前一样,你不能这样做将其合并到主干中,然后从该主干中分支一个版本(即标记)。如果是这样,您将在版本发布后将所有更改作为路径的一部分进行修补并提交到主干中。必须在将更改合并回主干之前进行发布。如上所述,我们使用“稳定主干”但是分支/标记可以被命名为任何名称,因为对subversion来说都是一样的。