x-note
  • Introduction
  • JavaScript
    • JavaScript 作用域链
    • JavaScript 数据结构与类型
    • JavaScript 原型
    • JavaScript this 关键字
    • JavaScript 函数
    • JavaScript delete 运算符
    • JavaScript 内存管理与垃圾回收
    • JavaScript 严格模式与混乱模式
    • JavaScript 数字精度丢失
    • JavaScript 并发模型
    • 利用原型链实现继承
  • ECMAScript
    • ECMAScript 6 变量及常量的声明
    • ECMAScript 6 变量的解构赋值
    • ECMAScript 6 Promise 对象
    • ECMAScript 6 Symbol
    • ECMAScript 6 Proxy
    • ECMAScript 6 Reflect
    • ECMAScript 6 new.target
    • ECMAScript 6 Set 和 WeakSet
    • ECMAScript 6 Map 和 WeakMap
    • ECMAScript 6 Iterator
    • ECMAScript 6 Generator
    • ECMAScript 6 class
    • ECMAScript 7
    • ECMAScript 8 async 函数
    • ECMAScript 8 内存共享与原子性
    • ECMAScript 8 Others
    • ECMAScript 2018
    • ECMAScript 2019
  • CSS
    • CSS 块格式化上下文(BFC)
    • CSS 盒模型
    • CSS 外边距合并
    • CSS Float
    • CSS Position
    • CSS Border-Image
    • CSS BEM
    • CSS 表布局详解
    • 页面布局之单列布局
    • 页面布局之多列布局
  • React
    • React 组件的生命周期
    • React 虚拟 DOM
    • React Reconciliation
    • React Diff 算法核心
    • React Fiber
    • React Scheduling
    • React Context API
    • React Refs
    • React HMR
    • React Hook
  • VUE
    • VUE 响应式系统
    • VUE 渲染机制
    • 关于 Vue 的思考
  • Webpack
    • Webpack 基本概念
    • Webpack HMR
  • Babel
    • @babel/preset-env
  • WEB
    • WEB 基础知识及概念
      • 屏幕测量单位
      • 重绘与重排
      • 前端模块化系统
      • WEB 客户端存储
      • 浏览器的渲染过程
    • WEB 性能优化
      • WEB 性能指标
      • WEB 图片优化
      • 懒加载资源
    • WEB 安全
      • XSS
      • XSRF
      • 点击劫持
      • 同源策略(Same Origin Policy,SOP)
    • WEB 解决方案
      • webp 兼容方案
      • WEB 拖拽实现方案
    • WEB SEO
  • Git
    • Git 工作流
    • Git 内部原理
  • 传输协议
    • UDP
      • UDP 基本概念
    • TCP
      • TCP 基本概念
    • HTTP
      • HTTP 基础
      • HTTP 缓存
      • HTTP-2
      • HTTP-3
      • HTTPS
      • 自定义 HTTPS 证书
  • Protocol Buffers
    • Protocol Buffers 基础
  • gRPC
    • gRPC 简介
    • gRPC 基础概念
    • GRPC with GraphQL and TypeScript
  • 正则表达式
    • 正则表达式基础
    • 正则表达式的悲观回溯
  • 基础算法
    • 冒泡排序
    • 插入排序
    • 选择排序
    • 快速排序
    • 归并排序
    • 希尔排序
    • 堆排序
    • 桶排序
    • 计数排序
    • 基数排序
    • 二叉树的遍历
    • 动态规划
    • 回溯
  • 压缩算法
    • HPACK
    • QPACK
  • 设计模式
    • DDD
      • 模型元素的模式
    • 常见设计模式
      • 工厂方法
      • 抽象工厂
      • 构造器
      • 原型
      • 单例模式
      • 适配器模式
      • 桥接模式
      • 组合模式
      • 外观模式
      • 享元模式
      • 代理模式
      • 责任链模式
      • 命令模式
      • 迭代器模式
      • 中介者模式
      • 备忘录模式
      • 观察者模式
      • 状态模式
      • 策略模式
      • 模版方法模式
      • 访问者模式
      • 依赖注入
    • MVC
    • MVP
    • MVVM
  • 颜色空间
    • LCH
由 GitBook 提供支持
在本页
  • Git 标准工作流(Git Flow)
  • Github Flow
  • Gitlab Flow
  • Gitlab Flow 的 CI/CD
  • Gitlab Flow 的环境区分
  • Gitlab Flow 版本分支
在GitHub上编辑
  1. Git

Git 工作流

上一页Git下一页Git 内部原理

最后更新于7年前

Git 的主流工作流主要分为三种工作流程:

  • Git Flow

  • Github Flow

  • Gitlab Flow

Git 标准工作流(Git Flow)

Git Flow 中包含两个长期分支

  • 主分支(master)

  • 开发分支(develop)

主分支用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的发布版本

开发分支用于日常开发,存放最新的开发版本

其次,项目存在三种短期分支

  • 功能分支(feature branch)

  • 补丁分支(hotfix branch)

  • 预发布分支(release branch)

一旦完成开发,这三种短期分支会被合并进开发分支或主分支中,然后被删除。

Git Flow 的优势是清晰可控,但是需要同时维护两个长期分支。

Github Flow

Github Flow 只有一个长期分支 —— 主分支(master)。

  1. 从主分支拉取新分支,新分支不区分功能分支或补丁分支;

  2. 新分支开发完成或需要讨论时,向主分支发起 pull request;

  3. pull request 既是一个通知,让别人注意到你的请求,又是一种对话机制,在这个过程中,还可以不断提交代码;

  4. pull request 被接受,合并进主分支,重新部署后,之前拉取的分支被删除

Github Flow 十分的简单,清晰,但是不适应于复杂的发布环境

Gitlab Flow

Gitlab Flow 是对于 Git Flow 和 Github Flow 的结合,吸取了二者的优点。

Gitlab Flow 的 CI/CD

Gitlab Flow 能够支持持续继承和持续发布。 如果你无法控制具体到发布时间,例如,IOS 应用需要等待 App Store 的检查。对于这种情况,Gitlab 建议包含两个长期分支:

  • 主分支(master)

  • 生产分支(production)

功能分支和补丁分支先合并到主分支中,主分支没有问题再合并到生产分支中。

Gitlab Flow 的环境区分

Gitlab Flow 能够支持按环境区分流程,假设项目存在两个环境 —— 预生产环境和生产环境,对于这种情况 Gitlab Flow 建议根据环境建立两个分支:

  • 预生产分支(pre-production)

  • 生产分支(production)

主分支(master)是预生产分支的“上游”,预生产分支又是生产分支的“上游”。

所有的开发基于主分支,开发完成后,合并进主分支。没有问题后,主分支再发布到预生产分支。预生产分支也没有问题再从预生产分支发布到生产分支

Gitlab Flow 版本分支

有些项目需要同时发布并维护多个版本,对于这类型的项目,Gitlab 建议每一个稳定版本都要从主分支中拉取出一个分支。例如:

  • 2-3-stable

  • 2-4-stable

  • ……

假如某个版本出现了 bug,首先需要新建一个 hotfix 分支,开发完后合并进主分支,确认没有问题后再cherry-pick到出现问题的版本分支中,并且更新小版本号。

Github 官方图

的最大原则是“上游优先(upstream first)”,只存在一个主分支,它是所有分支的“上游”。只有上游分支采纳的代码变化,才能应用到其它分支。

推荐流程
Gitlab Flow