IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git flow流程介绍之我的理解(结合实际) -> 正文阅读

[开发工具]Git flow流程介绍之我的理解(结合实际)

Git flow流程介绍之我的理解(结合实际)

一、背景

本文讲述git flow的使用,除了git flow,还有github flow和gitlab flow,感兴趣的话可以自己查资料。
用到的工具:https://learngitbranching.js.org/?NODEMO=&locale=zh_CN

二、前提交代

有两个分支是长期分支,所谓长期分支,不是用完就删、是长期存在的分支

  • master(有些地方叫main)
  • develop(可适简化为dev)

辅助分支,或者叫临时分支,用完在特定某个时间会删掉

  • feature
  • release
  • hotfix

除此以外,可能会有一些别的常见的分支,这些分支和git flow用到的分支无关,因为常见所以列一下

  • bugfix:不知道具体什么含义,跟hotfix一样的用途吗?
  • test:这分支可能是用于测试阶段的,但git flow根本不要这个分支,可用release分支替代

补充说明:

  • develop分支,按正常的流程的话,应该是和master一致的代码状态,即处于相同的commit id或revision(理想状态

    (commit id在有些情况下会被称为revision,两个概念是相同的,注意本文可能会混着概念说)

三、git flow 流程

先假定现在的代码状态如下

在这里插入图片描述

注意,这里main分支就是master分支,本文描述为master分支(因为这款在线git应用程序没法将main删除用master替代)。

目前的状态是:

1、master分支和develop分支具有相同的代码状态(都在c7)

2、目前线上部署的版本是v1.1版本,部署后会打tag,这个tag在c7上

在以上的初始状态下,我们来描述下git flow的流程,现在打算开发一个需求,包含几个功能:a、b、c

  1. 从master/develop中拉出三个分支feature_a/feature_b/feature_c,如下图

    这里基于哪个分支拉出新分支都可以,因为起点相同,但假设因为某些原因导致master和develop处在不同revision,这时就得考虑要基于哪个分支进行开发,一般来说是基于最新的分支

    在这里插入图片描述

  2. 这时 feature_a/b/c分支独立开发,一般不同feature分支交给不同开发人员

    这是理想状态下各自开发各自的,其实实际开发过程a/b/c功能可能有共同依赖的话,比如,都要引入某个jar,或都要用到某个公共的新开发的方法,这时如果a/b/c都重复做一遍就显得有点笨拙,这种情况具体问题具体解决;也有一种可能是feature_b的一个功能需要依赖feature_a,这也不得不导致feature_a必须先提交代码(假设feature_a和b在相同的java project里头的话,如果在不同的project可以mvn deploy到公司私库来解决依赖),这些问题都是具体问题具体解决。

  3. feature_a/b/c各自进行了一些开发,提交了一些代码

    在这里插入图片描述

  4. 接着,a/b/c功能都开发且自测完了。c功能放弃上线,a和b要上线,所以提交MR(或PR)给开发负责人请求feature_a/b分支合并到develop以便进一步在开发环境部署并进行集成测试(开发人员在UI上点一点功能测一下,因为之前可能都仅仅是单元测试或仅使用postman测试)

    • MR/PR是Merge Request或Pull Request,发起MR/PR的意思是发起一个请求单,要求将某个源分支合并到某个目标分支,这个流程是为了开发负责人能够进行code review(代码审查)和控制提交如develop分支的代码
    • 批准合并可以使用自动合并功能(在GitHub或gitlab等工具上都有自动合并的按钮),自动合并在遇到冲突时,需要人员接入,由于开发负责人对具体的代码熟悉度不如开发代码的人,各个开发自行解决

    合并后是如下的图:

    在这里插入图片描述

  5. 用develop分支,在开发环境部署并进行开发环境的集成测试,这里有许多灵活的流程

    1. 要不要将develop合并到自己的feature_a/b,并在feature_a/b上修复测出的bug,修复完后再次提MR/PR合并到develop,然后再次部署再次进行测试?(感觉有点繁琐
    2. 个人认为也可以让开发人员(开发a/b功能的)直接拉出本地的develop分支,在本地develop上修复此阶段发现的bug,然后提MR/PR的,要求本地的develop合并到远程的develop (个人推荐,比较简化
    3. 我怀疑开发负责人真的有时间每次都code review吗?实际这个流程在实际中是经常会被跳过代码审查而直接批准合并(时间不允许时,建议抽查即可
    4. 这个环节,即开发环境进行集成测试的环节,在一些公司很可能都会被省略而直接部署给QA
  6. 进入QA测试环节,提测。开发负责人或QA从develop拉出release分支(具体的话可以带上此次上线的版本号,比如此次要上线v2.0,则命名为 release-v2.0,用这个分支部署给QA进行测试 (开发负责人或QA去做这个事情,在完成部署release后由开发负责人发提测邮件

    在这里插入图片描述

  7. 对release分支的测试过程肯定也会发现bug,那是如何的流程?

    可以二选一(非常建议QA才有权限批准develop合并到release分支,QA要控制自己测试的东西是自己预期的,不然开发人员(包括开发负责人)可以随意将代码合到release分支就不好管理了!!包括测试的数据库必须由QA来掌握是否能执行DDL甚至是删改数据,开发人员只能查测试库的数据),以下流程二选一:

    1. 由于feature_a/b分支已经合并了develop,是a这个功能的bug就在feature_a上修复并提交MR/PR合并到develop,在开发环境自测通过后再MR/PR合并到release分支(release-v2.0),再次用release分支部署让QA测试
    2. 直接在本地develop分支修复bug,修复完毕后提MR/PR合并到develop,部署开发分支验证通过后再提MR/PR合并到release分支(release-v2.0) (推荐

    在这里插入图片描述

  8. 此时有个意外,线上出了问题,需要紧急修复并上线(不紧急的可以不需要这个流程,留在此次迭代中修复或安排在再下一次也行)

    基于线上v1.1版本,从v1.1的tag中拉出hotfix分支,具体的名字可以叫做 hotfix-v1.2(表示上线后叫v1.2版本),开发人员基于hotfix-v1.2进行修复

    • 可能有些公司的部署环境不足得借用下测试环境进行测试,即测试环境从原来部署的release-v2.0分支,切换成部署hotfix-v1.2分支的代码并进行测试(如线上bug涉及到某些表需要恢复到v1.1版的结构,则需要恢复一下,比如v2.0改了a、b两表的结构,bug涉及到b表,则a表不用动,将a表备份表结构和数据为a_bak,然后将a恢复表结构,待测完patch完后再将a删除将a_bak恢复为a)
    • 如果有专门用于测试已发布版本的环境(比如预发布环境),可以用预发布环境测此次patch。(这也提醒了一点,上线后不仅仅是要有上线的时候的代码(v1.1这个tag所表示的代码状态),也要有相应版本的数据库结构的备份)

    上线之后,代码要合并到master分支并打上tag,比如v1.2版本,如图

    在这里插入图片描述

    在这里插入图片描述

  9. 突发事件结束,需要保证此次v2.0上线也要包含刚刚的hotfix的修复,即release-v2.0要包含hotfix-1.2的改动

    请求develop合并到release-v2.0分支,得到如下图

    在这里插入图片描述

  10. 假如此时没有bug了,可发布,则发布后需要合并到master并打上v2.0的tag

    可以看到在c16的点上发布的v2.0版本,打了tag,并且master/develop再次保证了一致

    在这里插入图片描述

  11. 删掉无用的临时分支:release/hotfix/feature

    feature_c留不留呢?看自己需要了,本身 “开发了的功能不要掉” 这是一种浪费在实际中也比较少见,而且这个分支留着久了会导致越来越没有价值,因为后面代码不断迭代代码的变化会比较大,将feature_c合入就会有很多冲突或者功能根本不适用了

    删掉临时分支后如下:

    在这里插入图片描述

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:44:21  更:2022-07-17 16:46:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 11:43:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码