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

news2024/11/26 23:24:00

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

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

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

相关文章

embedding的综述

1 一文读懂Embedding的概念,以及它和深度学习的关系 one-hot 变成地位稠密的向量,降维 什么是词嵌入:讲词汇表中的词或者词语映射成固定长度的向量。 具体过程: one-hot变成低维连续的向量 语义相近的词语,词语赌…

大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明

大家好,我是微学AI,今天给大家讲一下大模型的实践应用6-百度文心一言的基础模型ERNIE的详细介绍,与BERT模型的比较说明。在大规模语料库上预先训练的BERT等神经语言表示模型可以很好地从纯文本中捕获丰富的语义模式,并通过微调的方式一致地提高各种NLP任务的性能。然而,现…

英伟达中国特供芯片是缩水版;华为 Mate60 Pro 国产零件价值占比 47%丨 RTE 开发者日报 Vol.84

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

这个双11,谁赚了?

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

人工智能学院承办南山区区块链公益职业技能培训

11月4日,南山区人力资源局主办、深圳职业技术大学承办的2023年南山区公益职业技能培训项目——区块链技术应用项目,于当天在深圳职业技术大学西丽湖校区图书馆西厅正式开班。此次培训将持续至11月18日。南山区人力资源局职业能力建设科科长张仁勇、人工智…

微服务简单理解与快速搭建

分布式和微服务 含义 微服务架构 微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服…

解密网络世界的秘密——Wireshark Mac/Win中文版网络抓包工具

在当今数字化时代,网络已经成为了人们生活和工作中不可或缺的一部分。然而,对于网络安全和性能的监控和分析却是一项重要而又复杂的任务。为了帮助用户更好地理解和解决网络中的问题,Wireshark作为一款强大的网络抓包工具,应运而生…

springboot+maven多环境动态配置,以及编译失败的解决方案

一、前言 在我们的项目开发过程中一般会有多套的环境,比如比较常见的会有三套: dev (研发环境),test(测试环境),prod(生产环境)。 application.yml 是主配置文件,当在不…

Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习

🧸欢迎来到dream_ready的博客,📜相信您对这篇博客也感兴趣o (ˉ▽ˉ;) 📜redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿 目录 1、复习 MySQl 事务的特性 2、Redis 事务特性 2.1、原子…

Debug知识点解析!超实用教程

一、Debug简介 二、IDEA中的Debug步骤 2.1 步过调试按钮(F8) 2.2 步入调试按钮(F7) 2.3 强制步入调试按钮(Alt Shift EZ) 2.4 步出调试按钮(Shift F8) 2.5 回退断点 2.6 运行到光标处(F9) 2.7 计算表达式按钮(Alt F8) 三、条件断点 在断点处右…

Project IDX简介——这是一项改进全栈、多平台应用程序开发的试验

如今,将应用程序从零开发到生产环境(尤其是在移动、网络和桌面平台上运行良好的应用程序)感觉就像构建一台 Rube Goldberg 机器。您必须在无尽的复杂性海洋中航行,将各种技术堆栈粘合在一起,以引导、编译、测试、部署和…

基于逐次变分模态分解(SVMD)联合小波阈值去噪

代码原理 逐次变分模态分解 (Iterative Variational Mode Decomposition, IVMD) 是一种信号分解方法,它可以将一个时域信号分解为若干个本征模态函数(Intrinsic Mode Functions, IMF)。它通过迭代寻找信号的本征模态函数和残差部分&#xff…

Ladybug 全景相机, 360°球形成像,带来全方位的视觉体验

360无死角全景照片总能给人带来强烈的视觉震撼,有着大片的既视感。那怎么才能拍出360球形照片呢?它的拍摄原理是通过图片某个点位为中心将图片其他部位螺旋式、旋转式处理,从而达到沉浸式体验的效果。俗话说“工欲善其事,必先利其…

.net core中前端vue HTML5 History 刷新页面404问题

放到启动的应用程序的最后面 app.Run(async (context) > {context.Response.ContentType "text/html";await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "index.html")); });https://blog.csdn.net/lee576/article/details/88355…

强化学习:原理与Python实战||一分钟秒懂人工智能对齐

文章目录 1.什么是人工智能对齐2.为什么要研究人工智能对齐3.人工智能对齐的常见方法延伸阅读 1.什么是人工智能对齐 人工智能对齐(AI Alignment)指让人工智能的行为符合人的意图和价值观。 人工智能系统可能会出现“不对齐”(misalign&…

647. 回文子串 516.最长回文子序列

647. 回文子串 题目: 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串,即使是由相…

ubuntu18.04配置Java环境与安装RCS库

一、安装包 安装包 二、JAVA环境 java无需安装,只需要下载解压,然后配置正确的路径到环境变量种即可使用。 1.创建文件JAVA mkdir JAVA 2.将安装包复制到该文件夹下,并解压缩 tar -zxvf tar -zxvf jdk1.8.0_191.tar.gz 3.在home路径下…

ubuntu小技巧30--23.10桌面版安装钉钉启动报错undefined symbol: FT_Get_Color_Glyph_Layer

ubuntu小技巧30-- 23.10桌面版安装钉钉启动报错undefined symbol: FT_Get_Color_Glyph_Layer 介绍解決方法说明 介绍 近期在电脑上安装了 ubuntu 23.10桌面版本, 安装最新版钉钉后无法正常打开软件,报错 undefined symbol: FT_Get_Color_Glyph_Layer ,具…

sqlyog安装和网址

网址Downloads webyog/sqlyog-community Wiki GitHub 1. 2. 3. 4. 5. 6. 7.

手写一个starter

文章目录 starter命令规则项目演示新建工程Pom引入依赖定义属性配置定义自动配置类配置EnableAutoConfiguration业务实现项目中使用 什么是Starter?Starter其实就是我们经常在maven中的导入的各种模块,自定义Starter可以快速的满足开发的需求&#xff0c…