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

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

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

相关文章

SQL编写规范【干货】

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目 2 SQL书写规范 3 SQL编写原则 获取所有软件开发资料:点我获取

TikTok女性创作者:媒体世界的新领袖

在数字时代,社交媒体已成为媒体和娱乐产业的关键组成部分,而TikTok作为最受欢迎的短视频分享平台之一,为女性创作者提供了一个独特的机会来在媒体世界中崭露头角。 这个平台不仅为女性创作者提供了一个创作和分享自己的声音、观点和创意的空…

Vue3中使用provide和inject依赖注入完成父组件和孙子组件之间参数传递

Vue3中使用provide和inject依赖注入完成父组件和孙子组件之间参数传递 官网介绍 注意以下写法都是使用setup 代码结构 依赖注入-父组件 import { ref, provide } from "vue"const outDialogCardInfo ref() function updateOutDialogCardInfo(item) {console.log…

初认识vue,v-for,v-if,v-bind,v-model,v-html等指令

vue 一.vue3介绍 1.为什么data是函数而不是对象? 因为vue是组件开发,组件会多次复用,data如果是对象,多次复用是共享,必须函数返回一个新的对象 1. 官网初识 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS …

【中间件篇-Redis缓存数据库07】Redis缓存使用问题及互联网运用

Redis缓存使用问题 数据一致性 只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题。 我以 Tomcat 向 MySQL 中写入和删改数据为例,来给你解释一下,数据的增删改操作具体是如何进行的。 我…

C# DirectoryInfo类的用法

在C#中,DirectoryInfo类是System.IO命名空间中的一个类,用于操作文件夹(目录)。通过DirectoryInfo类,我们可以方便地创建、删除、移动和枚举文件夹。本文将详细介绍DirectoryInfo类的常用方法和属性,并提供…

在搭建企业知识库时,这三个重要方面可不能忽略

随着信息时代的到来,企业面临着海量的信息和知识的挑战。为了更好地组织、管理和利用企业内部的知识资源,越来越多的企业开始搭建自己的知识库系统。 企业知识库是一个集中存储和管理知识、经验和信息的平台,它不仅可以提高企业的协作效率&a…

登上CMMLU性能评测榜单第一 四大维度解码夸克自研大模型

11月14日,拥有千亿参数的夸克自研大模型正式发布,立刻占据CMMLU榜单第一名。夸克大模型将应用于通用搜索、医疗健康、教育学习、职场办公等多个场景。性能方面,其整体水平已经超过GPT-3.5,其中在写作、考试等部分场景中可以超过GP…

C#多线程的操作

文章目录 1 使用线程意义2 C#线程开启的四种方式2.1 异步委托开启线程2.2 通过Thread类开启线程2.3 通过线程池开启线程2.4 通过任务Task开启线程 3 前台线程和后台线程简述3.1 前台线程3.2 后台线程 4 简述Thread和Task开启线程的区别4.1 Thread效果展示4.2 Task效果展示4.3 区…

ssm823基于ssm的心理预约咨询管理系统的设计与实现+vue

ssm823基于ssm的心理预约咨询管理系统的设计与实现vue 交流学习: 更多项目: 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示: ————————————————

一本了解生成式人工智能

上周,发了一篇关于大语言模型图数据库技术相结合的文章,引起了很多朋友的兴趣。当然了,这项技术本身就让俺们很兴奋,比如我就是从事图研发的,当然会非常关注它在图领域的应用与相互促就啦。 纵观人类文明历史&#xff…

Postman+Newman+Jenkins实现接口测试持续集成

近期在复习Postman的基础知识,在小破站上跟着百里老师系统复习了一遍,也做了一些笔记,希望可以给大家一点点启发。 1.新建一个项目 2.设置自定义工作空间 3.执行windows的批处理命令 4.执行系统的Groovy脚本 5.生成的HTML的报告集成到Jenkin…

大模型的全面回顾,看透大模型 | A Comprehensive Overview of Large Language Models

大模型的全面回顾:A Comprehensive Overview of Large Language Models 返回论文和资料目录 论文地址 1.导读 相比今年4月的中国人民大学发表的大模型综述,这篇综述角度更侧重于大模型的实现,更加硬核,更适合深入了解大模型的一…

MongoDB分片集群搭建

----前言 mongodb分片 一般用得比较少,需要较多的服务器,还有三种的角色 一般把mongodb的副本集应用得好就足够用了,可搭建多套mongodb复本集 mongodb分片技术 mongodb副本集可以解决数据备份、读性能的问题,但由于mongodb副本集是…

ai语音电销机器人电销行业要怎么降低封号率?

工信部对电话营销电话的管控越来越严格,企业电销行业的发展受到了很多限制,因为电话销售人员在进行销售工作的时候,经常会因为各种原因触发封号机制,导致手机卡号被封,那企业电销行业要怎么降低封号率? 很多…

应届裁员,天胡开局——谈谈我的前端一年经历

应届裁员,天胡开局——谈谈我的前端一年经历 许久没有更新了,最近一个月都在忙,没错,正如题目所说,裁员然后找工作… 这周刚重新上班,工作第二天,感慨良多,记录些什么吧。 去年十…

普通测径仪升级的智能测径仪 增添11大实用功能!

普通测径仪能对各种钢材进行非接触式的外径及椭圆度在线检测,测量数据准确且无损,可测、监测、超差提示、系统分析等。在此基础上,为测径仪进行了进一步升级制成智能测径仪,为其增添更多智能化模块,让其使用更加方便。…

PHP 论文发表管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 论文发表管理系统是一套完善的web设计系统mysql数据库 ,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 php 论文发表系统1 代码 https://download.csdn.net/download/qq_412213…

Vim + YCM + clangd

目录 1. Vim的安装 1.1 Vim安装vim-plug2. 安装YCM3. 进行语言补全配置 3.1 测试效果 1. 目的:让 Vim 像 C/C IDE 一样具备自动补全代码等功能 2. YCM:YouCompleteMe GitHub - ycm-core/YouCompleteMe: A code-completion engine for Vi…

德迅云安全为您介绍关于抗D盾的一些事

抗D盾概述: 抗D盾是新一代的智能分布式云接入系统,接入节点采用多机房集群部署模式,隐藏真实服务器IP,类似于网站CDN的节点接入,但是“抗D盾”是比CDN应用范围更广的接入方式,适合任何TCP 端类应用包括&am…