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.hqwc.cn/news/124260.html

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

相关文章

苹果ios系统ipa文件企业签名是什么?优势是什么?什么场合需要应用到?

企业签名是苹果开发者计划中的一种签名类型&#xff0c;允许企业开发者签署和分发企业内部使用的应用程序&#xff0c;而无需通过App Store进行公开发布。通过企业签名&#xff0c;企业可以在内部部署自己的应用程序&#xff0c;以满足特定的业务需求。 企业签名能够做到以下…

【C语言】汉诺塔 —— 详解

一、介绍 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大焚天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大焚天命令婆罗门把圆盘从下面开始按…

认知智能最新研究成果

声明&#xff1a;以下内容仅代表个人对现象和本质探索&#xff0c;不代表对学术成果评价。曾有幸和马文明斯基的学生段老师和方老师一起讨论过人工智能问题。随着自己对问题进一步理解&#xff0c;刚好18年左右开始接触认知智能理论核心认知计算部分。 第一&#xff1a;算法是一…

互联网Java工程师面试题·MyBatis 篇·第二弹

目录 16、Xml 映射文件中&#xff0c;除了常见的 select|insert|updae|delete标签之外&#xff0c;还有哪些标签&#xff1f; 17、Mybatis 的 Xml 映射文件中&#xff0c;不同的 Xml 映射文件&#xff0c;id 是否可以重复&#xff1f; 18、为什么说 Mybatis 是半自动 ORM 映射…

Java泛型理解

什么是泛型&#xff1f; 我们都知道 Java 中有形参和实参之分&#xff0c;是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数&#xff0c;其本身没有确定的值。在调用函数时&#xff0c;实参将赋值给形参。 而泛型是一种参数化的类型&#xff08…

Linux进程概念(上)

冯诺依曼体系结构 这里谈论的体系结构指的是计算机组成 常见的计算机&#xff0c;如笔记本&#xff0c;不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 计算机&#xff0c;都由一个个的硬件组件组成 输入单元&#xff1a;如键盘&#xff0c;…

多源最短路径的原理及C++实现

时间复杂度 O(n3),n是端点数。 核心代码 template<class T, T INF 1000 * 1000 * 1000> class CNeiBoMat { public: CNeiBoMat(int n, const vector<vector<int>>& edges,bool bDirectfalse,bool b1Base false) { m_vMat.assign(n, vector<…

MySQL5.7版本与8.0版本在Ubuntu(WSL环境)系统安装

目录 前提条件 1. MySQL5.7版本在Ubuntu&#xff08;WSL环境&#xff09;系统安装 1. 1 下载apt仓库文件 1.2 配置apt仓库 1.3 更新apt仓库的信息 1.4 检查是否成功配置MySQL5.7的仓库 5. 安装MySQL5.7 1.6 启动MySQL 1.7 对MySQL进行初始化 1.7.1 输入密码 …

Android 面试经历复盘整理~

此次面试一共4面4小时&#xff0c;中间只有几分钟间隔。对持续的面试状态考验还是蛮大的。 关于面试的心态&#xff0c;保持悲观的乐观主义心态比较好。面前做面试准备时保持悲观&#xff0c;尽可能的做足准备。面后积极做复盘&#xff0c;乐观的接受最终结果。 切忌急于下结论…

IDM(Internet Download Manager)2024中文版下载工具软件

IDM&#xff08;Internet Download Manager&#xff09;&#xff1a;功能强大&#xff0c;下载速度快&#xff0c;支持多线程下载&#xff0c;下载过程中遇到突然断电等情况&#xff0c;可以进行断点续传&#xff0c;很多人因此而首选IDM。 优点&#xff1a; &#xff08;1&a…

嵌入式Linux应用开发-驱动大全-同步与互斥③

嵌入式Linux应用开发-驱动大全-同步与互斥③ 第一章 同步与互斥③1.4 Linux锁的介绍与使用1.4.1 锁的类型1.4.1.1 自旋锁1.4.1.2 睡眠锁 1.4.2 锁的内核函数1.4.2.1 自旋锁1.4.2.2 信号量1.4.2.3 互斥量1.4.2.4 semaphore和 mutex的区别 1.4.3 何时用何种锁1.4.4 内核抢占(pree…

2023蓝帽杯半决赛电子取证+CTF部分题解

文章目录 电子取证123456789101112131415 CTFWeb | MyLinuxBotWeb | AirticleShareCrypto | ezrsaPwn | AdminPwn | uafmisc|排排坐吃吃果果 电子取证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CTF Web | MyLinuxBot Web | AirticleShare import requests import times reques…