理论是灰色的,生命之树常青。

引言

任何一家公司乃至于一个小组织,只要有写代码的地方,就有代码版本管理的主场,初入职场,总会遇到第一个拦路虎 git 管理流程,但是每一个企业似乎都有自己的 git 管理流程,倘若我们能掌握常用的 git 分支管理模型,那么无论碰到什么样的 git 管理流程,只不过都是这些管理模型的衍生与简化而已。

背景

目前笔者所在的前端部门,技术栈是 React & RN 为主,Vue 为辅,也就是说 React 和 Vue 双栈共存,可以说是研发环境比较复杂了,运维部门也制定了相应的 git 管理模型,不过也是比较通用的,那么如何制定一个符合前端部门的 git 管理模型尤为重要,且不可与运维部门的管理模型相冲突,由此便诞生了此篇文章。

Git Flow

由著名大佬 Vincent Driessen 在《A successful Git branching model》一文中,提出影响深远的 git 代码管理模型,在现如今依然许多中大型企业在沿用,下面是他提出的流程图:

优点:分支管理严格,代码合并清晰,适合于中大型团队应用。
缺点:分支流程过多反而也是一种缺点

GitHub Flow

GitHub 于 2011 年创建,遵循以下 6 条原则:

  1. master 分支永远是随时可部署发布的
  2. 需求新增基于 master 分支,并创建一个语义化分支
  3. 定期推送本地分支到远端
  4. 合并到 master 需要提 PR
  5. PR 一旦经过 code review 无误后即可合并到 master
  6. master 一旦接收到合并请求,即可立即部署发布

其大概的流程图如下:

图源 gaboesquivel.com

优点:分支足够简单,且符合人类思维逻辑,适用于持续发布场景
缺点:针对多版本产品线则不适用

GitLab Flow

GitLab 在 2014 年提出 11 条最佳实践,更多请点击这里,其相对 GitHub 增加了环境分支,且代码必须由上游master)向下游staging)发展,并且针对持续发布和版本发布都提出了相应的准则,下面是其大致流程图:

优点:git 提交历史更加清晰、简洁与易读
缺点:对开发人员的能力提出了更高的要求,当存在多产品线时,和 Git Flow 相比平分秋色

TrunkBased

研发团队只在 master 分支进行功能开发,当达到发布的条件时,直接迁出一个只读分支发布,只读分支顾名思义就是不接收任何新代码合并,以及在只读分支上进行修改;当研发人员相对较多时则可以使用可扩展版本,增加了功能分支,但是功能分支不超过两三天则必须要合并到 master 分支,其大致的流程图如下:

优点:简单清晰,单兵作战最佳选择,适合维护后期超稳定的项目
缺点:不适用多版本共存的项目

OneFlow

Adam Ruka 于2017年提出,可以简单的理解为 Git Flow 的简化版本,除了 develop 开发分支和最新发布 master 分支,其余皆是临时分支,一旦开发完成即可删除临时分支,其中具体细则可查看这里,下面是其大致流程图:

优点:单一版本首选,git 提交历史简介清晰易读
缺点:不适合持续交付或持续部署的项目,也不适用多版本共存的项目

AoneFlow

由阿里巴巴技术专家林帆基于 TrunkBased 和 GitFlow 提出的一种新改进,其主要分为三种分支类型:主干分支、特性分支以及发布分支,并且提出了三个基本准则:

  1. 主干创建特性分支,且不允许合并回主干分支
  2. 合并特性分支,形成发布分支
  3. 发布到线上正式环境后,合并相应的发布分支到主干,在主干添加标签,同时删除该发布分支关联的特性分支

下面是其大致的流程图:

优点:灵活易用,通过组合生成分支往往可以实现多种高级玩法
缺点:复杂度稍高,如果没有配套的工具规范往往会出现“无效分支”的出现

总结

介绍了众多的分支管理模型,那么我们该如何挑选适合自己团队的方案呢?在这里制作了一个思维导航图,详情如下:

参考:
[1] a-successful-git-branching-model
[2] githubflow
[3] what-are-gitlab-flow-best-practices
[4] oneflow-a-git-branching-model-and-workflow
[5] 在阿里,我们如何管理代码分支?

Git、GitHub、GitLab Flow,傻傻分不清?一图看懂各种分支管理模型相关推荐

  1. 国防大学计算机学院,国防大学和国防科技大学是同一所学校吗?很多人傻傻都分不清!...

    国防大学和国防科技大学,这两所大学名字相近,极易混淆,在很多网站搜索"国防大学录取分数线",出来的全是国防科技大学的的高考录取分数线,所以给广大考生带来了很大困惑,难道国防大学和国 ...

  2. 网关、路由器,傻傻分不清?进来就懂了

    # 网关 又称网间连接器.协议转换器. 连接两个网络. 连接两种网络(如Lora网关,连接Lora网络和以太网.承担连接.转换重任) 网络的进出口,定义网络的边界.在设备中,网关是一个很重要的配置项, ...

  3. 【Git\GitHub\GitLab学习笔记】版本控制 Git 视频教程全集(62P)| 6 小时从入门到精通(P27-P41)

    目录 P27-Git基本原理-Hash算法简介 P28-GIt版本数据管理机制 - P33-为了测试远程交互初始化本地库 P34-创建远程仓库 P35-在本地创建远程库地址别名 P40-协同开发时冲突 ...

  4. arcgis直方图工具在哪_这些分析工具都分不清?别说你懂数据分析!

    举一个例子,铅笔.钢笔.圆珠笔.水彩笔.中性笔,它们的区别是什么?同理,spss.sas.excel .python.powerbi ,这些常见的数据分析工具有什么区别?很显然,这两个问题是有共性的. ...

  5. 汽车计算机控制电路按功能分,新手篇—轻松看懂汽车电路图(下)

    第十四 节辅助电器 一.辅助电器概述 随着汽车电控技术在现代汽车上广泛的应用,汽车上安装的用电器越来越多,这些用电器除了应用于发动机控制外,绝大部分为汽车辅助电器,例如电动刮水器.电喇叭.电动车窗天窗 ...

  6. 股权、期权和原始股傻傻分不清楚?一文帮你安排的明明白白!

    下面内容copy整理自: 原始股.期权傻傻分不清楚?一文帮你安排的明明白白!l 股权.期权和原始股区别 哪个更值钱? [(建议收藏)67%,51%,34%,30%,20%股权对控制权的区别] 说到股权 ...

  7. Git Flow分支管理

    1.Sourcetree简介及安装 一个用于Windows和Mac的免费Git客户端.Sourcetree简化了如何与Git存储库进行交互,这样您就可以集中精力编写代码.通过Sourcetree的简单 ...

  8. Git 最佳实践:分支管理

    5月份,为统一团队git分支管理规范,刚开始准备自己写,在网上搜了下,发现不少不错的git分支管理实践.最后我为团队选择了这个git分支管理实践 A successful Git branching ...

  9. git学习(三)分支管理

    分支管理 git学习参考 廖雪峰官方网站 git基本操作,一篇文章就够了! 一.分支作用 分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交 ...

最新文章

  1. D - 小晴天老师系列——晴天的后花园
  2. 这张“毅力号火星照片”,AI P过
  3. 使用 Redis 实现一个轻量级的搜索引擎,牛逼啊 !
  4. 22/11/2010
  5. 推荐两个Firefox插件
  6. JAVA爬虫三大运营商
  7. 动手写一个快速集成网易新闻,腾讯视频,头条首页的ScrollPageView,显示滚动视图...
  8. 最短路径——Floyd算法及优化(蓝桥杯试题集)
  9. 配置SpringMVC框架
  10. 关于laravel数据库问题
  11. 数据库系统概论-作业(设计本科生事务管理数据库)
  12. linux scp后台运行的办法
  13. 记忆训练 0-100的110个数字对应编码
  14. 2022年信息安全工程师考试知识点:网络安全需求分析与基本设计
  15. 基于神经网络的指纹识别,指纹比对技术何时出现
  16. eval与assert一句话木马分析
  17. python分支结构与循环结构
  18. ffmpeg 命令的使用
  19. 华为路由器相同网段DHCPv6配置
  20. ffplay 内存优化

热门文章

  1. 标准IO与系统IO的区别
  2. 我国AGV工业编年史(图谱)从1975年第一台磁导航AGV开始
  3. html全屏背景视频特效,HTML5全屏背景视频特效插件Vidage.js源码
  4. 微信小程序商品详情html,微信小程序关于商品详情类的富文本解析器
  5. 计算机符号标志nf,测试标志位指令
  6. 雄迈信息联合华为海思发布H.265AI技术,让安防视频更智能
  7. nginx返回400状态码
  8. shell分析nginx access log日志
  9. 中文系统上安装英文win xp sp3方法
  10. 基于python/django的图书管理系统