原文地址: 介绍一个成功的 Git 分支模型
英文原文地址: A successful Git branching model
在这篇文章中,我提出一个开发模型。我已经将这个开发模型引入到我所有的项目里(无论在工作还是私人)已经一年有余,并且它被证明是非常成功的。我打算写这些已经很久了,但我一直找不到时间来做,现在终于有时间了。我不会讲任何项目的具体细节,仅是关于分支策略和释放管理相关内容。
它主要体现了 Git 对我们源代码版本的管理。
为何是 Git?
对于 Git 与其他集中式代码管理工具相比的优缺点的全面讨论,请参见这里。这样的争论总是喋喋不休。作为一个开发者,与现今的其他开发工具相比较,我更喜欢 Git。Git 真得改变了开发者对于合并和分支的思考。我曾经使用经典的 CVS/Subversion,然而每次的合并/分支和其他行为总让人担惊受怕(“小心合并里的冲突,简直要命!”)。
但是对于 Git 来说,这些行为非常简单和搞笑,它们被认为是_日常_工作中的核心部分。例如,在很多 CVS/Subversion书里,分支与合并总是在后面的章节中被讨论(对于高级用户使用),然而在每个 Git书中,在第 3 章就已经完全涵盖了(作为基础)。
简单和重复的特性带来的结果是:分支与合并不再是什么可以害怕的东西。分支/合并被认为对于版本管理工具比其他功能更重要。
关于工具,不再多说,让我们直接看开发模型吧。这个模型并不是如下模型:在管理软件开发进度方面,面对每个开发过程,每个队员必须按一定次序开发。
分布式而非集中式
对于这种分支模型,我们设置了一个版本库,它运转良好,这是一个”事实上” 版本库。不过请注意,这个版本库只是被_认为_是中心版本库(因为 Git 是一个分布式版本管理系统,从技术上来讲,并没有一个中心版本库)。我们将把这个版本库称为原始库,这个名字对所有的 Git 用户来说都很容易理解。
每个开发者都对 origin 库拉代码和提交代码。但是除了集中式的存取代码关系,每个开发者也可以从子团队的其他队友那里获得代码版本变更。例如,对于 2 个或多个开发者一起完成的大版本变更,为了防止过早地向 origin 库提交工作内容,这种机制就变得非常有用。在上述途中,有如下子团队:Alice 和 Bob,Alice 和 David,Clair 和 David。
从技术上将,这意味着,Alice 创建了一个 Git 的远程节点,而对于 Bob,该节点指向了 Bob 的版本库,反之亦然。