Git最佳实践-Git flow

news2024/12/26 23:50:12

Git分支管理背景

Git是当下最流行的版本管理系统,阮一峰在自己的博文中提到过:“如果你严肃对待编程,就必定会使用版本管理工具”。Git操作是基于分支的,当下环境衍生出多种优秀的分支管理策略,其目的就是要保证不同分支各司其职,避免多人协作过程中代码冲突、代码版本出现问题。在日常迭代过程中,每个公司都有一套自己的分支管理规范,但万变不离其宗,都有Vincent Driessen提出的Git flow方法的影子。

Git flow关键分支

基于Git flow方法协作提交代码时,一般是基于一下分支:

分支名称分支说明分支时效环境
master与线上环境运行代码版本一致,需保证最高稳定性主分支线上生产环境
develop开发过程中成员操作分支(前后端对接调试阶段)主分支开发环境
feature新功能分支,一般一个新功能对应一个分支,以避免后面一些不必要的代码冲突临时分支
release亦或者叫bugfix分支,修复测试环境Bug所用分支,建议一个Bug单独切一个分支,(测试阶段)实施分支测试环境/压测环境/预生产环境
hotfix紧急修复线上BUG的时候使用的分支临时分支

以下是Git flow流程图:

在这里插入图片描述

master与develop

这张图涉及内容较多,我们只需要关注两个分支,一个是master分支,另一个是develop分支,通过箭头可以看到,develop分支是基于master分支创建,在提交代码后,又重新回到了master分支,这里体现的是,在迭代开始前,需要基于线上代码最新版本合并到开发分支,作为团队成员开发的公共分支。在使用Git时,需要遵循一个原则:从哪里来,最后回到哪里去

develop与feature

接下来我们需要关注的是feature分支与develop分支。在团队协作过程中,对于需求的开发,通常是采用一个成员负责一个功能点或者模块,那么就需要不同成员往develop分支提交代码,即需要从develop分支创建feature分支开发新功能,编码自测完成后,再从feature分支push(推送)到develop分支,这同样遵循了以上规则。

develop与release

在企业开发中,每次迭代往往定义一个版本号,release分支与之对应。随时间线推进,到达迭代开发中的提测阶段,则需要将开发的新代码从develop分支推送到release分支,而后发布代码(CI/CD)到测试环境供测试验证。

release与bugfix

当测试提出缺陷时,似乎我们需要排查一下自己代码中是否存在问题。如果是,那么我们需要基于测试环境的release分支代码版本做修改,此时,我建议基于release分支去创建一个bugfix分支用于修复代码中的问题。修复完毕后再将bugfix分支的代码推送到release分支,push完成后,将bugfix分支删除,确保一个bugfix分支只做一件事

注意:在合并前需要确保release分支代码是最新版本,建议在push到其他分支前update一下分支到最新版本,因为不止你一个可怜人在修复Bug。

如果你所在的公司使用Git flow的标准流程。develop分支承担了两个“角色”:“写Bug”和“改Bug”。则同样可以从release分支更新最新代码后,将release分支代码merge(合并)到develop分支。再基于develop分支修改代码,push到develop,而后切换到release分支,更新到最新版本,merge develop分支到release分支即可。

release与master

测试完成、熬到上线、喜大普奔。上线时需要将release分支代码推送到master,同样的道理,在推送前需要将master分支代码更新到最新版本,release分支合并master分支代码,再切换到master分支合并release分支代码。

上线时需要整理迭代涉及的配置项更新、迭代变更SQL脚本、历史数据处理数据SQL脚本、静态资源等整理出来,发布执行到线上环境,此过程不在本文中赘述。

master与hotfix

紧急!震惊!线上代码失去公信力了吗?

当生产环境用户反馈了一个问题,确认为代码缺陷时,需要基于最新的master分支创建hotfix分支去修复线上bug,修复完毕后,从hotfix分支按上述release分支推送到master分支流程推送代码到master分支即可。

为什么在merge其他分支前,需保证其他分支代码为最新版本?

你并不能确定目标分支代码是否有变更。

  1. 一个工程可能有多个团队维护、推送代码,你并不知道其他团队什么时间、推送了什么内容到分支。
  2. 在不同迭代版本时间线上,可能有一些线上bug的维护。

如何使用Git flow

  1. 命令行
  2. 编码工具自带Git客户端,如IDEA
  3. sourceTree

最后

提高团队协作效率,人人有责。

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

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

相关文章

【深度学习】docker中安装ssh服务,并使用vscode连接操作其文件夹

文章目录前言1. docker容器安装ssh服务1.1. 安装docker的ssh1.2.在容器终端下依次执行如下命令:1.3.回到宿主机终端后,依次执行如下命令:1.4. 使用 ssh 客户端工具(如 MobaXterm)连接容器2、vscode连入docker总结前言 …

scrapy-1

1.scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理 或存储历史数据等一系列的程序中。 2.scrapy项目的创建以及运行 1.创建scrapy项目:终端输入 scrapy startproject 项目名称 2.…

OpenMMLab 计算机视觉 # day1: 计算机视觉基础与OpenMMLab开源算法体系

相关资源: github 第一课 计算机视觉与 OpenMMLab 开源算法体系 张子豪 计算机视觉基础 计算机视觉:让计算机理解图像、视频。 计算机视觉的三大基础任务:图像分类(图像识别)、目标检测、图像分割任务。 根据目标数量,计算机视觉任务也分…

Bahdanau 注意力

在预测词元时,如果不是所有输入词元都是相关的,那么具有Bahdanau注意力的循环神经网络编码器-解码器会有选择地统计输入序列的不同部分。这是通过将上下文变量视为加性注意力池化的输出来实现的。 在循环神经网络编码器-解码器中,Bahdanau注…

Centos8中安装配置DVWA靶场环境详细流程

一、准备内容本文在Centos8中安装配置DVWA靶场,该靶场启动需具备【LinuxApacheMysqlPhp】四大环境:所以在后续的安装配置DVWA靶场时遇到问题首先需要排查Apache、Mysql、Php这三大环境是否正常启动(若不能正常启动则需逐一排查解决&#xff0…

漏洞深度分析|CVE-2023-24162 hutool XML反序列化漏洞

项目介绍 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢&#x…

ARP攻击

一、ARP1.1、ARP介绍地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址(MAC地址)的一个TCP/IP协议.每台主机都设有一个ARP高速缓存,里面有本局域网上的主机和路由器的…

优思学院|六西格玛团队缺乏方向感怎么办?原因是...

团队方向感是一个六西格玛项目成功的关键因素。它确保团队成员有共同的目标,清晰的任务分配,以及明确的行动计划。有了方向感,团队成员可以有效地利用自己的才能和知识,共同努力实现团队的目标。团队方向感不仅有助于提高团队的效…

4种通过iframe跨域与其他页面通信的方式

目录 4种通过iframe跨域与其他页面通信的方式 location.hash window.name postMessage document.domain降域 4种通过iframe跨域与其他页面通信的方式 location.hash 在url中,http://www.baidu.com#helloword的#helloworad就是location.hash,改变has…

SpringMVC之bean加载控制

目录 一:问题分析 二:思路分析 三:环境准备 四:设置bean加载控制 知识点1:ComponentScan 一:问题分析 入门案例的内容已经做完了,在入门案例中我们创建过一个SpringMvcConfig的配置类&#x…

Redis如何实现分布式锁?

📢📢📢📣📣📣 哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜 ✨【一心同学】的写作风格&#x…

OpenMMLab学习笔记(一)

OpenMMLab学习笔记(一) day01 计算机视觉与OpenMMLab开源算法体系 1. 基本知识 计算机视觉的基础任务:分类、分类和定位、物体检测、分割(语义分割、实例分割),其中实例分割统一种类索引不同 注意语义分…

indexedDB存储

一、概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小…

rocketmq 笔记

cap理论 Consistency(一致性)Availability(可用性)Partition tolerance(分区容忍性) ①一致性:对于客户端的每次读操作,要么读到的是最新的数据,要么读取失败。换句话说…

ElasticSearch -- Prometheus+Grafana监控

向导介绍部署Prometheus配置Grafana下载仪表盘导入仪表盘报警核心指标集群健康和节点可用性主机级别的系统和网络指标JVM内存和垃圾回收搜索和索引性能资源饱和度注册自动重启介绍 Prometheus官方提供了ES的exporter:EsExporter Github地址:elasticsea…

【Vue】Vue不同版本的基本使用

一、Vue的版本 1. Vue1.x几乎被淘汰&#xff0c;不再建议学习与使用。2. Vue2.x<scriptsrc"" target"_blank">https://cdn.jsdelivr.net/npm/vue2.6.14"></script>3. Vue3.x<scriptsrc"" target"_blank">ht…

【IO异常】HTTP请求报错Error writing to server

报错信息如下&#xff1a; [2023-01-04 13:36:02.185]-ERROR-[biz:aplus-task-oms1060189862335877121][sys:aplus-cms-tran1060189866052390912][com.phfund.aplus.cms.tran.module.counter.service.impl.OcrServiceImpl-102][调用远程服务发送文件异常:] cn.hutool.http.Http…

一、HTML5

文章目录一、HTML5二、html5的基本结构三、基本标签四、HTML常用标记4.1 文本标题(h1-h6)4.2 段落文本p4.4 空格4.5 换行 br4.6 水平线4.7 加粗标记4.8 倾斜4.9 扩展4.10 列表4.10.1 ul 无序列表4.10.2 ol 有序列表4.10.3 dl 自定义列表五、块级标签、行级标签一、HTML5 H5是H…

洛谷 P1886 滑动窗口 /【模板】单调队列

滑动窗口 /【模板】单调队列 题目描述 有一个长为 nnn 的序列 aaa&#xff0c;以及一个大小为 kkk 的窗口。现在这个从左边开始向右滑动&#xff0c;每次滑动一个单位&#xff0c;求出每次滑动后窗口中的最大值和最小值。 例如&#xff1a; The array is [1,3,−1,−3,5,3,…

辨别三星内存条的真假

目录前言一、三星内存为什么水深&#xff1f;二、通过物理手段辨别1.包装2.日期3.是否透光4.颜色5.电阻颜色6.颗粒丝印&#xff08;重点&#xff09;7.其他标签或字迹结语前言 本文截止2023.2.2&#xff0c;针对笔记本内存条 省流&#xff1a;直接JD自营 最近随手在tb买了条三星…