分支 (版本控制)

版本控制软件配置管理中,分支(英语:Branching)是由某个版本的代码或软件物件中建立复制版本,在分支出来后的两个版本,可以独立进行修改。

分支会形成树状结构,也被称为treesstreamscodelines。原始的版本,称为父分支(parent branch)或是上游分支(upstream branch)。分支出来的复本,称为子分支(Child branches)。作为最源头,没有父分支的分支,称为主干(trunk)或主线(mainline)[1]

分布式版本控制系统(例如Darcs英语Darcs)中,分支和存放版本的仓库(repository)是一样的。在这类系统,复制一份仓库的复本和分支是一样的。

软件进行分支后,之后有可能会再将分支合并回父分支。常见的是将修改内容合并回主干(有可能主干不是父分支)。若某个分支不打算合并(例如曾由第三方授权,授权内容不兼容,因此已重新授权英语relicensing,或是用在不同用途上),会称为分叉(fork)。

使用分支的原因

建立分支可以让各部分的代码可以平行开发[2]。大型项目会有不同的参与者,例如开发人员、build管理者,以及软件质量保证人员等。甚至需要维护针对不同操作系统的不同发行版。分支可以让参与者在不破坏基础代码稳定性的情形下,将修改和基础代码隔离,再进行程序错误修正、新机能英语Feature (software design)开发[3]软件版本集成等。这些修改可以在测试完成后,再合并回主线。

开发分支

开发分支(development branch)或开发树(development tree)的代码是指正在软件开发,但还没有正式发行的代码。若在开放原始码社群中,“正式发行”不是那么直觉,因为任何人随时都可以取出(check out)需要的版本,不管是不是在开发分支中都可以取出。一般而言,最终会是下一个主要版本的分支就是开发分支。不过也常常同时开发多个机能,因此存在多个开发分支。

有些版本控制软件会针对主要的开发分支有特殊的命名,例如在CVS中称为MAIN,在git中则称为master[4]

阴影分支或魔术分支

cvc英语cvc system(开源软件,集成rPath开发的版本控制系统)及CVSNT英语CVSNT中,可以针对上游的分支建立阴影分支或魔术分支,在小修改的维护上比较方便。

仓库的复制

分布式版本控制中,可以复制整个仓库(以及其中的分支),之后再进行开发。Monotone(mtn)、Mercurial(hg)[5]git[6]称为clone。

相关条目

参考资料

  1. ^ Berczuk, Steve; Appleton, Brad. Software Configuration Management Patterns: Effective Teamwork, Practical Integration. Addison-Wesley. 2003 [2007-05-24]. ISBN 0-20174117-2. (原始内容存档于2020-10-30). 
  2. ^ Appleton, Brad; Berczuk, Stephen; Cabrera, Ralph; Orenstein, Robert. Streamed Lines: Branching Patterns for Parallel Software Development (- PDF). Hillside. 1998-02-08 [2009-08-12]. (原始内容存档 (PDF)于2020-10-25). 
  3. ^ Bailey, Derick. Part 1: Why. Branch-Per-Feature Source Control. Los techies. 2009-07-15 [2009-08-12]. (原始内容存档于2020-07-29). 
  4. ^ Git Branching Branches in a Nutshell. [2020-07-29]. (原始内容存档于2020-12-20). 
  5. ^ clone. [2020-07-29]. (原始内容存档于2018-07-01). 
  6. ^ git-clone. [2020-07-29]. (原始内容存档于2020-12-14).