GitFlow工作流
1.各个分支及其作用
- master分支存放所有正式发布的版本,可以作为项目历史版本记录分支,不直接提交代码。
- develop分支为主开发分支,一般不直接提交代码,新功能的开发基于此分支创建新的feature分支进行开发。
- feature分支为新功能分支,feature分支都是基于develop创建的,开发完成后会合并到develop分支上。同时存在多个
- release分支基于最新develop分支创建,当新功能足够发布一个新版本(或者接近新版本发布的截止日期),从develop分支创建一个release分支作为新版本的起点,用于测试,所有的测试bug在这个分支改。测试完成后合并到master并打上版本号,同时也合并到develop,更新最新开发分支。(一旦打了release分支之后不要从develop分支上合并新的改动到release分支),同一时间只有1个,生命周期很短,只是为了发布。
- hotfix分支基于master分支创建,对线上版本的bug进行修复,完成后直接合并到master分支和develop分支,如果当前还有新功能release分支,也同步到release分支上。同一时间只有1个,生命周期较短
2.开发流程
-
第一步为master分支配套一个develop分支。简单来做可以本地创建一个空的develop分支,push到服务器上:
git branch –b develop git push -u origin develop
以后这个分支将会包含了项目的全部历史,而master分支将只包含了部分历史。其它开发者这时应该克隆中央仓库,建好develop分支的跟踪分支:
git clone ssh://user@host/path/to/repo.git git checkout -b develop origin/develop
-
现在每个开发都有了这些历史分支的本地拷贝。从develop分支拉一个特性分支进行开发
git checkout -b some-feature develop git push(如果这个功能需要多个人协作,建议push)
用老套路添加提交到各自功能分支上:编辑、暂存、提交:
git status git add git commit git push(如果这个功能需要多个人协作)
添加了提交后,如果团队使用Pull Requests,这时候可以发起一个,用于合并到develop分支。否则就直接合并到本地的develop分支后push到中央仓库,第一条命令在合并功能前确保develop分支是最新的。
注意,功能决不应该直接合并到master分支!!!
git pull origin develop git checkout develop git merge some-feature git push git branch -d some-feature git push origin --delete some-feature (如果这个功能需要多个人协作)
-
然后用一个新的分支来做发布准备。这一步也确定了发布的版本号:
git checkout -b release-1.0.0 develop
这个分支是清理发布、执行所有测试、更新文档和其它为下个发布做准备操作的地方,像是一个专门用于改善发布的功能分支。只要创建这个分支并push到中央仓库,这个发布就是功能冻结的。任何不在develop分支中的新功能都推到下个发布循环中。
-
一旦准备好了对外发布,合并修改到master分支和develop分支上,删除发布分支。
git checkout master git merge release-1.0.0 git push git checkout develop git merge release-1.0.0 git push git branch -d release-1.0.0 git push origin --delete release-1.0.0
发布分支是作为功能开发(develop分支)和对外发布(master分支)间的缓冲。只要有合并到master分支,就应该打好Tag以方便跟踪。
git tag -a 1.0.0 -m "Initial public release" master git push --tags
-
对外发布后,发现了当前版本的一个Bug,从master分支上拉出了一个Hotfix分支,提交修改以解决问题,然后直接合并回master分支
git checkout -b issue-#001 master Fix the bug….. git checkout master git merge issue-#001 git push
就像发布分支,维护分支中新加这些重要修改需要包含到develop分支中,然后才删除这个Hotfix分支
git checkout develop git merge issue-#001 git push git branch -d issue-#001