在这篇文章中,我将推广一下大约一年前我介绍过的一些项目(在工作中和在私人项目中)中使用的开发模型,它们的结果都非常成功。有段时间我非常想写出来分享一下,但是我至今才抽出时间来。我不会言及任何项目细节,仅讨论分支策略和发布管理。
为何使用 git?
关于 Git 和集中式源码版本控制系统的优缺点对比讨论, 见 此 web。这里有很多精彩激烈的论战。作为一名开发者,现在我更偏好使用 Git 。Git 真的改变了开发者关于合并和分支的认知。我来自传统的 CVS/Subversion 世界,合并 / 分支是件恐怖的事情 (「小心合并冲突,它们会反噬你!」),而且大家偶尔才会做这件事。
但是使用 Git,这些操作就显得轻而易举,它们会成为你 日常 工作流的核心部分。例如,在 CVS/Subversion 手册中,分支和合并直到最后章节才首次出现(仅供高级用户参考),但是在 每个 Git 手册中,第三章就覆盖到了(基本上)。
因为具有简单和可重复的基因,分支和合并不再是什么值得担心的问题了。版本控制工具应该专注于分支 / 合并,而非其他事情。
关于工具的了解已经够了,那么我们就开始进入开发模型了。这个我要介绍的开发模型,不过是每个团队成员进入软件开发流程之前必须遵循的规范。
去中心化和中心化
基于一个「真正」中心库的这种分支模型可以让我们很好的协同工作。注意这个库仅仅是被认为一个中心库(因为 GIT 在技术角度并没有中心库这一说法)。我们将此仓库命名为 origin,因为这名字被 Git 用户熟知。
所有开发者都从 origin 库拉取或向其推送代码。在中心化的推送 - 拉取关系之外,开发者也可以从其他的开发者库拉取代码更改。例如,为了开发一个大型功能,有多位开发者组成一个开发小组,在功能完成之前,开发过程不必推送至 origin 库。在上面的图中就有 Alice 和 Bob, Alice 和 David,还有 Clair 和 David 之间组成的小组。
技术层面,Alice 要在本地库加一个远程 Git 分支并命名为 bob,指向 Bob 的仓库。其他人也一样。
主分支
git 的核心在开发模式上受到了现有模式的极大启发,中心仓库在整个生命周期保持了两个主要的分支:
- master
- develop
每个 Git 用户都对在 origin 的 master 分支很熟悉。 跟 master 分支并行的是另一个称为 develop 的分支。
我们称 origin/master 为主分支,这个分支源码的 HEAD 一直指向 可用于生产环境 的状态。
我们称 origin/develop 为主分支,这个分支源码的 HEAD 总是反映下一个版本的最新开发状况。有些人称这个分支为 “整合分支” 。所有的每日自动构建都是从这