当前位置: 首页 > news >正文

如何分清楚常见的 Git 分支管理策略Git Flow、GitHub Flow 和 GitLab Flow

Git Flow、GitHub Flow 和 GitLab Flow 是几种常见的 Git 分支管理策略,它们帮助开发团队更高效地管理代码库和协同开发。

Git Flow

Git Flow 是一种功能强大的分支管理模型,由 Vincent Driessen 提出,适用于发布周期较长、需要严格管理发布版本的项目。

主要分支
  1. main(或 master):存储生产环境的稳定版本。
  2. develop:存储最新的开发代码,集成了所有功能分支的代码。
辅助分支
  1. 功能分支(Feature Branches)

    • develop 分支创建,用于开发新功能。
    • 命名规范:feature/feature-name
    • 开发完成后合并回 develop
  2. 发布分支(Release Branches)

    • develop 分支创建,用于准备新版本的发布。
    • 命名规范:release/x.y.z
    • 在此分支上进行最后的测试和修复,完成后合并到 maindevelop
  3. 热修复分支(Hotfix Branches)

    • main 分支创建,用于紧急修复生产环境中的问题。
    • 命名规范:hotfix/x.y.z
    • 修复完成后合并到 maindevelop
操作流程
  1. 创建功能分支

    git checkout develop
    git checkout -b feature/feature-name
    
  2. 合并功能分支

    git checkout develop
    git merge feature/feature-name
    
  3. 创建发布分支

    git checkout develop
    git checkout -b release/x.y.z
    
  4. 合并发布分支

    git checkout main
    git merge release/x.y.z
    git checkout develop
    git merge release/x.y.z
    
  5. 创建热修复分支

    git checkout main
    git checkout -b hotfix/x.y.z
    
  6. 合并热修复分支

    git checkout main
    git merge hotfix/x.y.z
    git checkout develop
    git merge hotfix/x.y.z
    

GitHub Flow

GitHub Flow 是 GitHub 提出的简单工作流程,适用于持续部署和较短的开发周期。它只有一个长期存在的主分支。

主要分支
  1. main(或 master):存储生产环境的稳定版本。
操作流程
  1. 创建功能分支

    • main 分支创建,用于开发新功能。
    • 命名规范:自定义(如 feature/feature-name
  2. 推送功能分支

    • 定期推送功能分支到远程仓库,便于备份和团队协作。
    git push origin feature/feature-name
    
  3. 创建 Pull Request

    • 在 GitHub 上创建 Pull Request,请求将功能分支合并到 main
  4. 代码审查和合并

    • 团队成员进行代码审查,通过后合并 Pull Request,将功能分支合并到 main
  5. 部署生产环境

    • 合并完成后,自动或手动部署到生产环境。
示例操作流程
  1. 创建功能分支

    git checkout main
    git pull origin main
    git checkout -b feature/feature-name
    
  2. 推送功能分支

    git add .
    git commit -m "Add new feature"
    git push origin feature/feature-name
    
  3. 创建 Pull Request 并合并

    • 在 GitHub 上创建 Pull Request,请求将 feature/feature-name 分支合并到 main
    • 团队成员进行代码审查,通过后合并。

GitLab Flow

GitLab Flow 是 GitLab 提出的灵活工作流程,结合了 Git Flow 和 GitHub Flow 的优点,适用于各种类型的项目。

主要分支
  1. main(或 master):存储生产环境的稳定版本。
  2. develop:存储最新的开发代码(可选,根据具体项目需求)。
操作流程

GitLab Flow 提供了三种常见的分支策略:

  1. 环境分支(Environment Branches)

    • productionstagingdevelopment 等分支对应不同的部署环境。
  2. 功能分支(Feature Branches)

    • maindevelop 分支创建,用于开发新功能。
  3. 发布分支(Release Branches)(可选):

    • develop 分支创建,用于准备新版本的发布。
示例操作流程
  1. 创建功能分支

    git checkout develop
    git checkout -b feature/feature-name
    
  2. 合并功能分支

    git checkout develop
    git merge feature/feature-name
    
  3. 创建发布分支

    git checkout develop
    git checkout -b release/x.y.z
    
  4. 合并发布分支

    git checkout main
    git merge release/x.y.z
    git checkout develop
    git merge release/x.y.z
    
  5. 部署到不同环境

    • 将代码从 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 FlowGitHub FlowGitLab Flow
主要分支main(或 master),developmain(或 mastermain(或 master),develop(可选)
功能分支develop 创建,命名为 feature/xxxmain 创建,自定义命名maindevelop 创建,命名为 feature/xxx
发布分支develop 创建,命名为 release/x.y.zdevelop 创建,命名为 release/x.y.z
热修复分支main 创建,命名为 hotfix/x.y.zmain 创建,命名为 hotfix/x.y.z
主要特点适用于发布周期较长的项目,有严格的分支管理适用于持续部署,简单直接灵活,适用于各种项目,结合了 Git Flow 和 GitHub Flow 的优点
合并策略功能分支合并到 develop,发布分支合并到 maindevelop,热修复分支合并到 maindevelop功能分支合并到 main,通过 Pull Request 进行代码审查功能分支合并到 developmain,发布分支合并到 maindevelop
部署策略发布分支合并到 main 后部署直接从 main 部署可以有多个环境分支,如 productionstagingdevelopment
适用场景需要严格版本控制和管理的项目开发周期短、需要频繁部署的项目灵活多变的项目,可以适应各种需求

简要说明:

  1. Git Flow

    • 适用于发布周期较长的项目,有严格的分支管理。
    • 主要分支:maindevelop
    • 功能分支、发布分支、热修复分支。
  2. GitHub Flow

    • 适用于持续部署,开发周期短的项目。
    • 只有一个长期存在的主分支 main
    • 功能分支从 main 创建,通过 Pull Request 进行代码审查和合并。
  3. GitLab Flow

    • 结合了 Git Flow 和 GitHub Flow 的优点,灵活多变。
    • 主要分支:maindevelop(可选)。
    • 功能分支、发布分支、热修复分支,支持多个环境分支。

根据你的项目需求和团队工作习惯,可以选择最合适的分支管理策略。

相关文章:

如何分清楚常见的 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。其实上周就有很多朋友私信问我,在知乎上邀请我回答相关话题,今天就抽点时间和大家一起聊聊这事。我不想讨论太多新闻本身,而是更想聊聊事件的主要原因——微软企业设备管理&#xff0…...

抖音/腾讯/百度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地址轮换如何实现?挑战与对策

当今互联网时代,各类网站、网络平台背后隐藏着大量数据,广告数据收集、市场数据收集都需要依托爬虫技术,但很多网站通过反爬虫技术限制或屏蔽爬虫的访问,这给数据收集带来不小的挑战。 为了规避这些反爬虫策略,开发人…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...

Android写一个捕获全局异常的工具类

项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...