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

分支管理方案

背景

在工作的过程中,git管理方式已经成为每一个项目开发的基础,每个项目的开发都离不开git管理方式。

但是在使用的过程中,由于对git分支管理方案的了解不深,导致会出现分支管理不明确的情况。

本文主要是做科普作用,看看主流的分支管理方式以及分析目前DumuTools上分析管理方式的不合理之处。

基础知识概述

在Git分支管理中,主要可以分为以下两类分支:

  • 主要分支

    • master(主分支)

    • develop(开发功能分支)

  • 支线分支

    • feature branch (功能分支)

    • release branch (预发布分支)

    • hotfix branch (热修复分支)

在开发的过程中,master分支就类似于一棵树的主干,而其他分支就是在这棵树上的主干所分出来的分支:

 

流程图

为什么需要一个合理的分支管理方案,我们可以举个例子来进行论证。

分支管理的Bad Case

情景再现:

首先,PM发来需求,有个项目要开始了,版本号为V1.0。

此时我们开开心心收到需求后,开始切分支进行开发:

经过老老实实的开发,测试,我们的在绿色节点的位置完成了项目的开发,目前一切顺利。

此时,PM发来了新的需求,我们需要开始做V2.0了。

收到需求后,我们又认认真真、老老实实的在V1.0的基础上,拉出来了分支,开始了开发:

在顺利的开发、测试过后,我们也顺利的把V2.0给Release出来了,目前看来还是一切顺利。

接下来我们在PM的安排下,开始了V3.0的开发,还是老样子,拉分支开始开发:

在开发的V3.0过程中,PM传来消息:V1.0当中出现严重bug,需要修复,此时我们转向修复bug,在V1.0的基础上,拉出来BugFix分支,开始修复bug:

 

经过华丽的操作之后,我们完成了bug的修复,并且发布了V1.0的bug修复版本,此时我们发现bug的修复需要合并到其他的分支上,因此我们就需要:

通知所有的开发同学,把V1.0的最新commit合并一下,确保版本稳定。

然后大家就开始合并代码。

最后我们顺利的将改动全部合并到有影响的分支上,然后开始V3.0的开发。

 

经过开发,我们此时终于完成了V3.0的released发布,然后我们又开始了V4.0的开发:

此时又又传来消息,V2.0出现BUG,需要修复!然后我们又开始了V2.0的修复:

 

修复完毕后,我们又要告知其他同学:

通知所有的开发同学,把V2.0的最新commit合并一下,确保版本稳定。

一些敏锐的同学可能很快就能注意到,此时问题就出现了:

  1. 在此分支管理方案中,没有一个明显的、稳定的版本分支存在,每次开发同学在开发时需要时刻关注其他分支的稳定情况,若对自己的分支有影响,需要合并相关分支的代码。

  2. 若出现多个分支出现问题,需要每一个被影响的分支,合并所有的修改过的代码到自己的分支上,随着项目的进行,这种合并分支的代价会变得非常大

  3. 在开发过程中,若忘记合并某一分支的bug fix,非常容易导致不可预期的问题出现。

很明显在该种方案下,我们很难去确认哪一个分支的哪一个版本是最新的、稳定的版本

借此例子,我们来看看比较规范的分支管理方案是怎么样的。

规范的分支管理方案:

规范的分支管理方案如图:

 

在一个规范的分支管理方案中,有几个主要分支:

  1. Master分支:用来保存稳定的,已经released的版本代码

  2. Develop分支:用于开发,保存了开发过程中最新的代码

  3. Feature分支:用来分功能开发,开发完成后将代码合并到Develop分支

  4. hotfix分支:用来做Bug修复的分支

首先,在这种分支的管理下,我们上面的情景就会变成以下的开发形式:

情景再现:

PM告知开始开发V1.0版本:

 

(这里我们简化了Feature分支)

在开发完成后,我们将已经Released的代码、稳定的代码,合并到了Master分支。

然后开始了V2.0的开发:

 

同样的,我们开始了V3.0的开发:

 

PM也同样的告诉我们,V1.0版本有错误,请紧急修复!

我们就一样在Master的V1.0的基础上,拉出来fix分支,进行bug fix :

 

在Bug Fix完毕后,我们就把修复后的代码commit到Master上,确保Master上代码是最新的稳定的,然后我们就可以告知各位:

通知所有的开发同学,把Master的最新commit合并一下,确保版本稳定。

这样子的话能够带来几个好处:

  1. 避免了大家每次合并代码时,都需要去了解具体的,有修改的分支代码,只要check在Master上的分支代码有何差异即可

  2. 以Master作为最新的最稳定的版本基准,其他同事参与项目的时候,只要拉master的最新代码即可开始开发,无需再次确认最新的稳定代码在哪个分支,减少沟通成本。

  3. 每次想同步代码只需要关注Master代码即可,减少信息差。

以上标准的分支管理模式在人越多的时候越能够体现它的优点。

最后

分支管理方案只是一个约定俗成的观念,并没有绝对的对错之分。

当然能用比较适合的分支管理方案,那自然是再好不过。

相关文章:

分支管理方案

背景 在工作的过程中,git管理方式已经成为每一个项目开发的基础,每个项目的开发都离不开git管理方式。 但是在使用的过程中,由于对git分支管理方案的了解不深,导致会出现分支管理不明确的情况。 本文主要是做科普作用&#xff…...

Allegro走线时如何自动关闭其它网络飞线显示操作指导

Allegro走线时如何自动关闭其它网络飞线显示操作指导 在做PCB设计的时候,尤其是在评估布线的时候,走某一个网络的时候,希望其它网络的飞线会被自动关闭,方便评估。 Allegro支持这个功能,如下图 走线前 走线后 具体操作如下 点击Route...

Linux中常用命令汇总二

Linux中常用命令汇总一文章地址&#xff1a;https://blog.csdn.net/u011837804/article/details/1289952531、时间日期类基本语法date [OPTION]... [FORMAT]选项说明选项说明-d<时间字符串>显示指定的“时间字符串”表示的时间&#xff0c;而非当前时间-s<日期时间>…...

【数据结构】排序算法

目录 1.理解排序 1.1 排序的概念 1.2 排序的运用场景 1.3 常见的排序算法 2.插入排序算法 2.1 直接插入排序 2.2 希尔排序 3.选择排序算法 3.1 直接选择排序 3.2 堆排序 4.交换排序算法 4.1 冒泡排序 4.2 快速排序 4.2.1 hoare 法 4.2.2 挖坑法 4.2.3 前…...

[MySQL]初识数据库

哈喽&#xff0c;大家好&#xff01;我是保护小周ღ&#xff0c;本期为大家带来的是 MySQL 数据库&#xff0c;也是新的知识&#xff0c;首先我们会初步认识什么是数据库&#xff0c;什么是Mysql 数据库&#xff0c;以及我们 mysql 主要学什么&#xff0c;SQL 语句简单使用&…...

XXL-JOB分布式任务调度框架(二)-路由策略

文章目录1.引言2.任务详解2.1.执行器2.2.基础配置3.路由策略(第一个)-案例4.路由策略(最后一个)-案例5.轮询策略-案例7.分片广播任务1.引言 本篇文章承接上文《XXL-JOB分布式任务调度框架(一)-基础入门》&#xff0c;上一次和大家简单介绍了下 xxl-job 的由来以及使用方法&…...

Java_Maven:5. 把第三方 jar 包放入本地仓库或私服

目录 1 导入本地库 2 导入私服 3 参数说明 1 导入本地库 随便找一个 jar 包测试&#xff0c;可以先 CMD进入到 jar 包所在位置&#xff0c;运行 mvn install:install-file -DgroupIdcom.alibaba -DartifactIdfastjson -Dversion1.1.37-Dfile fastjson-1.1.37.jar -Dpackaging…...

【剑指offer】03~05. 数组中的数字(C# 实现)

文章目录前言03. 数组中重复的数字04. 二维数组中的查找05. 替换空格结语前言 &#x1f603; 大家好&#xff0c;我是writer桑&#xff0c;这是自己整理的 C# 做题记录&#xff0c;方便自己学习的同时分享出来&#xff0c;感谢支持。 03. 数组中重复的数字 题目描述&#xff1…...

Docker入门教程

文章目录一、Docker概述1. 什么是容器技术&#xff1f;2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…...

I2C总线应用测试程序

参考链接&#xff1a;I2c协议 Linux I2C应用编程开发 问题背景 在工作中需要测试I2C总线的传输稳定性&#xff0c;需写一个测试程序通过读写从设备寄存器的值来验证数据传输稳定性。 站在cpu的角度来看&#xff0c;操作I2C外设实际上就是通过控制cpu中挂载该I2C外设的I2C控制…...

主从表的建立

//表查--病害id--主从表public static DataSet QueryGetQlgjDispdbdisidTABbyqidZC(string qid, string bwname){string SQLStringZ "select * from tl_qlsoft_cql_qlcheck_qlstye_bw a, tl_qlsoft_cql_qlcheck_qlstye_bw_gj b where a.chbwidb.chbwid and a.qli…...

Exporter介绍与指标数据,规范说明(更新中)

1.exporter是什么广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target&#xff0c;如下所示&#xff0c;Prometheus通过轮询的方式定期从这些target中获取样本数据:2.exporter的来源与分类从Exporter的来源上来讲&am…...

[Android Studio] Android Studio Virtual Device虚拟机的功能试用

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f680;write…...

华为OD机试 - 检查数组中是否存在满足规则的数组组合1(Python)

检查数组中是否存在满足规则的数组组合1 题目 给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则: A = B + 2C 输入 第一行输出数组的元素个数 接下来一行输出所有数组元素,用空格隔开 输出 如果存在满足要求的数 在同一行里依次输出规则里A B C的取值,用…...

深圳“托育”放大招!政府出钱帮你带娃啦!

工作忙得不可开交 难以照料孩子的起居 这个带娃难题常常让双职工家庭 感觉到头疼不已 一边是工作&#xff0c;一边是孩子 父母都上班&#xff0c;宝宝谁来带&#xff1f; 未来这个问题将迎刃而解&#xff01; 因为政府要出钱帮你带娃啦&#xff01; 近日&#xff0c;深圳市总工…...

服务间调用方式 OpenFeign 的介绍和使用

文章目录前言1、 RestTemplate1.1、通用方法 exchange1.2、RestTemplate 和 OpenFeign 的区别2、RPC 和 HTTP2.1、RPC 是什么2.2、RPC 调用过程示意图2.3、HTTP 是什么2.4、HTTP 调用过程示意图2.5、对比3 、OpenFeign3.1 、OpenFeign 常用注解3.2 、案例前言 Feign 停更了&am…...

从开始测试到年薪40W,我的自动化测试艰辛历程

我希望我的故事能够激励现在的软件测试人&#xff0c;尤其是还坚持在做“点点点”的测试人。 你可能会有疑问&#xff1a;“我也能做到这一点的可能性有多大&#xff1f;”因此&#xff0c;我会尽量把自己做决定和思考的过程讲得更具体一些&#xff0c;并尽量体现更多细节。 …...

《C++ Primer Plus》第17章:输入、输出和文件(1)

对C输入和输出&#xff08;简称I/O&#xff09;的讨论提出了一个问题。一方面&#xff0c;几乎每个程序都要使用输入和输出&#xff0c;因此了解如何使用它们是每个学习计算机语言的人面临的首要任务&#xff1b;另一方面&#xff0c;C使用了很多较为高级的语言特性来实现输入和…...

静态代码审计插件 snyk 使用教程

目录 1、vscode 插件安装 2、手动生成 token 3、自动分析 1、vscode 插件安装 2、手动生成 token 点击登录链接:...

从“服务”,到“赋能”,日日顺再次定义供应链生态建设

在众多不确定因素的交织下&#xff0c;当下的供应链企业变革呈现出前所未有的紧迫感。一体化、全链路的趋势&#xff0c;为企业的发展指明方向&#xff0c;与此同时数字化与科技化开始承托供应链管理能力的升级与变革。 2月15日&#xff0c;由日日顺供应链、运联智库联合举办的…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...

基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)

注&#xff1a;文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件&#xff1a;STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...