Git Flow

Question

  • 当我开发某个功能到一半的时候,有人突然给我安排了一个新的紧急任务,我该怎么开始这个任务,而不影响现在的?
  • 当我代码写好了的时候,如何发布?
  • 当我发布后,代码出问题了,如何快速修复?
  • 以上的情况,还要求修复后,还要包含之后开发的所有代码?

显然,不光代码有代码规范,代码的管理和协同同样需要一个清晰的流程和规范,由此,行业内的通用解决方案是Git Flow。

What Git Flow

  • Git Flow是一套基于git的工作流程,这个工作流程围绕着project的发布(release)定义了一个严格的如何建立分支的模型。
  • 每一个特性(feature)的开发并不直接在主干上开发,而是在分支上开发,分支开发完毕后再合并到主干上。

Why

  • 在多组员,多项目等环境进行协同工作时,如果没有统一规范、统一流程,则会导致额外的工作量,甚至会做无用功。所以要减少版本冲突,减轻不必要的工作,就需要规范化的工作流程。
  • 好处:
    • 还处于半成品状态的feature不会影响到主干
    • 各个开发人员之间做自己的分支,互不干扰
    • 主干永远处于可编译、可运行的状态
    • GitFlow则在这个基础上更进一步,规定了如何建立、合并分支,如何发布,如何维护历史版本等工作流程。

explain in detail

  • 图一Git Flow
    • 简述
      • 蓝色圆点所在的线为我们源码的主线(master)。
      • 蓝色方形指向的节点就是每一个发布版本的标签(tag)。
      • 紫色圆点所在的线为主要分支线(develop)。
      • 橙色圆点所在的线为新功能开发分支线(feature)。
      • 绿色圆点所在的线为新版本发布线(release)。
      • 红色圆点所在的线为发布版本bug修复线(hotfix)。
  • 图二
    Git Flow
名称 解释
master 这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直接修改
Develop 这个分支是我们的主开发分支,包含所有要发布到下一个Release的代码,这个主要合并与其他分支,比如Feature分支
Feature 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release
Release 当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支
Hotfix 当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release.

支持Git Flow的图形化工具 - - Source Tree
打开界面演示
想了解更多请点击这里