git

Git Flow

Git Flow 工作流

Posted by leone on 2018-02-21

Git Flow

Git Flow 是 Vincent Driessen 2010 年发布出来的他自己的分支管理模型,到现在为止,使用度非常高,我自己管理项目用的就是这个,也可以说是比较熟悉的啦。

Git Flow 的分支结构很特别,按功能来说,可以分支为5种分支,从5 种分支的生命时间上,又可以分别归类为长期分支和暂时分支,或者更贴切描述为,主要分支和协助分支。

主要分支:

在采用 Git Flow 工作流的项目中,代码的中央仓库会一直存在以下两个长期分支:

  • master:正式发布分支

master 分支上存放的应该是随时可供在生产环境中部署的代码(Production Ready state)。当开发活动告一段落,产生了一份新的可供部署的代码时,master 分支上的代码会被更新。同时,每一次更新,需要添加对应的版本号标签(TAG)

  • develop:日常开发分支

develop 分支是保存当前最新开发成果的分支。通常这个分支上的代码也是可进行每日夜间发布的代码(Nightly build)。因此这个分支有时也可以被称作“integration branch”。

其中 origin/master 分支上的最新代码永远是版本发布状态。origin/develop 分支则是最新的开发进度。

当 develop 上的代码达到一个稳定的状态,可以发布版本的时候,develop上这些修改会以某种特别方式被合并到 master 分支上,然后标记上对应的版本标签。

协助分支:

除了主要分支,Git Flow 的开发模式还需要一系列的协助分支,来帮助更好的功能的并行开发,简化功能开发和问题修复。是的,就是下面的三类分支。这类分支是暂时分支非常无私奉献,在需要它们的时候,迫切地创建,用完它们的时候,又挥挥衣袖地彻底消失。
协助分支分为以下几类:

  • Feature Branch:功能分支

功能分支,开发新功能都从 develop 分支出来,从 develop 分支上面分出来的。开发完成后,要再并入 develop。

1
2
3
4
5
6
7
8
9
# 创建一个功能分支:
$ git checkout -b feature-x develop

# 开发完成后,将功能分支合并到develop分支:
$ git checkout develop
$ git merge --no-ff feature-x

# 删除feature 分支:
$ git branch -d feature-x
  • Release Branch:发布分支

发布分支,准备要 release 的版本,只修 bugs。从 develop 分支上面分出来,发布结束以后,必须合并进 develop 和 master 分支。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 创建一个发布分支:
$ git checkout -b release-1.2 develop

# 确认没有问题后,合并到master分支:
$ git checkout master
$ git merge --no-ff release-1.2

# 对合并生成的新节点,做一个标签
$ git tag -a v1.2.0 -m "update xxx"

# 再合并到develop分支:
$ git checkout develop
$ git merge --no-ff release-1.2

# 最后,删除发布分支:
$ git branch -d release-1.2
  • Hotfix Branch:修补分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

修补分支,是指等不及 release 版本就必须马上修 master 赶上线的情况。它是从 master 分支上面分出来的。修补结束以后, 再合并进 master 和 develop 分支。

# 创建一个修补bug分支:
$ git checkout -b hotfix-0.1 master

# 修补结束后,合并到master分支:
$ git checkout master
$ git merge --no-ff hotfix-0.1
$ git tag -a v2.1.1 -m "fixed xxx"

# 再合并到develop分支:
$ git checkout develop
$ git merge --no-ff hotfix-0.1

# 最后,删除"修补bug分支":
$ git branch -d hotfix-0.1

Pull / Merge Request

代码合并到 master/develop 分支:

  • 1、将需要合并到 master / develop 的分支 push 到 gitlab。
  • 2、进入工程 -> merge request -> create new merge request 。
  • 3、选择源分支、目标分支,确定。
  • 4、review 负责人进入 merge request,确认没有问题之后选择 Auto Merge(或者手动在本地合并之后再 push 到 gitlab),并关闭这个 merge request,完成。
  • 5、如果发现问题那么在有问题的行下注释,并提醒 request 的发起人及时修改。
  • 6、删除本地临时分支,本地 master / develop 更新到最新状态。

Code Review

  • 提交 Pull / Merge Request 时, Commit 和 Message 要足够清晰详细。 切记,如果一次提交的内容包含很多 Commit,请不要使用自动生成的描述。 请用简短且足够说明问题的语言(理想是控制在3句话之内)来描述:

你改动了什么,解决了什么问题,需要代码审查的人留意那些影响比较大的改动。特别需要留意,如果对基础、公共的组件进行了改动,一定要另起一行特别说明。

  • 审核人员邀请原则:项目参与人员 & 团队同事 & 团队 Leader。(对项目足够了解,对项目足够了解,对项目足够了解,重要的事情说三遍);

  • 评论中至少出现一个 lgtm 且保证代码评审通过之后 Pull / Merge Request 才可以被合并;(注:lgtm 即 looks good to me 的缩写)