IT产品研发Gitlab flow管理方案
角色与职责
- Developer:开发人员,在各自的代码分支里面进行功能开发,开发完成之后发起Merge Request,请求代码合并
- Master:开发Leader,负责开发、成员管理、代码审查与合并
- Owner:项目管理人员,具有Developer与Master权限的同时,可对项目进行管理,包括修改项目名、删除项目等
具体的权限分配参见:https://docs.gitlab.com/ee/user/permissions.html
分支管理
- feature分支:每个开发人员的开发分支,每天需要将代码push到该分支
- 命令:git add . --> git commit -m "message" --> git push origin <your_branch_name>
- 开发人员分支命名一般规则:feature/<your_name>
- 开发人员每天开发之前需要先同步develop分支代码到自己的开发分支,避免过多冲突,指令:git pull origin develop
- develop分支:所有开发人员代码汇总的主分支
- 开发人员代码自测没有问题之后,发起merge request,请求将个人feature分支的代码合并到该分支
- 开发Leader收到merge request之后,通过Gitlab审查代码,通过之后将分支合并
- release分支,develop分支处于快速迭代之中,因此在完成某一阶段功能开发的时候,将相对稳定的develop分支代码合并到release分支,供测试人员测试,测试之中产生的bug也在该分支进行,修复完成之后注意将修改内容合并到开发分支中
- 一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支
- 不同开发人员的release修复需要创建分支,例如:release/<your_branch_name>, 修复完成之后合并到release主分支
- master分支,本方案中发行版代码的最终来源,release分支代码经测试无误之后,合并到master分支打上tag,为最终发行做准备
- hotfix分支,用于修复线上版本的紧急bug,当线上版本出现紧急bug的时候,将线上版本代码从master分支中pull到hotfix分支,在hotfix分支上将bug修复之后,代码同步到develop分支并合并到master分支打上tag
- 不同开发人员的bug需要创建不同的分支进行修复,如hotfix/<your_branch_name>,修复完成之后合并到hotfix主分支
分支工作流程
- 初始分支
- 所有在Master分支上的Commit应该Tag

- Feature 分支
- 分支名 feature/*
- Feature分支做完后,必须合并回Develop分支, 合并完分支后一般会删点这个Feature分支,但是我们也可以保留

- Release分支
- Release分支基于Develop分支创建,打完Release分之后,我们可以在这个Release分支上测试,修改Bug等。同时,其它开发人员可以基于开发新的Feature (记住:一旦打了Release分支之后不要从Develop分支上合并新的改动到Release分支)
- 发布Release分支时,合并Release到Master和Develop, 同时在Master分支上打个Tag记住Release版本号,然后可以删除Release分支了。

- 维护分支 Hotfix
- 分支名 hotfix/*
- hotfix分支基于Master分支创建,开发完后需要合并回Master和Develop分支,同时在Master上打一个tag

git flow代码事例
- a. 创建develop分支
git branch develop
git push -u origin develop
- b. 开始新Feature开发
git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature
# 做一些改动
git status
git add some-file
git commi
- c. 完成Feature
git pull origin develop
git checkout develop
git merge --no-ff some-feature
git push origin develop
git branch -d some-feature
# If you pushed branch to origin:
git push origin --delete some-feature
- d. 开始Relase
git checkout -b release-0.1.0 develop
# Optional: Bump version number, commit
# Prepare release, commit
- e. 完成Release
git checkout master
git merge --no-ff release-0.1.0
git push
git checkout develop
git merge --no-ff release-0.1.0
git push
git branch -d release-0.1.0
# If you pushed branch to origin:
git push origin --delete release-0.1.0
git tag -a v0.1.0 master
git push --tags
- f. 开始Hotfix
git checkout -b hotfix-0.1.1 master
g. 完成Hotfix
git checkout master
git merge --no-ff hotfix-0.1.1
git push
git checkout develop
git merge --no-ff hotfix-0.1.1
git push
git branch -d hotfix-0.1.1
git tag -a v0.1.1 master
git push --tags