你应该什么时候分支?
在使用SCM系统时,您应该何时分支?
分支有几种用途。 最常见的用途之一是分离曾经拥有共同代码库的项目。 这对于试验你的代码非常有用,而不会影响主干。
一般来说,你会看到两种分支类型:
功能部门:如果某个功能具有足够的破坏性,以至于您不希望整个开发团队在早期阶段受到影响,则可以创建一个分支来完成此项工作。
修复分支:在主干上继续开发时,可以创建修复分支以将修复保留到最新发布的软件版本。
您可能有兴趣查看下面的文章,它解释了分支的原理以及何时使用它们:
总的来说,分支(VCS - 版本控制系统 - 特性)的主要目的是实现代码隔离 。
您至少有一个分支,它可以用于顺序开发,并且用于许多正在记录(提交)在同一独特分支上的任务。
但是这个模型很快显示出它的极限:
当你有一个开发工作(重构,进化,错误修复......)时,你意识到你不能在当前的开发分支中安全地在同一分支中进行这些更改(因为你会中断API或引入会破坏一切),那么你需要另一个分支。
(为了隔离传统代码的新代码,即使稍后将两个代码集合并)
所以这就是你的答案:
只要你不能在一个分支中追求和记录两项开发工作,你就应该进行分支。
(没有可怕的复杂历史维护)。
即使你是唯一一个处理源代码的分支,如果你很多,分支也是有用的。
但是你不应该让“每个开发者一个分支”:
“隔离”的目的是隔离一个开发工作 (一个可以像“开发我们的软件的下一个版本”一样通用的任务,或者像“修复bug 23”一样具体)
不要孤立一个“资源” 。
(一个名为“VonC”的分支对另一个开发人员没有任何意义:如果“VonC”离开该项目,该怎么办?你应该怎么做?
一个名为“bugfix_212”的分支可以在bug跟踪系统的上下文中解释,例如任何开发人员都可以使用它,至少有一些关于他应该怎么做的想法)
一个分支不是一个标签 (SVN是一个修订系统,它试图通过廉价的文件复制目录来提出分支和标记等版本功能:这并不意味着标签是分支)
定义一个分支也意味着定义一个合并工作流程 :当你完成分支时,你需要知道你的分支在哪里合并。
为此,Practical Perforce(Laura WINGERD - O'Reilly)第7章介绍了如何在不同类型的分支之间合并工作流程(VCS不可知论者):“” 软件如何演化 “(pdf)
它定义了术语代码行 (记录代码的重要进化步骤的分支,无论是通过某些点的标记,还是通过重要合并回到分支)
它引入了主线模型(记录版本的中央代码行),并描述了分支的各种用途:
这允许“早期提交,经常提交”。
有关VCS的其他有趣概念:基本概念
(关于ClearCase最初,也适用于任何VCS)
所有21世纪的SCM都告诉你:
为你需要处理的每项任务分支,无论这是一项新功能,一项错误修正,一项测试,无论如何。 这被称为主题分支,它改变了你使用SCM的方式。
你得到:
可以做到的工具:
无法做到的工具:
下一篇: How do you maintain development code and production code?