git-workflow:Git分支和流程
git-workflow:Git分支和流程
分支分类
使用下述git分支
- master
master 永远处于稳定状态,这个分支代码可以随时用来部署, 具备生产发布要求的分支。
注意:
不允许在该分支直接提交代码
该分支仅接受从develop分支merge代码,由git repo的maintainer负责。
- develop分支
集成测试和系统测试分支,比如前后端系统联调。
注意:
代码通过merge request的方式提交,需要经过git repo的maintainer code revie后才能合并到develop分支。
- feature/xxx分支
独立功能分支,有较大需求的时候,可以由feature的主开发者创建一个新的feature分支。
- fix/xxx 分支
生产问题修复分支。
- dev/xxx分支
开发者个人的分支。
分支切换流程
分支切换流程使用下述规则:
简单功能开发流程
feature/xxxdevelopmastergraph LR;
feature/xxx-->develop;
develop-->master;
从master分支创建新的feature分支。
feature分支开发完成,模块单元测试通过后,提交到develop分支。
develop分支下联调通过,系统测试通过后,提交到master分支。
bug修复流程
fix/xxxdevelopmastergraph LR;
fix/xxx --> develop;
develop --> master;
从master分支创建新的fix分支。
fix分支下修复完成,单元测试通过后,提交到develop分支。
develop分支下联调通过,系统测试通过后,提交到master分支。
复杂功能开发流程
dev/xxxfeature/xxxdevelopmastergraph LR;
dev/xxx --> feature/xxx;
feature/xxx --> develop;
develop --> master;
从master分支创建新的feature/xxx分支。
从feature/xxx分支创建dev/xxx分支。
dev/xxx分支开发完成,单元测试通过后,提交到feature/xxx分支。
dev/xxx分支开发未结束,需要暂存分支,则可以创建新的dev/yyy分支,push到gitlab上暂存。
feature分支开发完成,模块单元测试通过后,提交到develop分支。
develop分支下联调通过,系统测试通过后,提交到master分支。
生产发布
master的分支是可用于生产的,如果需要部署某个commit,则先git tag, tag的格式为"YYYYMMDD"。
git tag后,将tag push到生产环境(IDC)的一个git repo。再从运行目录中pull该repo.
其他规则
分支合并(pull request)由项目maintainer进行,使用merge方式,不建议使用rebase方式。
分支的流程是单向的,禁止反向进行分支合并(特殊情况需要由maintainer进行cherry-pick)。
由项目maintainer定期删除已经merge的feature/yyy分支,或确认废弃的dev/yyy分支。
基于gitlab管理代码,issue, 和进度。
基于gitlab管理项目文档(包括背景,方案等),统一存放在各项目的doc目录, README文件为项目描述文档。
当一个git repo超出原项目范围时,需要通过git submodule或git subtree拆分,提高代码的重用效率。
一些参考流程
- feature 分支
如果要改的一个东西会有比较多的修改,或者改的东西影响会比较大,请从 develop 分支开出一个 feature 分支,分支名约定为feature/xxx,开发完成后合并回 develop 分支并且删除这个 feature 分支,相应的操作如下:
以 develop 分支为基础建立 feature/xxx 分支
git checkout -b feature/xxx develop
写代码,review,提交……
feature 开发完成,合并回 develop
$ git checkout develop
$ git pull
$ git merge feature/xxx
删除本地的 feature 分支
$ git branch -d feature/xxx
注意,只有git repo的Maintainer可以删除git repo的分支。
如果想要当前分支能保持与 develop 的更新,请用 rebase,操作如下:
假设当前在 feature/xxx 分支
git rebase develop
rebase 会修改历史,如果你的 feature 分支是跟人合作开发的,请互相做好协调。
- 版本发布
当需要跟踪git的历史发布过程时,可以使用release分支。
这个时候从 master 分支上开出一个 release 分支,来做发布前的准备,分支名约定为 release/<Major version>.<Minor version>.<Patch version>,比如 release/1.0.0,
其中. 一致的版本对外接口保持一致。
git checkout -b release/1.0.0 master