Git使用【下】

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:题目大解析(3)

在这里插入图片描述


目录

  • 👉🏻标签管理
    • 理解标签
    • 标签运用
  • 👉🏻多人协作一
    • 准备工作
    • 协作开发
    • 将内容合并进master
  • 👉🏻多人协作二
    • 协作开发(1)
    • 将内容合并进master
  • 👉🏻远程分⽀删除后,本地 git branch -a 依然能看到的解决办法
  • 👉🏻企业级开发模型
    • 企业级开发流程
    • 系统开发环境
    • git 分支设计模型

👉🏻标签管理

理解标签

标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项⽬发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样的标签来标识⾥程碑的意义。
这有什么⽤呢?相较于难以记住的 commit idtag 很好的解决这个问题,因为 tag ⼀定要给⼀个让⼈容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使⽤标签就能很快定位到。
在这里插入图片描述

标签运用

在 Git 中,可以使用以下命令来创建、查看和管理标签:

  1. 创建标签:

    • 轻量标签(Lightweight Tag):只是一个特定提交的引用,没有额外的信息。
      git tag <tag-name>
      //如果tag后没有指出commit id,则默认给最新的commit id打上标签
      
    • 附注标签(Annotated Tag):包含额外的信息,如作者、日期、说明等。
      git tag -a <tag-name> -m "Tag message"
      
  2. 查看标签:

    • 查看所有标签:
      git tag
      
    • 查看指定标签的详细信息:
      git show <tag-name>
      
  3. 切换到标签:

    • 可以切换到某个标签对应的提交状态,但是不能在标签上进行修改。
      git checkout <tag-name>
      
  4. 删除标签:

    • 删除本地标签:
      git tag -d <tag-name>
      
    • 删除远程标签:
      git push origin --delete <tag-name>
      
  5. 共享标签:

    • 将本地标签共享到远程仓库:
      git push origin <tag-name>
      
    • 所有本地标签一次性共享到远程仓库
      git push origin --tags
      

需要注意的是,标签默认只会推送到远程仓库的本地副本。如果想将标签共享给其他人,需要使用推送命令将标签推送到远程仓库。

另外,还可以使用 -l 选项来过滤标签,使用 --contains 来查找包含某个提交的标签,以及使用 --list 来列出符合指定模式的标签等。

综上所述,以上是一些常用的标签管理命令。在实际使用中,可以根据项目需要和个人习惯来灵活运用这些命令。

👉🏻多人协作一

在这里插入图片描述
此次多人协作目标
在这里插入图片描述
这里如果我们单独完成这一项任务,开发者1的开发环境在我们买的云服务器上,
开发者2的开发环境在本地windows上。

准备工作

✢:先在远程仓库中创建分支(这个操作可以在gitee上完成,也可以在本地完成)
我们直接用前者方法完成
在这里插入图片描述
此时远程仓库和本地仓库的情况如下:
在这里插入图片描述

git branch -r //可以在本地查看远程仓库分支

在这里插入图片描述
此时我们想让本地仓库同步远程仓库中的dev分支。
我们可以用git pull 拉取远程仓库
在这里插入图片描述
开发者1的准备工作已经好了。

此时我们要在window下为开发者2进行部署准备工作。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时当前文件夹就会clone远程仓库了
在这里插入图片描述

远程仓库和本地仓库的情况如下:
在这里插入图片描述

协作开发

在这里插入图片描述
这里我们要在本地开发,肯定不能在master分支上进行开发,所以要再创建一个分支dev。
这里我们做了一个操作:将分支dev和origin/dev连接起来了。
用命令可查看分支连接关系

git branch -vv 

☃️这里我们补充一下本地仓库与远程仓库连接的知识点。

将本地仓库与远程仓库连接起来有以下好处:

  1. 备份和恢复:通过将本地仓库推送到远程仓库,可以实现代码的备份。如果本地仓库发生损坏或意外删除,可以从远程仓库中恢复代码。

  2. 协作开发:多人协作开发时,通过连接远程仓库,可以方便地共享代码,并进行版本控制和合并工作。团队成员可以通过拉取(pull)远程仓库的代码,进行修改和提交,并通过推送(push)更新到远程仓库。

  3. 跨多个工作环境访问代码:通过连接远程仓库,可以在不同的工作环境(如多台计算机或团队成员之间)之间访问相同的代码库,方便查看和修改代码。

要建立本地仓库和远程仓库的连接,需要进行以下步骤:

  1. 创建远程仓库:在远程代码托管平台(如GitHub、GitLab等)上创建一个仓库,并获取远程仓库的 URL。

  2. 将本地仓库与远程仓库关联:

    • 如果在本地仓库中没有关联远程仓库,可以使用命令 git remote add origin <remote-url> 将本地仓库与远程仓库关联起来。其中,origin 是远程仓库的别名,可以自定义。
    • 如果已经关联了其他远程仓库,可以使用命令 git remote set-url origin <remote-url> 来修改远程仓库的 URL。
  3. 推送和拉取代码:

    • 推送代码:使用 git push origin <branch-name> 命令将本地分支的代码推送到远程仓库。例如,git push origin master 将本地 master 分支的代码推送到远程仓库中。
    • 拉取代码:使用 git pull origin <branch-name> 命令从远程仓库拉取最新的代码到本地仓库和工作目录中。例如,git pull origin master 从远程仓库的 master 分支拉取最新代码。

⭐️连接建立后,可以使用简短的命令进行操作,如 git pushgit pull,它们会默认将代码推送到和拉取自动与当前分支关联的远程仓库和分支上。


现在我们在dev分支下进行在file.txt中添加"aaa"内容,并add,commit
在这里插入图片描述
此时因为我们已经建立连接,所以可以直接进行简短的命令git push
在这里插入图片描述
同理开发者2进行同样操作。
在这里插入图片描述
创建一个分支dev。

在这里插入图片描述
此时再add、commit、push该内容
在这里插入图片描述
但是在push这里出错了,原因是出现了合并冲突

所以解决办法:先用git pull将远程仓库的内容拉取下来,然后在本地分支上进行手动修改代码再push提交
在这里插入图片描述

git branch --set-upstream-to=origin/<branch> dev

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
最后我们再进行push就大功告成了。
在这里插入图片描述
在这里插入图片描述

将内容合并进master

这里我们有两种方法;
1.使用pull request文件,将dev分支放入申请单中,若管理员审批通过,即可合并到master分支中(建议使用)
2.本地操作:先将dev分支merge进本地master分支,最后再将master push即可

但我们这里先使用方法2来演示
这里操作顺序如下:👇🏻
1.先git pull同步远程仓库,有人会疑问会什么这里要先同步远程仓库?
实际上,在开发中,远程仓库的master是不断在更新的,为了保证我们的master状态是最新的,我们要同步远程仓库使其先达到最新状态

2.在dev分支上merge master,有合并冲突在dev分支上解决,不影响master(我们之前说过)

3.最后在master分支上merge dev,最后push 到远程仓库。

在这里插入图片描述
此时,我们的多人协作就此完成!

🌈 总结一下
在同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样
• 首先,可以试图⽤ git push origin branch-name 推送⾃⼰的修改;
• 如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤ git pull 试图合并;
• 如果合并有冲突,则解决冲突,并在本地提交;
• 没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
• 功能开发完毕,将分⽀ merge 进 master,最后删除分⽀。

👉🏻多人协作二

此次多人协作目标
在这里插入图片描述

协作开发(1)

开发者1🫡
在这里插入图片描述
开发者2🫡

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


这里我们发现不论是开发者1还是开发者2push后,居然都没有出现合并冲突。

原因是因为两个开发者此时都处于各自私有的分支上开发,彼此分支互不影响,所以是不会有合并冲突的


此时出现了一个小意外,开发者2生病了🤧🤧,需要开发者1到feature-2分支上进行帮忙开发,此时情况来到了我们刚刚多人开发一中的情况
在这里插入图片描述
原因是git pull分两种情况:

  • 拉取分支内容:需要连接
  • 拉取仓库内容:不需要连接
    我们刚刚拉取的feature-2分支信息属于仓库内容。所以不需要连接

在这里插入图片描述
此时开发者2痊愈了,回到岗位上,更新仓库后即可看到开发者1给他写的代码。
在这里插入图片描述


将内容合并进master

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时再合并feature-1
但需注意:
在这里插入图片描述
所以得先在feature-1合并master
在这里插入图片描述
在这里插入图片描述
此时我们在在gitee中创建一个pull request库接收合并就可以了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此已大功告成!

👉🏻远程分⽀删除后,本地 git branch -a 依然能看到的解决办法

在这里插入图片描述
在这里插入图片描述

git remote prune

在这里插入图片描述

👉🏻企业级开发模型

企业级开发流程

我们知道,⼀个软件从零开始到最终交付,⼤概包括以下⼏个阶段:规划、编码、构建、测试、发
布、部署和维护。

最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完成所有阶段的⼯作。但随着软件产业的⽇益
发展壮⼤,软件的规模也在逐渐变得庞⼤。软件的复杂度不断攀升,⼀个⼈已经hold不住了,就开始
出现了精细化分⼯。如下图所示:
在这里插入图片描述
但在传统的 IT 组织下,开发团队(Dev)和运维团队(Ops)之间诉求不同:

• 开发团队(尤其是敏捷团队)追求变化
• 运维团队追求稳定

双⽅往往存在利益的冲突。⽐如,精益和敏捷的团队把持续交付作为⽬标,⽽运维团队则为了线上的
稳定⽽强调变更控制部⻔墙由此建⽴起来,这当然不利于 IT 价值的最⼤化。
为了弥合开发和运维之间的鸿沟,需要在⽂化、⼯具和实践⽅⾯的系列变⾰⸺DevOps正式登上舞
台。

DevOps(Development和Operations的组合词)是⼀种重视“软件开发⼈员(Dev)”和“IT运维技
术⼈员(Ops)”之间沟通合作的⽂化、运动或惯例。透过⾃动化“软件交付”和“架构变更”的流
程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计
划、编码、构建、测试、预发布、发布、运维、监控,由此可⻅DevOps的强⼤。

想更多了解DevOps参考👉🏻:DevOps到底是什么意思?

讲了这么多,这个故事到底和我们课程的主题 Git 有什么关系呢?
举⼀个很简单的例⼦就能说明这个问题。⼀个软件的迭代,在我们开发⼈员看来,说⽩了就是对代码
进⾏迭代,那么就需要对代码进⾏管理
。如何管理我们的代码呢,那不就是 Git(分布式版本控制系
统)
!所以 Git 对于我们开发⼈员来说其重要性就不言而喻了。

系统开发环境

对于开发⼈员来说,在系统开发过程中最常⽤的⼏个环境必须要了解⼀下:

  1. 开发环境:开发环境是程序猿们专⻔⽤于⽇常开发的服务器。为了开发调试⽅便,⼀般打开全部错
    误报告和测试⼯具,是最基础的环境。
  2. 测试环境:⼀个程序在测试环境⼯作不正常,那么肯定不能把它发布到⽣产机上。该环境是开发环
    境到⽣产环境的过渡环境。
  3. 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测⽽设⽴的⼀套环境。
    其配置等基本和⽣产环境⼀致,⽬的是能让我们发正式环境时更有把握!所以预发布环境是你的产
    品质量最后⼀道防线,因为下⼀步你的项⽬就要上线了。要注意预发布环境服务器不在线上集成服
    务器范围之内,为单独的⼀些机器。
  4. ⽣产环境:是指正式提供对外服务的线上环境,例如我们⽬前在移动端或PC端能访问到的APP都是
    ⽣产环境。
    这⼏个环境也可以说是系统开发的三个重要阶段:开发->测试->上线。⼀张图总结:
    在这里插入图片描述
    对于规模稍微⼤点的公司来说,可不⽌这么⼏个环境,⽐如项⽬正式上线前还存在仿真/灰度环境,再
    ⽐如还存在多套测试环境,以满⾜不同版本上线前测试的需要。

灰度环境是一种软件发布的策略,用于在实际生产环境之前进行有限的、部分用户的测试和验证。它是介于开发环境和生产环境之间的一个中间环境,可以让开发人员和测试人员在真实用户环境下验证和评估新功能或更新的性能和稳定性,以及收集用户反馈进行改进。灰度环境通过将新功能或更新逐渐应用于一小部分用户,以实现控制风险并确保整体系统稳定。

⼀个项⽬的开始从设计开始,⽽⼀个项⽬的成功则从测试开始。⼀套良好的测试体系可以将系统中绝
⼤部分的致命Bug 解决在系统上线之前。测试系统的完善和成熟也是衡量⼀个软件企业整体⽔平的重
要指标之⼀,测试往往被忽视,因为它对可以的隐性、对软件开发企业不产⽣直接的效益,但是它却
是软件质量的最终保障,乃⾄项⽬能否成功的重要因素!

git 分支设计模型

环境有了概念后,那么对于开发⼈员来说,⼀般会针对不同的环境来设计分⽀,例如:

分支名称适用环境
master主分⽀⽣产环境
release预发布分⽀预发布/测试环境
develop开发分支开发环境
feature需求开发分支本地
hotfix紧急修复分支本地

Git 分支模型中常用的分支包括以下五种:

  1. master 分支:主分支,也是最稳定的分支,用于发布产品或者版本,该分⽀为只读且唯⼀分⽀。通常只有在完成新功能开发或者进行 hotfix 后,⼀般由合并release 分⽀得到

  2. develop 分支:开发分支,用于进行日常开发的分支,只读且唯⼀分⽀。通常是从 master 分支创建而来,并在开发一个新功能或者一系列功能时持续更新。

  3. feature 分支:特性分支,用于开发具体的新功能。在从 develop 分支创建后,我们就可以在该分支上进行新功能开发,开发完成后再将该分支合并回 develop 分支。

  4. release 分支:发布分支,用于发布新版本或者产品。当所有的功能都已完成开发并通过测试后,从 develop 分支创建一个 release 分支,该分支如果需要进行 bug 修复,则会在该分支上进行,完成后再合并到主分支和开发分支上,release 分⽀属于临时分⽀,产品上线后可选删除。

  5. hotfix 分支:紧急修复分支,用于快速修复生产环境的 bug。当主分支上出现紧急问题需要快速修复时,我们会从主分支上创建一个 hotfix 分支,完成修复后再合并回主分支和开发分支上。

这些分支之间的关系通常如下图所示:

在这里插入图片描述


如上便是本期的所有内容了,如果喜欢并觉得有帮助的话,希望可以博个点赞+收藏+关注🌹🌹🌹❤️ 🧡 💛,学海无涯苦作舟,愿与君一起共勉成长

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

SSM - Springboot - MyBatis-Plus 全栈体系(十七)

第三章 MyBatis 五、MyBatis 高级扩展 1. mapper 批量映射优化 1.1 需求 Mapper 配置文件很多时&#xff0c;在全局配置文件中一个一个注册太麻烦&#xff0c;希望有一个办法能够一劳永逸。 1.2 配置方式 Mybatis 允许在指定 Mapper 映射文件时&#xff0c;只指定其所在的…

函数、函数的傅里叶级数展开、傅里叶级数的和函数之间的关系

1.函数、函数的傅里叶级数展开、傅里叶级数的和函数之间的关系 1.1 傅里叶级数中的系数公式推导 我们先来推导一下傅里叶级数中的系数公式&#xff0c;其实笔者已经写过一篇相关笔记&#xff0c;详见&#xff1a;为什么要把一个函数分解成三角函数?(傅利叶级数) f ( x )…

用AI原生向量数据库Milvus Cloud 搭建一个 AI 聊天机器人

搭建聊天机器人 一切准备就绪后,就可以搭建聊天机器人了。 文档存储 机器人需要存储文档块以及使用 Towhee 提取出的文档块向量。在这个步骤中,我们需要用到 Milvus。 安装轻量版 Milvus Lite,使用以下命令运行 Milvus 服务器: (chatbot_venv) [egoebelbecker@ares milvus_…

Python中匹配模糊的字符串

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如何使用thefuzz 库&#xff0c;它允许我们在python中进行模糊字符串匹配。 此外&#xff0c;我们将学习如何使用process 模块&#xff0c;该模块允许我们在模糊…

条件查询和数据查询

一、后端 1.controller层 package com.like.controller;import com.like.common.CommonDto; import com.like.entity.User; import com.like.service.UserService; import jakarta.annotation.Resource; import org.springframework.web.bind.annotation.GetMapping; import …

C语言 —— 函数

目录 1. 函数是什么 2. C语言中函数的分类 2.1 库函数 2.2 自定义函数 3. 函数的参数 3.1 实际参数(实参) 3.2 形式参数(形参) 4. 函数的调用 4.1 传值调用 4.2 传址调用 5. 函数的嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 6. 函数的声明和定义 6.1函数声明…

24Hibench

1. Hibench 官网 ​ HiBench is a big data benchmark suite that helps evaluate different big data frameworks in terms of speed, throughput and system resource utilizations. It contains a set of Hadoop, Spark and streaming workloads, including Sort, WordCou…

JavaSE | 初始Java(九) | 包的使用

包 包是对类、接口等的封装机制的体现&#xff0c;是一种对类或者接口等的很好的组织方式&#xff0c;比如&#xff1a;一个包中的类不想被其他包中的类使用。包还有一个重要的作用&#xff1a;在同一个工程中允许存在相同名称的类&#xff0c;只要处在不同的包中即可。 可以…

软断言你也学不会

断言是测试用例的一部分&#xff0c;也是测试工程师开发测试用例的核心。断言通常集成在单元测试和集成测试中&#xff0c;断言分为硬断言和软断言。 硬断言是我们狭义上听到的普通断言:当用例运行后得到的[实际]结果与预期结果不匹配时&#xff0c;测试框架将停止测试执行并抛…

Python实时采集Windows CPU\MEMORY\HDD使用率

文章目录 安装psutil库在Python脚本中导入psutil库获取CPU当前使用率&#xff0c;并打印结果获取内存当前使用率&#xff0c;并打印结果获取磁盘当前使用情况&#xff0c;并打印结果推荐阅读 要通过Python实时采集Windows性能计数器的数据&#xff0c;你可以使用psutil库。psut…

AutoCAD 产品设计:图形单位

本文讲解 AutoCAD 产品的图形单位功能产品设计&#xff0c;没有任何代码实现。 使用的 AutoCAD 为 2020 版本 图形单位是什么&#xff1f; 图形单位是用于设置 一些属性数据应该用什么格式显示 的命令&#xff0c;命令标识为 un&#xff08;units&#xff09;。 举个例子。 …

WebGL笔记:绘制多个点,三角形,以及画各种不同的线条,面

绘制多点 1 &#xff09; WebGL 缓冲区 我们在用js定点位的时候&#xff0c;肯定是要建立一份顶点数据的&#xff0c;这份顶点数据是给着色器的&#xff0c;因为着色器需要这份顶点数据绘图然而&#xff0c;我们在js中建立顶点数据&#xff0c;着色器肯定是拿不到的&#xff…

基于SpringBoot的反诈宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

SpringBoot注册web组件

目录 前言 一、注册Servlet组件 1.1 使用SpringBoot注解加继承HttpServet类注册 1.2 通过继承HttpServet类加配置类来进行注册 二、注册Listener组件 2.1 使用SpringBoot注解和实现ServletContextListener接口注册 2.2 ServletContextListener接口和配置类来进行注册 …

【Spring】Spring 创建和使用

Spring 创建和使用 一. 创建 Spring 项目1. 创建⼀个 Maven 项目2. 添加 Spring 框架⽀持3. 添加启动类 二. 存储 Bean 对象1. 创建 Bean2. 将 Bean 注册到容器 三. 获取并使⽤ Bean 对象1. 创建 Spring 上下文2. 获取指定的 Bean 对象3. 使用 Bean Spring 就是⼀个包含了众多⼯…

【vue3】wacth监听,监听ref定义的数据,监听reactive定义的数据,详解踩坑点

假期第二篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 之前已经记录了一篇【vue3基础知识点-computed和watch】 今天在学习的过程中发现&#xff0c;之前记录的这一篇果然是很基础的&#xff0c;很多东西都讲的不够…

python复习

1.python属于解释型语言&#xff0c;解释器逐行解释每一句代码&#xff0c;然后执行 编译型语言需要由编译器生成最终可执行文件再执行 2. #单行注释""" 多行注释 """ 注释快捷键ctrl/ 3.变量是在计算机语言中能储存计算结果或表示某个数据…

Docker介绍与安装

目录 一、Docker 概述 1、什么时Docker 2、Docker的设计宗旨 4、Docker的优点 5、Docker容器和虚拟机的区别 6、 namespace的隔离&#xff08;命名空间&#xff09; 7、 Docker的三个核心概念 7.1 镜像 7.2 容器 7.3 仓库&#xff08;Docker Hapu&#xff09; 二、D…

Sentinel-2波段合成

Sentinel-2波段合成 在上一篇博客中下载了Sentinel-2数据&#xff0c;他有13个波段的.jp2文件&#xff0c;下面选取需要使用的波段进行合成。 导入了B2&#xff08;蓝色&#xff09;、B3&#xff08;绿色&#xff09;、B4&#xff08;红色&#xff09;、B8&#xff08;近红外&…

Linux--网络编程-字节序

进程间的通信&#xff1a; 管道、消息队列、共享内存、信号、信号量。 特点&#xff1a;都依赖于linux内核。 缺陷&#xff1a;无法多机通信。 一、网络编程&#xff1a; 1、地址&#xff1a;基于网络&#xff0c;ip地址端口号。 端口号作用&#xff1a; 一台拥有ip地址的主机…