git分支管理以及不同git工作流对比

0、 单人开发场景

单人开发可能会出现的场景之一
在这里插入图片描述

如果多人协同开发我们则需要使用更加专业的工具Git(分布式版本控制)

1、多人协同工作使用git会出现什么问题?

代码冲突:

问题: 当多个开发者同时修改同一文件或同一行代码时,可能会发生冲突,导致合并失败。
解决: 定期拉取最新的代码,确保本地工作副本是最新的。解决冲突时,可以使用合并工具手动解决,或者与其他开发者协商如何合并。

分支管理问题:

问题: 不正确的分支管理可能导致代码混乱,不同功能或修复可能在不同的分支上进行,但合并不当可能导致问题。
解决: 采用清晰的分支策略,例如使用 Gitflow、GitHub Flow 或 GitLab Flow。确保团队成员了解并遵循这些策略。

不一致的编码规范:

问题: 不同的开发者可能有不同的编码风格和规范,导致代码难以阅读和维护。
解决: 使用代码审查工具来强制一致的编码规范。在团队中共享和讨论编码规范,并确保团队成员了解和遵循。

优秀的git commit(上) 和 一般的git commit(下)
在这里插入图片描述
在这里插入图片描述

2、目前所遇见的问题:

现状:分支管理没有特别约束,代码提交没有强约束,review难度大,回溯问题难。

期望:参考gitlabflow或者gitflow的分支管理,在开发过程中依靠约束提升质量。

3、什么是git工作流?

一套定义了在使用 Git 进行版本控制时如何组织和管理代码的规范或指南。

而当项目处于一个多人协作的状态下,工作流程显得非常之重要。假设当两个甚至多个开发者同时再开发各自新功能时,如果在同一分支上进行协作时,这必然会产生大量的冲突。

而工作流的做法,就是每个开发者可以各自切出一个独立分支,当各自功能实现并且测试成功后,再自行合并到master分支中,甚至无需等待其他功能实现再一起发布。

目的:就是对git分支的进行规范和管理

4、常见的git工作流有哪些?

GItflow、Githubflow、GItlabflow(git工作流不是软件,而是规范)

Gitflow:

Gitflow 使用了一种复杂的分支模型,其中包括 master、develop、feature、release 和 hotfix 分支。

Master分支:

该分支主要用来存放稳定、随时可以上线的版本。

这个分支的来源只能从别的分支合并过来,开发者不会直接commit到这个分支上。

通常我们也会在这个分支上的提交打上版本号标签。

Develop分支:

这个分支主要是所有开发的基础分支。

当要添加功能时,所有功能都是从这个分支切出去的,而功能分支实现后,也都会合并回来这个分支中。

master和develop分支是我们最常见的分支,它们被称作长期分支,一直存活在整个工作流程中,而其它的分支大部分会因任务结束而被删除。

Feature 分支: 功能开发在独立的 feature 分支上进行,完成后合并回 develop 分支。

Release 分支:

发布前的准备工作在 release 分支上进行,包括版本号的增加和文档的更新。
当develop分支完成需求后,就可以从develop分支中开一个release分支,进行上线前最后的测试。
测试完成后,释放release分支将会同时合并到master以及develop分支中。

Hotfix 分支: 针对生产环境的紧急修复在 hotfix 分支上进行。

常见的gitflow开发流程如下图所示:
在这里插入图片描述

GitHub Flow:

GitHub Flow 是一种更简化的工作流,只包含 master 分支和短暂的 feature 分支。

Master分支:只有这一个长期存在的分支
Feature 分支: 功能开发在独立的 feature 分支上进行,完成后通过 Pull Request (PR)合并到 master 分支。
PR其实就是code review和discuss

常见的github flow开发流程如下图所示:
在这里插入图片描述

GitLab Flow:

GitLab Flow 介于 Gitflow 和 GitHub Flow 之间,它只包含 master 和短暂的 feature 分支,但还包括 production 分支用于持续交付。

吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。

Gitlab flow 的最大原则叫做”上游优先”(upsteam first),即只存在一个主分支master,它是所有其他分支的”上游”。只有上游分支采纳的代码变化,才能应用到其他分支。

对于”持续发布”的项目,它建议在master分支以外,再建立不同的环境分支。比如,”开发环境”的分支是master,”预发环境”的分支是pre-production,”生产环境”的分支是production。

Master分支:主线

Feature 分支:

功能开发在独立的 feature 分支上进行,完成后通过 Merge Request 合并到 master 分支。

Production 分支:

master 分支中的代码被视为处于开发阶段,而 production 分支则用于生产环境部署,确保每次合并到 production 分支的代码都是稳定和可部署的。

常见的gitlab flow开发流程如下图所示:
在这里插入图片描述

对于”持续发布”的项目,它建议在master分支以外,再建立不同的环境分支。
比如,”开发环境”的分支是master,”预发环境”的分支是pre-production,”生产环境”的分支是production。

5、如何选择一个合适的git工作流

总结:不同的项目和团队需要根据情况采用不同的工作流

gitflowgithubflowgitlabflow
使用复杂程度复杂简单适中
适用场景大型项目和复杂发布流程敏捷开发和持续交付对生产环境的持续交付

6、其他规范

commit规范:都需要写Commit message(提交说明)
master分支必须是protected
分支命名规范:feature-xxx,release-xxx,fixbug-xxx
合并分支:使用merge还是rebase
规范的提issue;例如提出issue,并且建立分支解决issue,然后关闭issue
合理的创建tag

参考引用

https://www.zhihu.com/question/379545619/answer/1082534586
https://www.ruanyifeng.com/blog/2015/12/git-workflow.html
https://blog.csdn.net/qq_35246620/article/details/65636022
https://www.cnblogs.com/xiaoqi/p/gitlab-flow.html
https://zhuanlan.zhihu.com/p/342020501
https://juejin.cn/post/6989145079667490847

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之基于YoloV5的目标检测和双目测距系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 双目测距系统利用两个相机的图像来计算目标到相机的距离。通过对左右相机图像进行立体匹配,可以获得目标…

如果不用Baklib,哪一个帮助中心工具能够替代它?

在各行各业进入“留量时代”的当下,让用户获得良好的体验和留存老客户变得更为关键,这对于企业的客户服务提出了更高的要求。在使用各类互联网产品时,用户更倾向于通过自助方式寻找答案并解决问题,因此帮助中心的重要性也在不断提…

excel用RAND函数生成一个大于0小于1的随机数

插入-》函数: 选择RAND函数: 点击“继续”: 点击“确定”,就生成随机数了:

这个双11,谁赚了?

双11落幕,很多品牌迎来一年中最重要的一次生意爆发,但作为普通消费者,还是能感受到今年双11的消费氛围减弱了,一方面,电商大促驱向常态化,双11不一定是全年最低价,“有需要再买”的心态越来越多…

Domino为外出Internet邮件设置DKIM签名

大家好,才是真的好。 如果你看了上篇《Domino中和邮件安全有关的SPF、DKIM介绍》内容,想必就对DKIM概念不陌生,当然,上篇我们讲的是邮件入站的SFP、DKIM签名检查,这篇讲述的是外出邮件的DKIM签名。 是的,…

【第2章 Node.js基础】2.4 Node.js 全局对象(二) process 对象

process对象是一个全局对象,提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例,因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的process对象事件&…

抖音直播 **** 匿名采集

2023年11月14日,弹幕消息为纯协议,可采集匿名直播间,可以采集发言,礼物,点赞,关注等匿名信息,不漏消息,所有消息均可采集 抖音直播***匿名采集2023-11-14 演示效果仅演示了发言类型的…

java入门,从CK到一部分数据到mysql

一、需求 需要从生产环境ck数据库导数据到mysql,数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库,第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份,或者将需要导出的数据建一张新的表了…

Vscode编辑器保存时一直提示正在保存“index.vue”: 正在从“‘Vetur‘, ‘ESLint‘”获取代码操作

问题描述: Vscode在使用了Vetur, ESLint两个扩展配置了vue文件语法检查,保存时自动fix,经常会出现卡死,通知内容如下: 正在保存“index.vue”: 正在从“Vetur, ESLint”获取代码操作; 解决办法&#xff1a…

【MongoDB】索引 – 通配符索引

一、准备工作 这里准备一些数据 db.books.drop();db.books.insert({_id: 1, name: "Java", alias: "java 入门", description: "入门图书" }); db.books.insert({_id: 2, name: "C", alias: "c", description: "C 入…

APUS与深圳大学大数据国家工程实验室联合训练开源中文大模型

日前,APUS与深圳大学大数据系统计算技术国家工程实验室(以下简称“国家工程实验室”)达成战略合作。双方集成各自优势联合开发、开源高性能中文多模态大模型Linly-Chinese-LLaMA-2-70B。该模型将更加适配中文服务场景,计划于2024年…

软文推广怎么做才能起效?媒介盒子为你解答

随着软文推广的逐渐,越来越多的企业开始注重如何推广才能起效,软文作为一种柔性的广告方式能够自然融入用户使用场景中,提高广告的曝光率和转化率,然后软文推广并不是保证软文质量就能起效,还需要经过别的步骤&#xf…

Nacos 身份认证绕过漏洞(已修复)

Nacos存在权限绕过漏洞,攻击者利用该漏洞可以未授权访问用户列表(我的Nacos版本为1.2.1) 漏洞复现:http://127.0.0.1:8849/nacos/v1/auth/users?pageNo1&pageSize9 利用漏洞复现问题http://127.0.0.1:8849/nacos/v1/auth/us…

Vue3源码reactive和readonly对象嵌套转换,及实现shallowReadonly

前言 官方文档中对reactive的描述: 响应式转换是“深层”的:它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性,同时保持响应性。 官方文档中对readonly的描述: 只读代理是深层的:对任何嵌套属性的访问都将是…

数字化时代的甜蜜梦境,拓世AI女友带你探索全新互动体验

只要花42块钱,就能被6个大美女疯狂倒追,听起来像科幻文对吧? 最近,一款真人互动游戏《完蛋!我被美女包围了!》(以下简称《完蛋》)爆火,不仅霸榜Steam国内畅销榜首&#…

python的高性能web应用的开发与测试实验

引言 python语言一直以开发效率高著称,被广泛地应用于自动化领域: 测试自动化运维自动化构建发布自动化 但是因为其也具有如下两个特征: 解释型语言GIL全局解释器锁 前者导致其性能天然就被编译型语言在性能上落后了许多。而后者则在多核…

美国站群服务器IP如何设置分配?

​  在配置美国站群服务器时,IP的分配是一个重要的步骤。下面将介绍一些关于美国站群服务器IP分配的相关知识。 独享IP和虚拟IP 在租用美国站群服务器之前,我们需要了解提供的IP是独享的还是虚拟的。独享IP指每个网站都有独立的IP地址,而虚…

如何制作出高级感满满的的照片书

随着数码相机的普及,越来越多的人喜欢将生活中的点滴美好记录下来,其中照片书就是一种非常受欢迎的方式。但是,如何制作出高级感满满的“照片书”呢?今天,我们就来分享几个小技巧,帮助你轻松打造出令人惊艳…

VEX —— Half-edges

目录 一,概述 二,等效 三,函数 在一些VEX函数,可将边看成为每个面非共享的半边; 一,概述 在houdini,边通常被视为面之间无方向且共享的,然而,对于一些任务&#xff08…

【云计算网络安全】DDoS 攻击类型:什么是 ACK 洪水 DDoS 攻击

文章目录 一、什么是 ACK 洪水 DDoS 攻击?二、什么是数据包?三、什么是 ACK 数据包?四、ACK 洪水攻击如何工作?五、SYN ACK 洪水攻击如何工作?六、文末送书《AWD特训营》内容简介读者对象 一、什么是 ACK 洪水 DDoS 攻…