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

【git实践】分享一个适用于敏捷开发的分支管理策略

文章目录

  • 1. 背景
  • 2. 分支管理实践
    • 2.1. 敏捷开发中分支管理面临的问题
    • 2.2. 分支管理策略
    • 2.3. 还需要注意的一些问题
  • 3.总结

1. 背景

在实际的开发工作中,我们往往会面临多任务并行研发,多个环境管理的情况,这种情况下,一个合适的分支管理策略就显得尤为重要。特别是在使用敏捷开发流程、DevOps的团队中,由于快速响应、需求的灵活性等特征,分支管理的必要性则更加突出。
我在网上查看过一些分支管理策略的方法论,例如:git flow , github flow , one flow , gitlab flow等,但是在管理敏捷开发时,依然是差强人意。在这篇文章中,会分享一个我们公司的实践,它是由gitlab flow拓展出来的分支管理策略。

2. 分支管理实践

2.1. 敏捷开发中分支管理面临的问题

敏捷开发流程在研发中最大的特点就是需求灵活多变小步快跑的迭代式开发,这就给的分支的管理带来了一定的挑战,试想一下如下的一些场景:

  • 在研发的过程中,遇到线上问题需要立即处理并上线。
  • 在同一个项目的需求A研发完成正在debug的过程中,突然插入了紧急的需求B,且要求需求B要先于需求A上线。
  • 有两个需求需要并行研发,优先级都一样,谁先做完谁先上线。
  • 多人研发时,每次合并的冲突特别多。

这其中的一些问题,在现有的git管理策略中并不太容易处理,为此,我们修改了分支管理策略和规范,以适应这种变化。

2.2. 分支管理策略

在说分支管理策略之前,我先说一下我们的几个环境。我们一共有三个环境,分别是:测试环境、预发环境、生产环境

  • 测试环境:用于提测后的第一轮集成测试,这一轮测试的bug会相对较多,我们会在这个环境中修复研发过程中出现的所有bug。
  • 预发环境:预发环境和生产环境连接同样的存储中间件,例如MySQL和Redis,在数据上是共享的,只是在其他中间件上做了隔离。这个环境的目的是在于验证测试环境和生产环境由于环境的差异带来的问题,一般来说,预发环境修复问题后,生产基本上就没有更多的问题了。
  • 生产环境:就是项目正式上线的环境。

针对这三个环境,我们了几种不同的分支类型,长期分支为:masterdevelop,短期分支为:release-版本号feature , hotfix 三个,我分别解释一下作用。

  • master:保存生产环境最新版本的代码,保证的是从master拉出来的代码一定是可以直接上线的。
  • develop:开发和测试分支,发布测试环境的时候使用的分支,研发可以根据需要选择是否在develop上研发新版本。
  • release-版本号:预发分支,一般用于预发验证和生产发布,这个分支保留两到三个版本迭代。
  • feature功能迭代分支,一般是在有并行研发的情况下拉取的分支,保证需求之间的隔离,这个分支在上线后删除。
  • hotfix问题处理分支,线上紧急问题拉取这个分支进行修改。

下面通过一个时间序列图来表示一个相对复杂的研发场景:
在这里插入图片描述
图中标明了序号和每一步做了什么,这里简要的描述一下关键点:

  • 所有的研发分支(功能分支,hotfix分支),都是从master拉取的,这样保证研发分支的代码都是在线上环境的版本中拓展出来的,目的是每一个研发分支都能够独立的上线
  • 功能分支研发完成提测后,都合并到develop发布测试环境,这个阶段主要是解决业务流程、细节、边界问题等造成的bug。
  • 预发分支的拉取,图中是按功能分支拉取的,这是因为一般一次发布规划的就是一次迭代中的这批功能,当然,如果在项目管理的过程中发现两个功能分支的完成时间非常相近,也可以合并到同一个预发分支进行验证和发布。
  • 发布完成后,需要将最新的代码合并到master并打好版本tag备案,同时将master合并develop和没有上线的功能分支中,避免后续代码越写越多后带来的bug。
  • hotfix一般是给线上的代码打补丁,不会有特别大的改动(如果有,规划到下一次迭代中是更好的方式),所以在修改完成之后,通过预发分支进行验证就好了,非必要不用在测试环境再走一遍测试。

2.3. 还需要注意的一些问题

以上的策略实现了灵活管理多需求独立上线,降低了产生冲突的概率,能够较好的适配敏捷开发的节奏。在实际工作中,配合项目管理流程达到的效果会更佳,例如:

  • 在做任务拆分和迭代规划时,将关联性强的需求分配到同一个功能分支中一同上线,这样可以很大程度上避免不同分支修改同一行代码,减少冲突的概率。
  • 在研发流程中,做上线规划时,将上线完成后合并到master这一步规划到上线文档中,避免因遗忘导致后续迭代拉取的不是最新的代码。
  • 如果是在一个互相信任的团队,并且团队成员的平均水平较高,可以使用上述的方式,每个人都可以进行合并发布。但如果不是这样的团队,为了减少发布的风险,需要调整流程,合并到master时需要做合并审查,并且只有管理人员可以通过master分支进行发布。

除了管理上的问题之外,有条件的话建立CICD流水线,并且通过容器的方式对发布流程进行管理,会最大化的发挥这个分支管理策略的作用。

3.总结

本篇讲的是一个适用于敏捷开发的分支管理策略,再一个互相信任且水平相对较高的团队中,可以将这个策略发挥到极致,完全匹配敏捷开发中需求灵活多变。
这个策略经过我司多年的实践,足以应对大部分的研发迭代场景,希望对大家能够有所帮助,如果对这个流程有任何疑问及建议,欢迎留言讨论!

相关文章:

【git实践】分享一个适用于敏捷开发的分支管理策略

文章目录 1. 背景2. 分支管理实践2.1. 敏捷开发中分支管理面临的问题2.2. 分支管理策略2.3. 还需要注意的一些问题 3.总结 1. 背景 在实际的开发工作中,我们往往会面临多任务并行研发,多个环境管理的情况,这种情况下,一个合适的分…...

Redis与MySQL如何保证数据一致性

Redis与MySQL如何保证数据一致性 简单来说 该场景主要发生在读写并发进行时,才会发生数据不一致。 主要流程就是要么先操作缓存,要么先操作Redis,操作也分修改和删除。 一般修改要执行一系列业务代码,所以一般直接删除成本较低…...

基于微信小程序的教室预约系统+LW示例参考

1.项目介绍 功能模块:管理员(学生管理、教师管理、申请管理、设备管理、报修管理等)、普通用户/学生(注册登录、申请预约、退订、报修等)技术选型:SSM、JSP、uniapp等测试环境:idea2024&#x…...

Linux 安装 Git 服务器

一、安装 Git 1. 在 CentOS/RHEL 中使用以下命令: sudo yum update -y # 或者 sudo dnf update -y (在较新的系统中) sudo yum install git -y验证安装:git --version 2. 配置 Git 用户 git config --global user.name "Your Name" git co…...

总结:Yarn资源管理

一、介绍 本文梳理下Yarn的资源分配计算逻辑。 二、配置 - 资源限制 1、配置NodeManager可分配的资源池的总量 <property><name>yarn.nodemanager.resource.memory-mb</name><value>4096</value> </property> 作用对象:节点管理器(No…...

Python学习34天

import random class Game: peo0 rob0 # # def __init__(self,peo,rob): # self.peopeo # self.robrob def Play(self): """ 石头剪刀布游戏&#xff0c;0代表石头&#xff0c;1代见到&#xff0c;2代表石头 …...

深入浅出 WebSocket:构建实时数据大屏的高级实践

简介 请参考下方&#xff0c;学习入门操作 基于 Flask 和 Socket.IO 的 WebSocket 实时数据更新实现 在当今数字化时代&#xff0c;实时性是衡量互联网应用的重要指标之一。无论是股票交易、在线游戏&#xff0c;还是实时监控大屏&#xff0c;WebSocket 已成为实现高效、双向…...

三开关VUE组件

一、使用效果 <template><QqThreeSwitch v-model"value" /><!-- <SqThreeSwitch v-model"value" :options"[test1, test2, test3]"><template #left-action><div style"display: flex"><IconMoon…...

SpringCloud+SpringCloudAlibaba学习笔记

SpringCloud 服务注册中心 eureka ap 高可用 分布式容错 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency><groupId…...

牛客小白月赛105(A~E)

文章目录 A lz的吃饭问题思路code B lz的数字问题思路code C lz的蛋挞问题思路code D lz的染色问题思路code E lz的括号问题思路code 总结 牛客小白月赛105 A lz的吃饭问题 思路 签到题&#xff0c;比较大小即可 code void solve(){int a,b,c,d;cin >> a >> b…...

OSPF协议整理

OSPF&#xff08;Open Shortest Path First&#xff09;即开放式最短路径优先协议&#xff0c;是一种广泛应用于大型网络中的链路状态路由协议。 OSPF 的基本概念 OSPF 是基于链路状态算法的内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在一个自治系统&#xff…...

Java中的多线程

文章目录 Java中的多线程一、引言二、多线程的创建和启动1、继承Thread类2、实现Runnable接口 三、线程的常用方法1、currentThread()和getName()2、sleep()和yield()3、join() 四、线程优先级五、使用示例六、总结 Java中的多线程 一、引言 在Java中&#xff0c;多线程编程是…...

什么是聚簇索引、非聚簇索引、回表查询

其实聚集索引也叫聚簇索引&#xff0c;二级索引也叫非聚簇索引&#xff0c;大家不要认为这是不同的两个知识点。 定义 先看一下数据库的索引介绍。 聚簇索引 1. 如果存在主键&#xff08;一般都存在&#xff09;&#xff0c;主键索引就是聚簇索引。 2. 如果不存在&#xff0c;…...

探索 Spring 框架核心组件:构建强大 Java 应用的基石

Spring框架作为Java企业级开发的首选框架之一&#xff0c;其强大的功能和灵活的架构深受开发者喜爱。Spring框架的核心组件共同构建了一个高效、可扩展的应用程序开发平台。本文将深入探讨Spring框架的核心组件&#xff0c;揭示它们如何在Spring框架中发挥关键作用。 一、Bean…...

Android 13 Aosp 默认允许应用动态权限

图库 frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java 修改 public void grantDefaultPermissions(int userId) {DelayingPackageManagerCache pm new DelayingPackageManagerCache();grantPermissionsToSysCompon…...

【C++知识总结1】c++第一篇,简单了解一下命名空间是什么

一、C的由来 C语言是一种结构化和模块化的编程语言&#xff0c;它对于处理较小规模的程序非常适用。然而&#xff0c;当面临需要高度抽象和建模的复杂问题&#xff0c;以及规模较大的程序时&#xff0c;C语言就显得不那么合适了。为了应对这种挑战&#xff0c;并在解决软件危机…...

从0开始深度学习(32)——循环神经网络的从零开始实现

本章将从零开始&#xff0c;基于循环神经网络实现字符级语言模型&#xff08;不是单词级&#xff09; 首先我们把从0开始深度学习&#xff08;30&#xff09;——语言模型和数据集中的load_corpus_time_machine()函数进行引用&#xff0c;用于导入数据&#xff1a; train_iter…...

GitLab使用操作v1.0

1.前置条件 Gitlab 项目地址&#xff1a;http://******/req Gitlab账户信息&#xff1a;例如 001/******自己的分支名称&#xff1a;例如 001-master&#xff08;注&#xff1a;master只有项目创建者有权限更新&#xff0c;我们只能更新自己分支&#xff0c;然后创建合并请求&…...

cuda conda yolov11 环境搭建

优雅的 yolo v11 标注工具 AutoLabel Conda环境直接识别训练 nvidia-smi 检查CUDA版本 下载nvidia cudnn对应的版本 将cuDNN压缩包内对应的文件复制到本地bin、include、lib的文件夹中 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.6 miniConda快速开始-安装 执行…...

解决SpringBoot连接Websocket报:请求路径 404 No static resource websocket.

问题发现 最近在工作中用到了WebSocket进行前后端的消息通信&#xff0c;后端代码编写完后&#xff0c;测试一下是否连接成功&#xff0c;发现报No static resource websocket.&#xff0c;看这个错貌似将接口变成了静态资源来访问了&#xff0c;第一时间觉得是端点没有注册成…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...