04架构管理之分支管理实践-一种git分支管理最佳实践
专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理之道
一句话导读
对于架构管理、研发管理中,分支管理是公司研发过程中必不可少的一个实践。本文主要是根据个人及公司实践,来说明下具体的分支管理方法,这里的分支指的git仓库的代码分支。分支管理方法有很多,大家可以自行定义,只要能够完成研发协作即可。
目录
一句话导读
一、环境管理
1.开发环境
2.测试环境
3.预发布环境
4.生产环境
5.扩展
二、分支管理
1.feature分支
2.develop分支
3.release分支
4.master分支
5.tag
6.hotfix分支
三、分支管理原则
一、环境管理
一般公司研发都会有几个环境,如开发环境、测试环境、预发布环境、生产环境,有些公司甚至还有本地环境、验收环境、演示环境、性能测试环境等等。针对这么多的环境,我们研发中要根据公司、项目的实际情况,进行环境的管理。一般项目应该有开发环境、测试环境和生产环境。有些小项目也可能只有一个研发环境,项目结束后直接将研发环境转为生产环境。所以说研发环境的需求应该是根据实际情况来定的。
1.开发环境
研发人员将完成的代码发布到开发环境中,做初步的集成测试,开发环境由开发人员自行管理,代码极其不稳定,环境机器配置可以比较低。一般用dev标识
2.测试环境
主要提供给测试人员使用,代码经过研发环境自测完成后可以提测,代码由测试管理员管理,环境代码相对比较稳定,环境机器根据测试要求配置即可,不用太高配置。一般用test标识
3.预发布环境
主要提供个测试人员使用,或者做UAT验收使用,代码经过测试环境验证完成后,可以提交到预发布环境中,环境的配置和数据最好和生产一致,目的是在上生产前做最后确认,环境代码和生产保持一致。机器配置最好和生产环境一致。一般用pre标识
4.生产环境
代码最终交付的环境,一般部署经过测试验证、预发布验证的代码,生产环境由专人负责严格管理,一般用prod标识
5.扩展
- 本地环境:研发人员自己本机的环境,开发人员自行管理,部分中间件、数据库等可以自建或者用开发环境中的组件。用户开发过程中的调试等工作。
- 验收环境:一般由测试人员管理,负责将已完成的功能需求代码部署上去,交由最终软件的用户进行测试或需求提出的业务部门进行验收测试,通常测试完成后即可发布生产环境,一般用UAT标识
- 演示环境:演示环境相对于生产环境而定义的,环境是给用户演示而定制的。功能基本和生产一致,用户相对较少,环境要保持相对稳定,尤其是客户需要做演示的时候。一般用demo标识
- 性能测试环境:主要是对软件的性能情况进行测试。环境应该和生产保持一致,但是一般性能测试环境是临时的,测试完成后即可下线。
二、分支管理
分支管理的逻辑最好是和团队规模相匹配。更好的git分支管理,有助于团队的协作效率的提高和代码的管理。我们使用基于主干分支管理策略,将代码分支和环境相对应,提高代码的质量。
1.feature分支
研发分支,研发人员从develop分支拉取,并以feature/开头命名自己的研发分支,开发人员对于新的需求则在该分支上开发,并自行管理,对应本地环境。
2.develop分支
研发测试分支,研发人员可将开发好的代码合并到该分支上,在研发环境进行初步集成自测,该分支由研发人员自行管理。
3.release分支
测试分支,该分支为保护分支,不允许研发人员直接commit代码,研发人员可以发起feature分支合并到release分支的申请,由配置管理员进行合并,发布到测试环境进行集成测试。该分支由配置管理员管理。
4.master分支
生产分支,该分支为保护分支,不允许研发人员直接commit代码,只接受release分支的合并,由配置管理员负责管理,发布生产环境。
5.tag
版本归档标识,当发布的系统稳定后形成tag版本标识,进行归档。
6.hotfix分支
问题修复分支,如果生产版本发布稳定后,出现bug,可从master拉取hotfix分支,修复完成后,合并到release分支测试通过,将hotfix合并到master发布生产,形成新的tag;如果是发布过程中有bug,也可拉取hotfix分支,并提交release分支测试后走后续发布流程
具体如下图:
三、分支管理原则
主分支保持稳定: 主分支(如 main 或 master)应该保持稳定,只有已上线的代码。禁止直接在主分支上开发。
- 特性分支:开发人员在对新功能的开发时,创建独立的特性分支。分支名可以描述功能的目标,如 feature/login。
- 修复分支:对于 bug 修复,创建修复分支,确保修复在主分支上得到合并。分支名可以描述修复的问题,如 hotfix/login-error.
- 命名规范:根据公司、团的命名习惯,使用统一的命名规范,清晰的命名方式以便团队成员理解分支用途。可以采用统一的前缀,如 feature/、hotfix/。
- 小而频繁的提交:不要在一次提交中修复两个bug。单次提交的改动越小,更便于其他开发者理解,每次提交关注一个特定的更改,这有助于追踪和回溯变更历史。
- 定期合并主分支:定期从主分支拉取最新代码,保持特性分支与主分支同步。避免分支过长时间的分离。
- 代码审查:代码在提交测试前进行代码审查,提高代码质量。
- 远程分支:及时推送特性分支到远程仓库,便于团队成员协作和代码审查。
- 删除不必要的分支:一旦特性分支完成开发或修复,及时删除不再需要的分支,保持仓库的整洁。
- 标签版本:使用标签来标识重要的版本发布,方便追踪和部署特定版本。
- 培训和文档: 对团队成员进行培训,分享分支管理的最佳实践和流程,编写分支管理指南。
相关文章:

04架构管理之分支管理实践-一种git分支管理最佳实践
专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理…...

D.OASIS City 和 Warrix 在The Sandbox 庆祝 Rise of the 10th Legend十周年
D.OASIS 首次展示了变革性娱乐 D.OASIS City,正如它与 WARRIX 一起承诺的那样。WARRIX 是获得泰国国家队球衣生产授权的标志性运动服装品牌。 这款激动人心的游戏冒险游戏于今天推出,让用户能够投入 D.OASIS City x WARRIX:Rise of the 10th…...

Git基本操作(Idea版)
第一次发布项目(本地->远程) 方式一 通过push的方式推送本地库到远程库(远程已创建好仓库) 这种方式需要提前创建好仓库。 右键点击项目,可以将当前分支的内容 push 到 GitHub 的远程仓库中。 注意:…...

NSS [羊城杯 2020]easyser
NSS [羊城杯 2020]easyser 开题。很容易让人觉得环境坏了。 不要慌,无从下手时。看源码、扫目录、抓包。一套操作下来,发现几个可以下手的路由。 /index.php /robots.txt 访问 /star1.php,一说到百度,就猜测是否存在SSRF。 源码中…...

理解底层— —Golang的log库,二开实现自定义Logger
理解底层— —Golang的log库,实现自定义Logger 1 分析实现思路 基于golang中自带的log库实现:对日志实现设置日志级别,每天生成一个文件,同时添加上前缀以及展示文件名等 日志级别,通过添加prefix:[INFO]、…...

RabbitMQ---Spring AMQP
Spring AMQP 1. 简介 Spring有很多不同的项目,其中就有对AMQP的支持: Spring AMQP的页面:http://spring.io/projects/spring-amqp 注意这里一段描述: Spring-amqp是对AMQP协议的抽象实现,而spring-rabbit 是对协…...

C语言练习题解析:挑战与突破,开启编程新篇章!(2)
💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…...

sqlite3 加密访问
关于sqlite3 加密 一、相关加密用到的sqlcipher 1.1 sqlcipher 是一个数据库加密的开源库 sqlcipher开源地址 我这边是使用的docker镜像,镜像地址: https://hub.docker.com/r/pallocchi/sqlcipher 加密格式 docker run -v <workdir>:/sqlcip…...

clickhouse 系列1:clickhouse v21.7.5.29 源码编译
1.gcc10安装 安装依赖 yum update yum install -y gcc gcc-c++ yum install -y bzip2 下载gcc 源码包并解压 wget -P /data/base https://mirrors.aliyun.com/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz cd /data/base && tar -xzvf /data/base/gcc-...

servlet初体验之环境搭建!!!
我们需要用到tomcat服务器,咩有下载的小伙伴看过来:如何正确下载tomcat???_明天更新的博客-CSDN博客 1. 创建普通的Java项目,并在项目中创建libs目录存放第三方的jar包。 建立普通项目 创建libs目录存放第三…...

宁芝 NIZ 键盘开机需要重新插拔 USB 线才能使用
宁芝 NIZ 键盘开机需要重新插拔 USB 线才能使用 问题描述 宁芝 NIZ 键盘开机后无法识别到键盘,需要重新插拔 USB 线才能使用。 解决方法 按住 Fn BackSpaceE 键 5 秒,键盘会切换模式, 状态灯闪 1 次为 USB 接口;状态灯闪 2 次为 PS / 2 …...

R编程教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R语言的核心是解释计算机语言,其允许分支和循环以及使用函数的模块化编程。 R语言允许与以Cÿ…...

[CMake教程] CMake列表 - list
目录 零、简介一、Reading二、Search三、Modification四、Ordering 零、简介 列表在CMake中大量使用。初始化列表语法如下: set(myList a b c) # Creates the list "a;b;c"归根结底,列表只是一个由分号分隔列表项的单个字符串,这…...

报错 - net::ERR_ABORTED 500 (Internal Server Error)
报错:net::ERR_ABORTED 500 (Internal Server Error) 根据提示找到对应文件 解决:检查代码,根据高亮颜色判断,发现箭头函数漏了一个>。 报错:Uncaught TypeError: Assignment to constant variable. 原因&#x…...

【Java Easypoi Apache poi】 Word导入与导出
引入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId> </dependency> <!-- 下面的版本需要对应上面依赖中的版本 否则可能会起冲突 --> <!-- 下面的依赖主要是为了使用A…...

Java稀疏数组
目录 1.稀疏数组 2.稀疏数组的使用 2.1 二维数组转换为稀疏数组 2.2 稀疏数组转换为二维数组 1.稀疏数组 稀疏数组(Sparse Array):当一个数组中的大部分元素为相同的值,可使用稀疏数组来保存该数组,可以将稀疏数组…...

内存管理框架 --- 基础知识
文章目录 一、内存管理1.1 内存管理的出现1.2 内存管理的用途1.2.1 虚拟内存和物理内存的定义1.2.1.1 什么是虚拟内存? 1.2.2 虚拟内存的划分:用户空间与内核空间 1.3 操作系统和MMU1.3.1 OS和MMU的关系1.3.2 虚拟地址到物理地址的映射流程 1.4 物理内存…...

React + Next.js 搭建项目(配有对比介绍一起食用)
文章标题 01 Next.js 是什么02 Next.js 搭建工具 create-next-app03 create-react-app 与 create-next-app 的区别04 快速构建 Next.js 项目05 App Router 与 Pages Router 的区别 01 Next.js 是什么 Next.js 是一个 React 框架,它允许你使用 React 框架建立超强的…...

【Java】Java基础
环境准备 安装JDK和JRE 下载JDK,可以在官网Java Downloads | Oracle 中国下载,但是这里需要注册才能够下载。在Index of java-local/jdk (huaweicloud.com)也可以下载到,但是版本比较老,关系不大,直接下载࿰…...

Spring-SpringBoot-SpringMVC-MyBatis常见面试题
文章目录 Spring篇springbean是安全的的?什么是AOP你们工作中有用过AOP吗spring中的事务是如何实现的spring中事务失效场景Spring的生命周期spring中的循坏依赖springMVC的执行流程springboot的启动原理常用注解MyBatis执行流程Mybatis是否支持延迟加载?Mybatis的一…...

15.MyCat数据库分片
MyCat 是一个开源的数据库中间件,主要用于将数据库操作请求路由和分发到后端的多个数据库节点。 1.Mycat环境搭建 在两个不同数据库中创建相同表 下载mycat https://github.com/MyCATApache/Mycat-Serverhttps://github.com/MyCATApache/Mycat-Server 将下…...

【Python】PySpark
前言 Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。 简单来说,Spark是一款分布式的计算框架,用于调度成百上千的服务器集群,计算TB、PB乃至EB级别的海量数据…...

pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境
pycharm 打开Terminal时报错activate.ps1,因为在此系统上禁止运行脚本,并因此无法进入虚拟环境 如下图所示: 网上说可以set_restrictFalse什么的,虽然也可但可能会降低电脑安全性,可以将下面的终端改为cmd.exe即可...

[C++][C#]yolox TensorRT C++ C#部署
YOLOX是一种新型的高性能探测器,由开发者Zheng Ge、Songtao Liu、Feng Wang、Zeming Li和Jian Sun在《YOLOX: Exceeding YOLO Series in 2021》首次提出。与YOLOV5和YOLOV8相比,YOLOX具有更高的性能和更好的平衡,在速度和精度方面都表现出优越…...

根据源码,模拟实现 RabbitMQ - 网络通讯设计,自定义应用层协议,实现 BrokerServer (8)
目录 一、网络通讯协议设计 1.1、交互模型 1.2、自定义应用层协议 1.2.1、请求和响应格式约定 编辑 1.2.2、参数说明 1.2.3、具体例子 1.2.4、特殊栗子 1.3、实现 BrokerServer 1.3.1、属性和构造 1.3.2、启动 BrokerServer 1.3.3、停止 BrokerServer 1.3.4、处…...

MongoDB入门
简介 MongoDB是一个开源、高性能、支持海量数据存储的文档型数据库 是NoSQL数据库产品中的一种,是最像关系型数据库(MySQL)的非关系型数据库 内部采用BSON(二进制JSON)格式来存储数据,并支持水平扩展。 MongoDB本身并不是完全免费的,它对于…...

vr智慧党建主题展厅赋予企业数字化内涵
现如今,VR全景技术的发展让我们动动手指就能在线上参观博物馆、纪念馆,不仅不用受时间和空间的限制,还能拥有身临其境般的体验,使得我们足不出户就能随时随地学习、传承红色文化。 很多党建展厅都是比较传统的,没有运用…...

go中mutex的sema信号量是什么?
先看下go的sync.mutex是什么 type Mutex struct {state int32sema uint32 } 这里面有个sema,这个就是信号量。 什么是信号量? 什么是信号量?_kina100的博客-CSDN博客 其实通俗的来说,信号量就是信号灯,但是他不是…...

LeetCode笔记:Weekly Contest 360
LeetCode笔记:Weekly Contest 360 0. 吐槽1. 题目一 1. 解题思路2. 代码实现 2. 题目二 1. 解题思路2. 代码实现 3. 题目三 1. 解题思路2. 代码实现 4. 题目四 1. 解题思路2. 代码实现 比赛链接:https://leetcode.com/contest/weekly-contest-360/ 0.…...

【树DP】2021ICPC南京 H
Problem - H - Codeforces 题意: 思路: 这题应该算是铜牌题 铜牌题 简单算法 基础思维 简单复盘一下思路 首先,我们发现有个很特殊的条件: ti < 3 然后看一下样例: 注意到,对于一个结点 u &#…...