如何分清楚常见的 Git 分支管理策略Git Flow、GitHub Flow 和 GitLab Flow
Git Flow、GitHub Flow 和 GitLab Flow 是几种常见的 Git 分支管理策略,它们帮助开发团队更高效地管理代码库和协同开发。
Git Flow
Git Flow 是一种功能强大的分支管理模型,由 Vincent Driessen 提出,适用于发布周期较长、需要严格管理发布版本的项目。
主要分支
main
(或master
):存储生产环境的稳定版本。develop
:存储最新的开发代码,集成了所有功能分支的代码。
辅助分支
-
功能分支(Feature Branches):
- 从
develop
分支创建,用于开发新功能。 - 命名规范:
feature/feature-name
- 开发完成后合并回
develop
。
- 从
-
发布分支(Release Branches):
- 从
develop
分支创建,用于准备新版本的发布。 - 命名规范:
release/x.y.z
- 在此分支上进行最后的测试和修复,完成后合并到
main
和develop
。
- 从
-
热修复分支(Hotfix Branches):
- 从
main
分支创建,用于紧急修复生产环境中的问题。 - 命名规范:
hotfix/x.y.z
- 修复完成后合并到
main
和develop
。
- 从
操作流程
-
创建功能分支:
git checkout develop git checkout -b feature/feature-name
-
合并功能分支:
git checkout develop git merge feature/feature-name
-
创建发布分支:
git checkout develop git checkout -b release/x.y.z
-
合并发布分支:
git checkout main git merge release/x.y.z git checkout develop git merge release/x.y.z
-
创建热修复分支:
git checkout main git checkout -b hotfix/x.y.z
-
合并热修复分支:
git checkout main git merge hotfix/x.y.z git checkout develop git merge hotfix/x.y.z
GitHub Flow
GitHub Flow 是 GitHub 提出的简单工作流程,适用于持续部署和较短的开发周期。它只有一个长期存在的主分支。
主要分支
main
(或master
):存储生产环境的稳定版本。
操作流程
-
创建功能分支:
- 从
main
分支创建,用于开发新功能。 - 命名规范:自定义(如
feature/feature-name
)
- 从
-
推送功能分支:
- 定期推送功能分支到远程仓库,便于备份和团队协作。
git push origin feature/feature-name
-
创建 Pull Request:
- 在 GitHub 上创建 Pull Request,请求将功能分支合并到
main
。
- 在 GitHub 上创建 Pull Request,请求将功能分支合并到
-
代码审查和合并:
- 团队成员进行代码审查,通过后合并 Pull Request,将功能分支合并到
main
。
- 团队成员进行代码审查,通过后合并 Pull Request,将功能分支合并到
-
部署生产环境:
- 合并完成后,自动或手动部署到生产环境。
示例操作流程
-
创建功能分支:
git checkout main git pull origin main git checkout -b feature/feature-name
-
推送功能分支:
git add . git commit -m "Add new feature" git push origin feature/feature-name
-
创建 Pull Request 并合并:
- 在 GitHub 上创建 Pull Request,请求将
feature/feature-name
分支合并到main
。 - 团队成员进行代码审查,通过后合并。
- 在 GitHub 上创建 Pull Request,请求将
GitLab Flow
GitLab Flow 是 GitLab 提出的灵活工作流程,结合了 Git Flow 和 GitHub Flow 的优点,适用于各种类型的项目。
主要分支
main
(或master
):存储生产环境的稳定版本。develop
:存储最新的开发代码(可选,根据具体项目需求)。
操作流程
GitLab Flow 提供了三种常见的分支策略:
-
环境分支(Environment Branches):
production
、staging
、development
等分支对应不同的部署环境。
-
功能分支(Feature Branches):
- 从
main
或develop
分支创建,用于开发新功能。
- 从
-
发布分支(Release Branches)(可选):
- 从
develop
分支创建,用于准备新版本的发布。
- 从
示例操作流程
-
创建功能分支:
git checkout develop git checkout -b feature/feature-name
-
合并功能分支:
git checkout develop git merge feature/feature-name
-
创建发布分支:
git checkout develop git checkout -b release/x.y.z
-
合并发布分支:
git checkout main git merge release/x.y.z git checkout develop git merge release/x.y.z
-
部署到不同环境:
- 将代码从
main
分支推送到production
分支,部署到生产环境。
git checkout main git pull origin main git checkout -b production git push origin production
- 将代码从
选择合适的工作流程
- Git Flow:适用于较长发布周期、需要严格管理发布版本的项目。
- GitHub Flow:适用于持续部署、开发周期较短的项目。
- GitLab Flow:适用于各种类型的项目,提供更灵活的分支管理策略。
他们的区别
下面是一个表格,比较了 Git Flow、GitHub Flow 和 GitLab Flow 的主要特点和区别:
特点/流程 | Git Flow | GitHub Flow | GitLab Flow |
---|---|---|---|
主要分支 | main (或 master ),develop | main (或 master ) | main (或 master ),develop (可选) |
功能分支 | 从 develop 创建,命名为 feature/xxx | 从 main 创建,自定义命名 | 从 main 或 develop 创建,命名为 feature/xxx |
发布分支 | 从 develop 创建,命名为 release/x.y.z | 无 | 从 develop 创建,命名为 release/x.y.z |
热修复分支 | 从 main 创建,命名为 hotfix/x.y.z | 无 | 从 main 创建,命名为 hotfix/x.y.z |
主要特点 | 适用于发布周期较长的项目,有严格的分支管理 | 适用于持续部署,简单直接 | 灵活,适用于各种项目,结合了 Git Flow 和 GitHub Flow 的优点 |
合并策略 | 功能分支合并到 develop ,发布分支合并到 main 和 develop ,热修复分支合并到 main 和 develop | 功能分支合并到 main ,通过 Pull Request 进行代码审查 | 功能分支合并到 develop 或 main ,发布分支合并到 main 和 develop |
部署策略 | 发布分支合并到 main 后部署 | 直接从 main 部署 | 可以有多个环境分支,如 production ,staging ,development |
适用场景 | 需要严格版本控制和管理的项目 | 开发周期短、需要频繁部署的项目 | 灵活多变的项目,可以适应各种需求 |
简要说明:
-
Git Flow:
- 适用于发布周期较长的项目,有严格的分支管理。
- 主要分支:
main
和develop
。 - 功能分支、发布分支、热修复分支。
-
GitHub Flow:
- 适用于持续部署,开发周期短的项目。
- 只有一个长期存在的主分支
main
。 - 功能分支从
main
创建,通过 Pull Request 进行代码审查和合并。
-
GitLab Flow:
- 结合了 Git Flow 和 GitHub Flow 的优点,灵活多变。
- 主要分支:
main
和develop
(可选)。 - 功能分支、发布分支、热修复分支,支持多个环境分支。
根据你的项目需求和团队工作习惯,可以选择最合适的分支管理策略。
相关文章:
如何分清楚常见的 Git 分支管理策略Git Flow、GitHub Flow 和 GitLab Flow
Git Flow、GitHub Flow 和 GitLab Flow 是几种常见的 Git 分支管理策略,它们帮助开发团队更高效地管理代码库和协同开发。 Git Flow Git Flow 是一种功能强大的分支管理模型,由 Vincent Driessen 提出,适用于发布周期较长、需要严格管理发布…...
Java垃圾收集器选择与优化策略
1.垃圾收集算法有哪些,可以聊一下吗? 如何确定一个对象是垃圾? 要想进行垃圾回收,得先知道什么样的对象是垃圾。 1.1 引用计数法 对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾。如果一个对象没有任何指针对其引用,它就是垃圾。 弊端:如果…...
django命令
Django 的命令行工具 django-admin(或 manage.py 中的 manage 函数)提供了一系列的命令,用于执行各种管理任务。 1. check: 检查项目的 full 路径,确保没有错误配置。 2. compilemessages: 编译 .po 文件中的翻译,生…...
23种设计模式之命令模式
命令模式 1、定义 命令模式:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作 2、命令模式结构 Command(抽象命令类):一般是…...
esp8266模块(1)
1WiFi的两种模式 1AP模式:ESP8266模块充当一个无线接入点,类似于一个路由器。(如手机开热点) 2Station模式(sta):ESP8266模块作为客户端连接到一个现有的WiFi网络。(如路由器&#…...
LDR6020:重塑iPad一体式有线键盘体验的创新力量
在移动办公与娱乐日益融合的时代,iPad凭借其强大的性能和便携性,成为了众多用户不可或缺的生产力工具。然而,为了进一步提升iPad的使用体验,一款高效、便捷的键盘成为了不可或缺的配件。今天,我们要介绍的,…...
ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段
ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段 文章目录 ArcGIS Pro SDK (九)几何 9 立方贝塞尔线段1 构建立方贝塞尔线段 - 从坐标2 构建立方贝塞尔线段 - 从地图点3 构造立方贝塞尔线段 - 从映射点的枚举4 立方贝塞尔线段生成器属性…...
c语言之 *指针与 **指针
*n 一级指针: &nn*n自身地址指向地址指向地址值 **s 二级指针: &ss*s**s自身地址一级指针地址一级指针指向地址一级指针指向地址值 CHILD *walk, *next, *tmp_child, **scan;next walk->next scan &walk->next; while (*scan) { …...
navicat 导入 sql 遇到的问题
错误1 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS tmp_tables; CREATE TABLE at line 1 [Err] &…...
压缩pdf大小的方法 指定大小软件且清晰
在数字化时代,pdf文件因其良好的兼容性和稳定性,已成为文档分享的主流格式。然而,高版本的pdf文件往往体积较大,传输和存储都相对困难。本文将为您详细介绍几种简单有效的方法,帮助您减小pdf文件的大小,让您…...
PHP上门按摩专业版防东郊到家系统源码小程序
💆♀️【尊享级体验】上门按摩专业版,告别东郊到家,解锁全新放松秘籍!🏠✨ 🔥【开篇安利,告别传统束缚】🔥 亲们,是不是厌倦了忙碌生活中的疲惫感?想要享…...
从微软发iPhone,聊聊企业设备管理
今天讲个上周的旧闻,微软给员工免费发iPhone。其实上周就有很多朋友私信问我,在知乎上邀请我回答相关话题,今天就抽点时间和大家一起聊聊这事。我不想讨论太多新闻本身,而是更想聊聊事件的主要原因——微软企业设备管理࿰…...
抖音/腾讯/百度ocpm深度回传如何操作?广告投放双出价的投放技巧?
要实现抖音、腾讯和百度的OCPM(Optimized Cost Per Mille)深度回传,可以通过借助第三方平台,例如(转化宝)实现广告数据精准回传,如此之外,在广告投放过程中还需要注重这些方面。 转化…...
DPKG(Debian / Ubuntu包管理工具)的深入探索与使用
DPKG(Debian / Ubuntu包管理工具)的深入探索与使用 在Linux世界中,特别是基于Debian及其衍生系统(如Ubuntu)的环境中,dpkg是管理Debian软件包(.deb文件)的核心工具。它不仅用于安装…...
Godot学习笔记2——GDScript变量与函数
Godot使用的编程语言是GDS,语法上与python有些类似。 一、代码编写界面 在新建的Godot项目中,点击“创建根节点”中的“其他节点”,选择“Node”。 点击场景界面右上角的绿色加号,路径处重新命名,模板选择“Empty”&…...
golang开发环境搭建与踩坑记录
文章目录 一、安装下载1、go环境2、ide 二、基本使用1、运行2、结构体与方法函数指针3、闭包4、指针5、map6、接口7、异常 三、包管理1、go mod语法2、项目下载所有依赖 一、安装下载 1、go环境 下载地址:https://go.dev/dl/ 或者:https://golang.goog…...
单机、集群、分布式服务器比较:
1. 单机服务器的瓶颈: 单机服务器:一台服务器独立运行一个工程所需的全部的业务模块 受限于服务器硬件资源,所承受用户并发量受限,32位linux操作系统最大并发量为两万任一模块的变动和修改,都会导致整个项目代码重新编…...
NoSql选择题解
1. (单选题)以下不属于ACID原则的是( )。 A. 相对性 B. 原子性 C. 隔离性 D. 持久性 正确答案: A :相对性; 2. (单选题)以下NoSQL数据库中,哪个是内存数据库()。 A. Bigtable B. Redis C. Hbase D. MongoDB 正确答案: B :Redis; …...
国内新能源汽车芯片自给,承认差距,任重道远
【科技明说 | 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示,中国拥有最大的新能源车产能,芯片用量也是越来越多。但是芯片的自给率目前不到10%,是结构性的短缺。 中国拥有最大新能源车产能&#…...
反爬虫策略中的IP地址轮换如何实现?挑战与对策
当今互联网时代,各类网站、网络平台背后隐藏着大量数据,广告数据收集、市场数据收集都需要依托爬虫技术,但很多网站通过反爬虫技术限制或屏蔽爬虫的访问,这给数据收集带来不小的挑战。 为了规避这些反爬虫策略,开发人…...
AUTOSAR CAN网络Bus Load Reduction Mechanism
1. Bus Load Reduction Mechanism有什么用 根据AUTOSAR CanNM规范,NM PDU的发送周期由参数CanNmMsgCycleTime决定,并且属于同一个网络簇的所有NM节点该参数必须相同。如果不采取任何行动,这将导致总线负载问题,这取决于网络管理集群成员的数量。即使通过节点特定的定时参数…...
【LeetCode力扣】007. 整数反转(Python)
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1: 输入…...
大数据之写入Doris数据问题
1. 解决Key columns should be a ordered prefix of the schema. KeyColumns[1] (starts from zero) is xxx, but 背景 create table if not exists XXX ( fathercorp varchar(50), id decimalv3(38,0) ) ENGINEOLAP UNIQUE KEY(id) COMMENT xxxx DISTRIBUTED BY HASH(id) BUC…...
HTML+echarts.js实现的炫酷金色风格可视化组件
模板下载地址: 炫酷金色风格可视化组件 (bootstrapmb.com)https://www.bootstrapmb.com/item/14888 一款炫酷金色风格可视化组件,统计图表使用Echarts.js,整体风格采用金黄色看起来很大气,设计是通用型的,可以用作任…...
【BUG】已解决: KeyboardInterrupt
已解决: KeyboardInterrupt 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 擅长.net、C…...
iOS——MRC与ARC以及自动释放池深入底层学习
MRC与ARC再回顾 在前面,我们简单学了MRC与ARC。MRC指手动内存管理,需要开发者使用retain、release等手动管理对象的引用计数,确保对象在必要时被释放。ARC指自动内存管理,由编译器自动管理对象的引用计数,开发者不需要…...
OpenCV教程:cv2如何把两张图片的大小,设置成相同的宽高
-------------OpenCV教程集合------------- Python教程99:一起来初识OpenCV(一个跨平台的计算机视觉库) OpenCV教程01:图像的操作(读取显示保存属性获取和修改像素值) OpenCV教程02:图像处理…...
web前端 Vue 框架面试120题(五)
面试题 81 . 请简述Vue更新数组时触发视图更新的方法? 参考回答: push();pop();shift();unshift();splice();sort();reverse()面试题 82 . 简述如何使用Vue-router实现懒加载的方式…...
CV12_ONNX转RKNN模型(谛听盒子)
暂时简单整理一下: 1.在边缘设备上配置相关环境。 2.配置完成后,获取模型中间的输入输出结果,保存为npy格式。 3.将onnx格式的模型,以及中间输入输出文件传送到边缘设备上。 4.编写一个python文件用于转换模型格式,…...
k8s集群创建devops项目一直等待状态,没有发现host
问题分析: kubesphere在帮我们自动化创建一些智能自动化的额时候难免会发生一些小错误,devops-jenkins是一个部署也会生成一个容器组即pod,容器组的容器服务端口是 targetPort,容器组对外暴露的端口是port,拿devops-c…...
南充网站设计/网站推广途径和要点
举例: 340%60 40 ,怎么来的? 340 - 60*5 40 340 - (比340小的那个可以被60整除的正整数) . 40 如果是负数: -340%60 -340 - (比-340小的那个可以被60整除的负整数) -340 - (-360) 20 如图:也可以换个思路想, -340…...
做视频素材哪个网站好/百度网站关键词排名助手
作用 tf.concat( values, axis, name‘concat’) 输入张量的数据沿axis 维度合并 举例使用 (1)沿着0维度合并 t1 [[1, 2, 3], [4, 5, 6]] t2 [[7, 8, 9], [10, 11, 12]] tf.concat([t1, t2], 0)<tf.Tensor: shape(4, 3), dtypeint32, numpy arra…...
哪个网站可以做围棋作业/广告投放平台都有哪些
今日所做: 尝试连接数据库 明日所做: 数据库信息修改 遇到的困难: 数据库连接有点复杂,经过队友跟网上查询终于完成连接,中途数据库连接中,数据库sqllite不太明白,导致很长时间在上面耽搁&#…...
网络工作室是什么行业/北京seo分析
文章简介:由浙江卫视和创客星球联合出品、葡萄积木冠名播出的详情>>作者:飞鸟2020-10-28 14:42整理铁甲犀牛多42级后就可以进化了,可以进化为铁详情>>阅读: 8日期: 2020-10-28原标题:铁甲威虫之骑刃王,龙尊…...
网站建设基本范例/深圳seo优化seo优化
记得在年初MVP 峰会上Luis Cabrera 在一次WPF的Session 中向MVP们介绍了一些Surface 2.0 的相关工作,以及Surface 2.0 设备的测试视频,由于NDA原因没有更多的透露详细信息。 如Luis Cabrera 几天前在Blog 里所说“Next week: The Microsoft Surface SDK …...
wordpress 4.4.2 中文/网站关键词排名外包
视频简介:该视频介绍emWin底层驱动接口。 源视频包下载地址:链接:http://pan.baidu.com/s/1nvPpC2d 密码:cbb7银杏科技优酷视频发布区:http://i.youku.com/gingko8...