【git分支管理策略】

文章目录

  • 前言
  • 一、分支管理策略简介
  • 二、git基本操作
  • 三、git分支
    • 远程分支
    • 本地分支
  • 四、gitflow分支管理策略
    • 分支定义
    • gitflow分支管理策略评价
  • 五、GITHUB FLOW分支管理策略
    • 分支使用流程
    • 创建分支(Create a branch)
    • 新增提交(add and commit)
    • 提出 Pull 请求(Open a pull request)
    • 讨论和评估你的代码(Discuss and review your code)
    • 部署(Deploy)
    • 合并(Merge)
    • github flow分支关了策略评价
  • 六、GITLAB FLOW分支管理策略
    • 分支定义
    • 分支使用方案
  • 总结


前言

随着开源软件和分布式版本控制系统(如 Git)的普及,分支策略已成为软件开发和项目管理中的重要概念。在本文中,我们将深入探讨 Git 中的分支策略,以及如何有效地使用它们来提高团队协作和项目管理效率。
本文目标:

  • 介绍git基本操作以及整合idea的git插件使用

  • 解读git分支的作用

  • 解读git flow分支管理策略
    读完本文后:

  • 掌握git的使用

  • 了解gitflow相关分支的命名和作用


提示:以下是本篇文章正文内容,下面案例可供参考

一、分支管理策略简介

分支策略是指在版本控制系统中使用分支来管理代码更改的方法。在 Git 中,分支允许开发人员在同一个项目中并行工作,每个分支代表一个独立的开发线。这使得团队能够更高效地处理并行任务、快速迭代以及错误修复。

二、git基本操作

git操作的前提条件:

  • 本地windows安装git
  • 学习idea中的插件使用

idea的git基本操作:

  • 远程仓库remote: git remote
  • 更新fetch:git fetch
  • 拉取pull: git pull
  • 上传push: git push
  • 合并merge: git merge 合并分支
  • 本地提交commit:git commit
  • 分支branch: git branch 查看分支或者 切换分支
    上述命令属于非常常见的git操作命令,基本使用git必用到的,但是相对来讲,使用idea插件会弱化他们原生命令的使用.
    好处是简单,坏处是对底层命令不熟悉,会导致在插件中的各种选项问题困扰.本文基于idea的git插件,不需要过多了解,如有兴趣和需要请自行查询相关官方文档即可.

三、git分支

为了方便资源版本更新中对多人协作的并行开发进行有效的管理,git存在分支的概念.
我们可以利用分支记录一个稳定或者测试通过的版本,在新分支开发新功能,而在出现问题后及时切换回去.
同时一个功能过于复杂的时候,也可以建立并行的多个分支,多人同时开发最终合并等.
在git分支管理中存在远程分支和本地分支两种类型.

远程分支

托管中心平台或者服务器中可以查看的分支.一般是本地提交上传的同步.

本地分支

开发者操作的本地git仓库内容,一般会与远程分支在数量和名称上保持同步.

四、gitflow分支管理策略

企业中,分支决不能想创建就创建,想删除就删除,必须要遵循一定的规范和约定,那么分支管理策略就诞生了.
gitflow 最完善,最严格,最复杂的分支管理策略.

分支定义

Git Flow 是最早出现也是最经典的一种分支管理策略,它由两个长期分支和三种类型的临时分支组成。
1、永久分支:
Master 分支 (product stable)
主分支。用于存放经过测试,完全稳定的代码。永远都是可发布分支。
Develop 分支
开发分支一开始从master分离而来,用于存放基本稳定的代码。当该分支代码稳定,可发布版本时,合并到master分支上。
2、临时分支
Feature 分支
功能模块分支,从dev分支分离而来,用于开发项目功能,当开发新功能时以
feature -xxx命名,开发完成后,合并到develop上,合并后删除自己。
Release 分支
版本预发布分支,当v2.0版本发布时,可以从develop分支签出release-2.0,进行测试,测试出现问题,在release-2.0.1进行修改,测试完毕后准备发布将代码合并至master分支和develop分支上,给master打上v2.0.1的标签,合并后删除自己,这样做可以不影响下个版本功能的开发。
Hotfix 分支
线上紧急bug修复的分支,命名为hotfix-xxx,修改完成后,合并到master分支和develop分支,合并到master后打上修复版本的tag,合并后删除自己。
在这里插入图片描述

gitflow分支管理策略评价

Git flow的优点是清晰可控,缺点是相对复杂,需要同时维护两个长期分支。大多数工具都将master当作默认分支,可是开发是在develop分支进行的,这导致经常要切换分支,非常烦人。
更大问题在于,这个模式是基于"版本发布"的,目标是一段时间以后产出一个新版本。但是,很多网站项目是"持续发布",代码一有变动,就部署一次。这时,master分支和develop分支的差别不大,没必要维护两个长期分支。
所以一般网站项目不采用gitflow分支管理策略,而严格版本发布的项目比如游戏,可能采纳gitflow更多.

五、GITHUB FLOW分支管理策略

相比于gitflow的繁重和复杂,github flow可谓是轻盈小巧.其核心目的就是应对长期持续发布的项目.

分支使用流程

和gitflow不太一样,github减轻了流程的重量,只有一个长期分支master,并且没有复杂的短期分支release hotfix.

创建分支(Create a branch)

在你开发任何新功能完成之前,都在当前版本创建一个新分支,这时不需要管其他开发者在做什么.但是你的新分支最好具有具体的功能描述命名,让其他开发者一看就知道他在干什么.
在这里插入图片描述

新增提交(add and commit)

在这里插入图片描述
只要你创建了分支,就说明你要对它进行修改啦!无论添加、修改、还是删除文件,你都必须进行提交,将它们同步到你的分支上。当你在分支上工作的时候,这些提交操作可以跟踪你的工作进度。
提交操作也建立一个关于你工作的透明历史,通过查看这些提交记录,其他人可以知道你做了什么和为什么这么做。每个提交操作都有一个相关的提交信息(Commit messages),用于描述你做出的修改。此外, 每一个提交操作都被视为一个“修改单元”。如果发现了 bug 或者决定走不同的开发方向,你也可以通过这些“修改单元”进行回滚操作。
提示(ProTip)
提交信息非常的重要,特别是当你将修改的内容提交到服务器之后,Git 可以追踪到你的修改内容并展示它们。通过写清楚的提交信息,你可以让其他人更容易跟上我们的思路并提供反馈。

提出 Pull 请求(Open a pull request)

当你的开发实现了阶段性内容的时候,可以提交pull request.等待审核人员审核.
在这里插入图片描述

讨论和评估你的代码(Discuss and review your code)

当你提出 Pull 请求的时候,审查你的更改内容的人或团队可能有一些问题或者意见。也许你的编码风格与项目规范不符,或者缺少单元测试,也有可能所有的东西看起来都很棒,条理清晰。Pull 请求的目的就是鼓励和捕捉这种类型的对话。
你也可以在大家讨论和给出关于你提交内容的反馈时,继续 Push 你的分支。如果有人评论说你什么没有做,或者代码中有 bug,你也可以及时把它修复,然后 Push 这些修改。GitHub 将会给你展示出最新评论和反馈,你也可以在 Pull 请求的视图中统一接收这些消息。
在这里插入图片描述

部署(Deploy)

只要你的 Pull 请求被审查并且通过了你的测试,你就可以部署这些修改,在生产环境中验证她们。如果分支发生了问题,你也可以回滚到之前的状态。
在这里插入图片描述

合并(Merge)

现在, 你修改的内容已经在生产环境中验证了,是时候将你的代码合并到master分支啦!合并之后,Pull 请求就保存了一份关于你修改代码的历史记录。因为它们是可搜索的,所有任何人都可以通过搜索了解你为什么这么修改以及如何修改的。
在这里插入图片描述

github flow分支关了策略评价

Github flow 的最大优点就是简单,对于"持续发布"的产品,可以说是最合适的流程。
问题在于它的假设:master分支的更新与产品的发布是一致的。也就是说,master分支的最新代码,默认就是当前的线上代码。
可是,有些时候并非如此,代码合并进入master分支,并不代表它就能立刻发布。比如,苹果商店的APP提交审核以后,等一段时间才能上架。这时,如果还有新的代码提交,master分支就会与刚发布的版本不一致。另一个例子是,有些公司有发布窗口,只有指定时间才能发布,这也会导致线上版本落后于master分支。
上面这种情况,只有master一个主分支就不够用了。通常,你不得不在master分支以外,另外新建一production分支跟踪线上版本。

六、GITLAB FLOW分支管理策略

分支定义

工作流提供了一种简单、透明和有效的 git 工作方式,并与问题跟踪系统相结合。
可以说是gitflow和github flow的综合体现.
GitLab 推荐用生产分支来解决上述问题:
在这里插入图片描述
Gitlab flow 的最大原则叫做"上游优先"(upsteam first),即只存在一个主分支(开发环境)develop,它是所有其他分支的"上游"。只有上游分支采纳的代码变化,才能应用到其他分支。

分支使用方案

  • 持续发布
    对于"持续发布"的项目,它建议在develop分支以外,再建立不同的环境分支。比如,"开发环境"的分支是develop,“预发环境"的分支是pre-production,“生产环境"的分支是production。
    开发分支是预发分支的"上游”,预发分支又是生产分支的"上游”。代码的变化,必须由"上游"向"下游"发展。比如,生产环境出现了bug,这时就要新建一个功能分支,先把它合并到develop,确认没有问题,再cherry-pick到pre-production,这一步也没有问题,才进入production。
    只有紧急情况,才允许跳过上游,直接合并到下游分支。
  • 版本发布
    对于"版本发布"的项目,建议的做法是每一个稳定版本,都要从develop分支拉出一个分支,比如2-3-stable、2-4-stable等等。
    以后,只有修补bug,才允许将代码合并到这些分支,并且此时要更新小版本号。
  • gitlab flow分支管理策略的缺点
    命名没有严格的规范,只要遵循易读原则。

总结

通过实施有效的 Git 分支策略,团队可以更好地管理代码更改、提高协作效率并降低错误风险。随着项目的发展和团队规模的扩大,持续改进分支策略将有助于确保项目的成功和维护的顺利进行。

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

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

相关文章

C++泛型编程-类模板的项目实战实现基础的Vector的编写

请设计一个数组模板类&#xff08; Vector &#xff09;&#xff0c;完成对 int 、 char 、 float 、 double 以 及任意的自定义类等类型元素进行管理。 需求 a. 实现构造函数 b. 实现拷贝构造函数 c. 实现 cout << 操作 d. 实现下标访问符 [] 的重载操作 …

CTF-PWN-堆-【chunk extend/overlapping-1】

文章目录 chunk extend/overlappingfastbin与topchunk相邻free时候不会合并unsortedbinchunk中与topchunk相邻的被free时会合并extend向后overlapping先修改header&#xff0c;再free&#xff0c;再malloc先free&#xff0c;再修改header&#xff0c;再malloc extend向前overla…

Filter简单了解

1、filter能干嘛 过滤器实际上就是对web资源进行拦截&#xff0c;做一些处理后交给下一个过滤器或者servlet处理&#xff0c;通常都是拦截request的&#xff0c;也可以对response进行拦截处理&#xff1b; 2、面试考点&#xff1a;filter能干嘛&#xff08;应用场景&#xff0…

多维时序 | Matlab实现CNN-GRU-Mutilhead-Attention卷积门控循环单元融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-GRU-Mutilhead-Attention卷积门控循环单元融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-GRU-Mutilhead-Attention卷积门控循环单元融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍…

退出微软账号,edge/必应退出账号

微软账号退出&#xff1a;搜的教程都是说改成本地帐号&#xff0c;但是我的已经是本地帐号&#xff0c;操作没用。 但是找到了退出edge/必应浏览器账号的方法&#xff0c;见下图。 参考链接&#xff1a;奶酪真好次个人动态-奶酪真好次动态记录-哔哩哔哩视频 (bilibili.com)

【Linux】基本指令收尾

文章目录 日期查找打包压缩系统信息Linux和Windows互传文件 日期 这篇是基本指令的收尾了&#xff0c;还有几个基本指令我们需要说一下 首先是Date&#xff0c;它是用来显示时间和日期 直接输入date的话显示是有点不好看的&#xff0c;所以我们可以根据自己的喜欢加上分隔符&…

使用 Vector 在 Kubernetes 中收集日志

多年来&#xff0c;我们一直在使用 Vector 在我们的 Kubernetes 平台中收集日志&#xff0c;并成功地将其应用于生产中以满足各种客户的需求&#xff0c;并且非常享受这种体验。因此&#xff0c;我想与更大的社区分享它&#xff0c;以便更多的 K8s 运营商可以看到潜力并考虑他们…

【 CSS 】基础1

“坚持就是胜利。” - 温斯顿丘吉尔 【 CSS 】基础 1 CSS 简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称.有时我们也会称之为 CSS 样式表或级联样式表。CSS 也是一种标记语言CSS 主要用于设置 HTML 页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff…

Python使用gRPC入门,定义proto文件和收发消息

gRPC 一开始由 google 开发&#xff0c;是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。 本文通过一个简单的 Hello World 例子来向您介绍 gRPC 。 Grpc官方文档地址&#xff1a;Quick start | Python | gRPC gRPC 是什么&#xff1f; gRPC 也是基于以下理念&#…

Python武器库开发-武器库篇之Quake360-API使用(四十七)

Python武器库开发-武器库篇之Quake360-API使用(四十七) Quake360是一款网络资产搜索引擎&#xff0c;旨在帮助用户快速定位和识别网络上的资产信息。它具有强大的搜索功能&#xff0c;可以搜索并展示各种类型的网络资产&#xff0c;包括域名、IP地址、子域名、端口信息等。同时…

Unity编程#region..#endregion以及面板提示语标签[Tooltip(““)]

C#中的#region..#endregion 在Unity中&#xff0c;#region和#endregion是用于代码折叠的预处理指令。它们并不是Unity特有的&#xff0c;而是C#语言本身提供的功能。 #region用于标记一段代码的开始&#xff0c;而#endregion用于标记一段代码的结束。在编辑器中&#xff0c;可…

橡木桶陈酿:木材选择、烤制程度与陈酿时间

在威士忌的酿造过程中&#xff0c;橡木桶陈酿是一个至关重要的环节。橡木桶不仅为威士忌提供了特别的香气和风味&#xff0c;还赋予其丰富的颜色和味蕾。本文将深入探讨橡木桶陈酿的奥秘&#xff0c;特别是木材选择、烤制程度以及陈酿时间对威士忌风味的影响&#xff0c;以雷盛…

【Linux】解决普通用户无法进行sudo提权

当某个普通用户进行sudo指令提权的时候&#xff0c;可能存在无法操作的问题&#xff0c;如下图&#xff1a; 这个图中有一个细节&#xff0c;我们使用sudo进行提权的时候&#xff0c;用的可是zhangsan的密码&#xff0c;因此有人可能会有疑问&#xff0c;这不是有问题吗&#x…

安泰电子电压放大器的三个特性是指什么

电压放大器是一种主要用于将输入电压信号放大的电子器件。它的工作原理是通过增加电压信号的幅度&#xff0c;使得输出信号比输入信号有更大的电压差。电压放大器通常具有许多特性&#xff0c;其中三个主要特性包括增益、带宽和线性度。 增益是电压放大器最重要的特性之一。增益…

RabbitMQ-消息延迟

一、死信交换机 1、描述 一个队列接收到的消息有过期时间&#xff0c;消息过期之后&#xff0c;如果配置有死信队列&#xff0c;消息就会进去死信队列。 2、图解 3、过程 当生产者将消息发送到exchange1&#xff0c;然后交换机将消息路由到队列queue1&#xff0c;但是队列que…

JavaScript进阶:WebAPIs重点知识整理1

目录 1 DOM修改元素内容 2 DOM修改元素常见属性 3 修改元素样式属性 3.1 通过style修改元素样式 3.2 通过类名className修改元素样式 3.3 通过classList修改元素样式 4 操作表单元素属性 5 自定义属性 6 定时器 7 事件监听 7.1 点击事件 click 7.2 鼠mouseenter和移…

【Linux】权限 !

Linux 权限 Liunx Linux 权限1 什么是权限1.1 Linux用户1.2 切换用户 2 权限管理2.1 文件访问者的分类2.2 文件类型和访问权限2.3 文件权限的设置方法chmod 命令chown 命令chgrp 命令umask 命令file 指令 2.4 目录权限粘滞位 3 权限总结 1 什么是权限 关于Linux的权限问题&…

项目风险管理

风险分类&#xff1a; 分类性质&#xff1a;纯粹风险&#xff0c;投机风险---对应火灾&#xff0c;股票买卖 产生原因&#xff1a;自然&#xff0c;社会&#xff0c;政治&#xff0c;经济&#xff0c;技术 风险性质&#xff1a;客观性&#xff0c;偶然性&#xff0c;相对性&a…

28个炫酷的纯CSS特效动画示例(含源代码)

CSS是网页的三驾马车之一&#xff0c;是对页面布局的总管家&#xff0c;2024年了&#xff0c;这里列出28个超级炫酷的纯CSS动画示例&#xff0c;让您的网站更加炫目多彩。 文章目录 1. 涌动的弹簧效果2. 超逼真的3D篮球弹跳&#xff0c;含挤压弹起模态3. 鼠标放div上&#xff0…

基于ICEEMDAN-SpEn(样本熵)联合小波阈值去噪

代码原理 以样本熵为阈值的ICEEMDAN&#xff08;Incomplete Ensemble Empirical Mode Decomposition with Adaptive Noise&#xff09;联合小波阈值去噪是一种信号处理方法&#xff0c;用于去除信号中的噪声。它结合了ICEEMDAN分解和小波阈值去噪方法。 以下是该方法的步骤&a…