Gitflow:一种依据 Git 构建的分支管理工作流程模式

news2024/11/15 14:05:01

文章目录

    • 前言
    • Gitflow 背景
    • Gitflow 中的分支模型
    • Gitflow 的版本号管理
    • 简单模拟 Gitflow 工作流

前言

Gitflow 工作流是一种版本控制流程,主要适用于较大规模的团队。这个流程在团队中进行合作时可以避免冲突,并能快速地完成项目,因此在很多软件开发团队中都被广泛应用。通过使用 Gitflow 工作流,我们可以更好地管理代码的修改、版本的发布和协作,从而提高软件开发的效率和质量。在本篇文章中,我们将模拟一次典型的 Gitflow 工作流流程,让大家更好地理解这个工作流的工作流程和要点。

Gitflow 背景

“Gitflow 工作流程模型”的理念源自 Vincent Driessen(文森特·德里森)的深度研究与实践经验。在参与团队项目开发时,引入了 Gitflow 开发模型,之后又于2010年1月5日在一篇博客《A successful Git branching model》中详细阐述了该模型的理论基础及具体执行方式,并通过图表和实例进行解释,使读者能够更清晰、直观地理解并应用该模型。

这篇博客文章在软件开发领域引起了极大反响,被广泛传播和引用,为开发人员提供了一套结构严谨且可扩展的分支管理策略,从而提高工作效率和代码质量。如今,它已经成为使用 Git 进行团队协作和版本控制的开发者首要参照模型。

博客中的工作模型图如下:

3-01

Gitflow 中的分支模型

在 Gitflow 工作流程中,依据分支的寿命周期,我们可以将它们划分为长期分支短期分支

长期分支主要用于综合及管理诸多短期分支的代码,以此确保代码库的整体框架和稳定性,同时协助团队更加高效地管理和追踪各分支的进展及状态。通常,长期分支主要包括主分支(Main)和开发分支(Develop)这两部分:

  • 主分支(Main):该分支主要用于储存稳定版发布版本的代码,这是一个永不删除的分支,只会接受由 ReleaseHotfix 分支合并的代码。同时,当 Release 分支和 Hotfix分支被合并回 Main 分支后,我们会添加一个标签,以标记该版本的发布日期及版本序号等重要信息。过为每个版本打上标签,可以轻松地跟踪和回滚到特定的版本。
  • 开发分支(Develop):开发分支基于主分支建立。该分支包含了当前正进行的所有功能开发和错误修复工作,这也是一个持久性的分支。Develop 分支一般会接受来自 Feature 分支、 Release 分支和 Hotfix 分支的代码合并。

至于短期分支,主要是在项目开发历程中用于临时任务的分支,其生命周期相对较短,如:

  • 功能分支(Feature):功能分支主要用于开发新功能的开发。是从 Develop 分支创建,每个新功能都应在一个单独的 Feature 分支上进行开发,一旦功能开发完毕并通过测试,功能分支便会被合并回 Develop 分支。

  • 补丁分支(Hotfix):补丁分支则主要用于修复线上问题的分支。若在主分支 Main 上发现问题需要修复,那么我们会从 Main 分支上创建一个 Hotfix 分支进行修复,修复完成后,Hotfix 分支将被合并回 Main 分支和 Develop 分支,以保障修复过的错误能在当前和未来的版本中得以修正。

  • 发布分支(Release):发布分支用于准备发布一个稳定版的代码,在 Release 分支上进行最后的测试和修复,以确保代码质量和稳定性。一旦 Release 分支准备好发布,它将被合并回 Develop 分支和 Main 分支,以便在发布稳定版时使用。

Gitflow 的版本号管理

版本号的目的是提供一种明确和一致的方式来标识软件版本,使开发者和用户可以更清晰地了解版本的变化和影响,有助于管理依赖关系和追踪版本的演进。

目前常见的版本号格式定义是语义化版本规范,即所谓的"语义化版本控制(Semantic Versioning)",也叫作"SemVer"标准。它是一种用于标识和管理软件版本的规范,被广泛应用于软件开发。"SemVer"详细地界定了版本号的格式、具体所代表的含义以及整体更新原则,其根本宗旨就是为了让所有人都能以一致、确定的方式去描述和评估每次软件变动所带来的影响大小。

按照语义化版本控制的规范,一个版本号由三个部分组成:主版本号、次版本号和修订号,形式为 MAJOR.MINOR.PATCH ,每个部分都是非负整数,起始值为 0:

  • 主版本号(MAJOR 「大版本」):当进行不兼容的 API 变动或重大改进时增加。如果新版本与旧版本不兼容,用户可能需要修改代码才能适配新版本。
  • 次版本号(MINOR 「小版本」):当添加功能或进行向后兼容的改进时增加。新功能的引入不会破坏现有的 API,但用户可以利用新功能进行开发。
  • 修订号(PATCH 「修补版本」):用于修复 Bug 或进行其他小的改动,不会引入新的功能或破坏现有的 API。

此外,语义化版本控制还支持在版本号后面添加预发布标识和构建号。

  • 预发布标识(Pre-release):用于标识测试阶段的预发布版本,例如 alpha、beta、rc 等。预发布版本在正式发布之前进行测试和反馈。
  • 构建号(Build Metadata):用于标识每个构建的唯一编号,通常用于区分不同构建的细微差异。

例如对于版本号 v1.0.0,它代表着首个正式版本的发布。在这个版本中,可以期待有稳定的功能和已经修复的错误,但不会有任何新的重大功能引入。这个版本标记着软件的第一个里程碑,可以作为后续版本的基础。

注:版本号的具体规则和含义可能因团队或项目而异。因此在实际使用中,可以根据项目的需求和团队的约定来解释和定义版本号的含义。

简单模拟 Gitflow 工作流

假设我们有一个新的项目,需要使用 Gitflow 工作流进行代码管理和协作开发,Gitflow 工作流过程如下:

  1. 首先,在项目的开发阶段,我们需要创建一个空的 Git 仓库,并初始化为一个新的项目;从空仓库创建一个 Main 主分支,用于存储稳定版本的代码,部署生产环境:

    无标题-2024-01-09-2029

  2. 然后,基于 Main 主分支创建一个 Develop 开发分支,后续所有的开发工作都将在这个分支上进行:

    无标题-2024-01-09-2029

  3. 根据团队的需求,为开发人员分配两个开发任务:

    • 用户登录:用于允许用户在网站进行登录。此功能将作为 1.0 版本的一部分上线。
    • 在线支付:用于在网站中实现在线支付功能。此功能将作为 2.0 版本的一部分上线。

    明确功能后,基于 Develop 开发分支创建对应的 Feature 功能分支:

    无标题-2024-01-09-2029

  4. 当用户登录功能在 Feature 功能分支上开发完成后,将 Feature 功能分支合并到 Develop 开发分支:

    无标题-2024-01-09-2029

  5. 1.0 版本所需的用户登录功能开发完毕,此时 1.0 版本的功能为可发布状态,我们可以从 Develop 开发分支创建一个新的 Release 发布分支。在该分支上进行最终测试和缺陷修复:

    无标题-2024-01-09-2029

  6. 在完成测试和修复后,将 Release 发布分支合并回 Main 主分支和 Develop 开发分支。同时,在 Main 主分支上打上标签Tag,以便追踪版本:

    无标题-2024-01-09-2029

  7. 如果在生产环境中发现了紧急问题,可以直接从 Main 主分支上创建一个 Hotfix 补丁分支,并进行修复:

    无标题-2024-01-09-2029

  8. 当问题成功解决后,将 Hotfix 补丁分支同步回 Main 主分支和 Develop 开发分支,以确保修复过的错误能在当前和未来的版本中得以修复。同时,在 Main 主分支上打上新的标签Tag

    无标题-2024-01-09-2029

  9. 此时,在线支付功能开发完毕,将 Feature 功能分支合并回 Develop 开发分支:

    无标题-2024-01-09-2029

  10. 创建 Realse 发布分支准备发布 2.0 版本:

    无标题-2024-01-09-2029

  11. 合并 Main 主分支,为 Main 主分支打上标签Tag 2.0.0,同时同步 Develop 开发分支:

    无标题-2024-01-09-2029

  12. 团队成员根据需要继续创建新的功能分支、发布分支和补丁分支,推进项目的开发和维护工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1469074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity(第三部)新手绘制地形

1、创建地形 游戏对象3d对象地形 2、功能 1、 红框内按键为创建相邻地形、点击后相近地形会呈现高亮框、点击高亮区域可以快速创建地形 每块地形面积是1km*1km 2、第二个按钮是修改地形 下面的选择是修改类型 选项含义描述Raise or Lower Terrain升高或降低地形单击左键可…

分布式ID开源框架简单介绍

UidGenerator(百度) 一款基于 Snowflake(雪花算法)的唯一 ID 生成器。 UidGenerator 对 Snowflake(雪花算法)进行了改进,生成的唯一 ID 组成如下: sign(1bit):符号位(标识正负),始终为 0,代表生成的 ID…

STM32 TCP实现OTA

芯片:stm32f407 开发平台:stm32cubeide 上位机开发平台:visual studio 2017 1. FLASH分配 将flash划分为四个部分: bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

Qt Android sdk配置报错解决

使用的jdk8总是失败,报错command tools run以及platform sdk等问题。后来主要是设置jdk版本为17,就配置生效了。Android sdk路径可以选用Android Studio自带的,但是也要在Qt中点击“设置SDK”按钮做必要的下载更新等。 编译器这里会自动检测到…

Java设计模式 | 简介

设计模式的重要性: 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 这个术语由埃里希 伽玛(Erich Gamma)等人在1…

每日一题——LeetCode1512.好数对的数目

方法一 暴力循环 var numIdenticalPairs function(nums) {let ans 0;for (let i 0; i < nums.length; i) {for (let j i 1; j < nums.length; j) {if (nums[i] nums[j]) {ans;}}}return ans; }; 消耗时间和内存情况&#xff1a; 方法二&#xff1a;组合计数 var …

【GPTs分享】GPTs分享之consensus

大家好&#xff0c;元宵节快乐&#xff0c;今天给大家分享的GPTs是consensus。consensu号称无需关键字即可搜索2亿文章&#xff0c;而且给出的链接绝对保真&#xff0c;不再是胡编乱造的&#xff0c;而且能够根据指定主题辅助编写论文或者博客。 简介 consensus使用chat.cons…

GPT Pilot - 编写 95% 代码的开发工具!

在这篇博客介绍了GPT-pilot的研发细节&#xff0c;原作者将探讨GPT Pilot的技术内核 —— 一款基于GPT-4编写的开发工具&#xff0c;可以生成生产使用代码的应用。 你有没有想过&#xff0c;95%的应用代码&#xff0c;可以由AI编写&#xff0c;就像《钢铁侠》里的贾维斯一样&a…

C# 中 SQLite 查询数据库表中字段(列)是否存在的方法

查询SQLite数据库表中字段&#xff08;列&#xff09;存在的方法 使用SQL语句为&#xff1a;PRAGMA table_info([DeviceTrees]); 其中“DeviceTrees”为数据库表的名称。 使用SQLite Expert Professional工具&#xff0c;查看该语句是否起作用&#xff0c;这里使用的版本是…

基于Java SSM框架实现问卷调查系统项目【项目源码】计算机毕业设计

基于java的SSM框架实现问卷调查系统演示 B/S结构 BROWSER/SERVER程序架构方式是使用电脑中安装的各种浏览器来进行访问和使用的&#xff0c;相比C/S的程序结构不需要进行程序的安装就可以直接使用。BROWSER/SERVER架构的运行方式是在远程的服务器上进行安装一个&#xff0c;然…

绿盾限制终端网络访问权限会恢复后,别的网站访问正常就是无法访问钉钉网站和下载东西

环境&#xff1a; Win10 专业版 钉钉7.5.5 绿盾7.0 问题描述&#xff1a; 绿盾限制终端网络访问权限会恢复后&#xff0c;别的网站访问正常就是无法访问钉钉网站和下载东西 解决方案&#xff1a; 排查方法 1.重置浏览器或者更换浏览器测试&#xff08;未解决&#xff09…

linux卸载mysql8重装5

目录 背景操作卸载重装配置启动 背景 在linux&#xff08;阿里云ECS&#xff09;安装部署Hive时初始化Hive元数据库&#xff0c;遇到报错前一天两三小时没解决&#xff0c;问题定位为mysql&#xff0c;次日打算重装 操作 卸载 停止 MySQL 服务 systemctl stop mysql yum卸载…

Map集合特点、遍历方式、TreeMap排序及Collections和Arrays

目录 ​编辑 一、集合框架 二、 Map集合 特点 遍历方式 HashMap与Hashtable的区别 TreeMap Collections Arrays 一、集合框架 二、 Map集合 Map集合是一种键值对的集合&#xff0c;其中每个键对应一个值。在Java中&#xff0c;Map接口定义了一种将键映射到值的数据结…

前后端分离vue.js+nodejs学生考勤请假系统 _fbo36

此系统设计主要采用的是nodejs语言来进行开发&#xff0c;采用vue框架技术&#xff0c;框架分为三层&#xff0c;分别是控制层Controller&#xff0c;业务处理层Service&#xff0c;持久层dao&#xff0c;能够采用多层次管理开发&#xff0c;对于各个模块设计制作有一定的安全性…

网络原理——HTTP

1. 什么是HTTP协议 HTTP是应用层的协议。Java最主要的应用场景是做网站&#xff0c;而网站由 后端&#xff08;HTTP服务器&#xff09; 和 前端&#xff08;浏览器&#xff09;组成&#xff0c;HTTP协议就是负责这里后端和前端的数据交互。 HTTP3.0 之前在传输层是通过 TCP传…

什么是智慧公厕?如何打造智慧公厕?

近年来&#xff0c;随着城市信息化建设的不断推进&#xff0c;智慧公厕的建设成为我国城市发展的重要一环。以智能化管理为核心&#xff0c;将公厕纳入互联互通的“智慧城市”大数据平台&#xff0c;使得公厕管理更加高效便捷&#xff0c;为市民提供更好的公共服务。本文将以智…

git最全总结

文章目录 Git 分布式版本控制工具内容1. 前言1.1 什么是Git1.2 使用Git能做什么 2. Git概述2.1 Git简介2.2 Git下载与安装 3. Git代码托管服务3.1 常用的Git代码托管服务3.2 码云代码托管服务3.2.1 注册码云账号3.2.2 登录码云3.2.3 创建远程仓库3.2.4 邀请其他用户成为仓库成员…

excel标记文本中的关键词加红加粗

任务&#xff1a; 有这么一张表&#xff0c;关键词为 word&#xff0c;文本内容为 text&#xff0c;现在想把 text 中的 word 标红加粗&#xff0c;如果数据量少&#xff0c;文本段手动标还可以&#xff0c;多起来就不太方便了 代码&#xff1a; import pandas as pd import x…

8-pytorch-损失函数与反向传播

b站小土堆pytorch教程学习笔记 根据loss更新模型参数 1.计算实际输出与目标之间的差距 2.为我们更新输出提供一定的依据&#xff08;反向传播&#xff09; 1 MSEloss import torch from torch.nn import L1Loss from torch import nninputstorch.tensor([1,2,3],dtypetorch.fl…

WEB相关工具(wget、curl、ab)

目录 一、wget 1、wget基本语法 2、wget帮助的更多选项 二、curl 1、curl基本语法 2、curl命令基本用法 2.1 curl伪装 2.2 提取状态码 2.3 提取本地IP地址 2.4 提取远端服务器IP地址 2.5 提取本地端口 2.6 提取远端服务器端口 三、压力测试工具 1、常用的httpd压…