你应该什么时候分支?

在使用SCM系统时,您应该何时分支?


分支有几种用途。 最常见的用途之一是分离曾经拥有共同代码库的项目。 这对于试验你的代码非常有用,而不会影响主干。

一般来说,你会看到两种分支类型:

  • 功能部门:如果某个功能具有足够的破坏性,以至于您不希望整个开发团队在早期阶段受到影响,则可以创建一个分支来完成此项工作。

  • 修复分支:在主干上继续开发时,可以创建修复分支以将修复保留到最新发布的软件版本。

  • 您可能有兴趣查看下面的文章,它解释了分支的原理以及何时使用它们:

  • Ned Batchelder - Subversion分支快速入门

  • 总的来说,分支(VCS - 版本控制系统 - 特性)的主要目的是实现代码隔离

    您至少有一个分支,它可以用于顺序开发,并且用于许多正在记录(提交)在同一独特分支上的任务。

    但是这个模型很快显示出它的极限:

    当你有一个开发工作(重构,进化,错误修复......)时,你意识到你不能在当前的开发分支中安全地在同一分支中进行这些更改(因为你会中断API或引入会破坏一切),那么你需要另一个分支。
    (为了隔离传统代码的新代码,即使稍后将两个代码集合并)

    所以这就是你的答案:
    只要你不能在一个分支中追求和记录两项开发工作,你就应该进行分支。
    (没有可怕的复杂历史维护)。


    即使你是唯一一个处理源代码的分支,如果你很多,分支也是有用的。
    但是你不应该让“每个开发者一个分支”:
    “隔离”的目的是隔离一个开发工作 (一个可以像“开发我们的软件的下一个版本”一样通用的任务,或者像“修复bug 23”一样具体)
    不要孤立一个“资源”

    (一个名为“VonC”的分支对另一个开发人员没有任何意义:如果“VonC”离开该项目,该怎么办?你应该怎么做?
    一个名为“bugfix_212”的分支可以在bug跟踪系统的上下文中解释,例如任何开发人员都可以使用它,至少有一些关于他应该怎么做的想法)

    一个分支不是一个标签 (SVN是一个修订系统,它试图通过廉价的文件复制目录来提出分支和标记等版本功能:这并不意味着标签是分支)

    定义一个分支也意味着定义一个合并工作流程 :当你完成分支时,你需要知道你的分支在哪里合并。
    为此,Practical Perforce(Laura WINGERD - O'Reilly)第7章介绍了如何在不同类型的分支之间合并工作流程(VCS不可知论者):“” 软件如何演化 “(pdf)

    它定义了术语代码行 (记录代码的重要进化步骤的分支,无论是通过某些点的标记,还是通过重要合并回到分支)

    它引入了主线模型(记录版本的中央代码行),并描述了分支的各种用途:

  • 积极的开发流程 :持续的代码线,当各种各样的发展发生时
  • 任务分支 :用于更具体任务的短命分支(bug-fix是一个经典的分支,但您也可以为合并工作定义一个分支,您知道该分支要完成很复杂:您可以在该任务分支中进行合并,提交和测试而不会为目前的主要发展部门带来问题)
  • 临时分支 :用于准备发布,以及一些预生产特定数据或配置文件。
  • 私人分支机构,临时分支机构和稀疏分支机构 :用于非常小的任务,只是为了能够在不等待正式完成或测试审查的情况下进行一些工作。
    这允许“早期提交,经常提交”。

  • 有关VCS的其他有趣概念:基本概念
    (关于ClearCase最初,也适用于任何VCS)


    所有21世纪的SCM都告诉你:

    为你需要处理的每项任务分支,无论这是一项新功能,一项错误修正,一项测试,无论如何。 这被称为主题分支,它改变了你使用SCM的方式。

    你得到:

  • 更好的隔离
  • 更好的可追溯性 - >您将任务与分支关联起来,而不是单个变更集,这使您可以随意多次提交,并且不会像“每次检查一项任务”那样施加限制。
  • 任务是独立的(通常从一个稳定的基线开始,所以你只关注你的代码,而不是修复你的人的错误),你可以选择你是否想在某个时候或之后集成它们,但它们总是在版本控制
  • 您可以轻松地查看代码(从版本控制,而不是预先提交废话),然后点击主线
  • 可以做到的工具:

  • 混帐
  • 水银
  • 塑料SCM
  • 无法做到的工具:

  • SVN
  • CVS
  • VSS
  • TFS
  • Perforce公司
  • 链接地址: http://www.djcxy.com/p/45043.html

    上一篇: When should you branch?

    下一篇: How do you maintain development code and production code?