Git工作流指南
Gitflow工作流定义了一个围绕项目发布的严格分支模型。虽然比功能分支工作流复杂几分,但提供了用于一个健壮的用于管理大型项目的框架。
Gitflow工作流没有用超出功能分支工作流的概念和命令,而是为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。除了使用功能分支,在做准备、维护和记录发布也使用各自的分支。当然你可以用上功能分支工作流所有的好处:Pull Requests
、隔离实验性开发和更高效的协作。
特点
首先,项目存在两个长期分支:主分支(master
)和 开发分支(develop
)。前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。
其次,项目存在三种短期分支:功能分支(feature branch
)、补丁分支(hotfix branch
)和 预发分支(release branch
)。一旦完成开发,它们就会被合并进develop
或master
,然后被删除。
工作方式
Gitflow工作流仍然用中央仓库作为所有开发者的交互中心。和其它的工作流一样,开发者在本地工作并push
分支到要中央仓库中。
历史分支
相对使用仅有的一个master
分支,Gitflow工作流使用2个分支来记录项目的历史。master
分支存储了正式发布的历史,而develop
分支作为功能的集成分支。这样也方便master
分支上的所有提交分配一个版本号。
剩下要说明的问题围绕着这2个分支的区别展开。
功能分支
每个新功能位于一个自己的分支,这样可以push
到中央仓库以备份和协作。但功能分支不是从master
分支上拉出新分支,而是使用develop
分支作为父分支。当新功能完成时,合并回develop
分支。新功能提交应该从不直接与master
分支交互。
注意,从各种含义和目的上来看,功能分支加上develop
分支就是功能分支工作流的用法。但Gitflow工作流没有在这里止步。
发布分支
一旦develop
分支上有了做一次发布(或者说快到了既定的发布日)的足够功能,就从develop
分支上fork
一个发布分支。新建的分支用于开始发布循环,所以从这个时间点开始之后新的功能不能再加到这个分支上 —— 这个分支只应该做Bug修复、文档生成和其它面向发布任务。一旦对外发布的工作都完成了,发布分支合并到master
分支并分配一个版本号打好Tag
。另外,这些从新建发布分支以来的做的修改要合并回develop
分支。
使用一个用于发布准备的专门分支,使得一个团队可以在完善当前的发布版本的同时,另一个团队可以继续开发下个版本的功能。
这也打造定义良好的开发阶段(比如,可以很轻松地说,『这周我们要做准备发布版本4.0』,并且在仓库的目录结构中可以实际看到)。
维护分支
维护分支或说是热修复(hotfix
)分支用于生成快速给产品发布版本(production releases)打补丁,这是唯一可以直接从master
分支fork
出来的分支。修复完成,修改应该马上合并回master
分支和develop
分支(当前的发布分支),master
分支应该用新的版本号打好Tag
。
为Bug修复使用专门分支,让团队可以处理掉问题而不用打断其它工作或是等待下一个发布循环。你可以把维护分支想成是一个直接在master
分支上处理的临时发布。
常用的分支约定:
- 用于合并的分支:
master
- 用于新建发布分支的分支:
develop
- 功能分支命名:
release-*
或release/*
- 发布分支命名:
feature-*
或feature/*
- 维护分支命名:
hotfix-*
或hotfix/*