Linux | 分布式版本控制工具Git【版本管理 + 远程仓库克隆】

news/2024/11/25 5:35:28/

在这里插入图片描述

在这里插入图片描述

文章目录

  • 一、前言
  • 二、有关git的相关历史介绍
  • 三、Git版本管理
    • 1、感性理解 —— 大学生实验报告
    • 2、程序员与产品经理
    • 3、张三的CEO之路 —— 版本管理工具的诞生
  • 四、如何在Linux上使用Git
    • 1、创建仓库
    • 2、将仓库克隆到本地
    • 3、git三板斧
      • ① git add
      • ② git commit
      • ③ git push
    • 4、有关git的其他指令
  • 五、总结与提炼

一、前言

本文来为读者介绍一下分布式版本控制工具Git,可能你听说过Gitee/GitHub,里面都带有git的字样,那它们和Git之间有什么关联呢❓ Git又是何物,让我们一起走进本文的学习📖

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件 —— 来自百度百科

在这里插入图片描述

上面说到了对于git来说支持分布式管理,简单来说就是【多分支】,所以它在团队协作中也是起到尤为重要的作用,大家可以将自己的代码上传到同一个仓库中进行管理,方便了项目开发时的多人协作。因此git其实对于我们在项目开发过程中也是重要的一个工具🔧

不过本文不会涉及到分布式,因为博主还没有学习得那么深入,只是了解了一下。不过会带大家了解git 的历史背景,知道它的由来。并且做到能在 LInux 上使用 git ,完成代码的提交等基本操作👈


二、有关git的相关历史介绍

首先我们要说说Git这个东西是怎么来的,是谁发明创造了它

  • 对于Git的创建者,就是下面这个“小伙子”,它叫做【Linus Torvalds】,被称做Linux之父、Linux内核的发明人及该计划的合作者

在这里插入图片描述

  • 他在开创Linux系统的时候,开发了一段时间后便将他的代码开源出来,使得全世界的顶级黑客、工程师可以一起参与到Linux的开发与制作中来,所以每天都会有很多人给他发代码,那么他只能复制粘贴,这显得很烦很累,于是他便想到有没有这么一款版本控制和多人协作的软件呢,这样可以提高我们的开发效率❓
  • 于是他找到了这么一款软件叫做【BitKeeper】,不过呢它是收费的,就很难受。这件商业公司的老板就找到【Linus Torvalds】觉得很欣赏他,于是就免费提供给他的社区使用,于是大家就使用它进行了高效地开发
    在这里插入图片描述
  • 但是呢,那些世界级的顶级黑客、工程师充满着好奇心,就想要去破解一下这块软件。于是有一天,一个小白工程师在完成了某项破解工作后将他的成果发布到社区中,就被这家公司的人看到了,于是老板很愤怒(我给你免费使用,但你来搞我?),于是就不给他们免费用了
  • 那此时【Linus Torvalds】就又开始了他的Ctrl + c/v。。。直到有一天终于受不了了,便自己用了两三周的时间开发出了一款版本控制和多人协作的软件,它就是 —— git。直到现今的代码托管平台【Gitee】【GitHub】都是基于它实现的

而Git 也因为其精简的设计、易于学习、占地面积小、性能快等一些系列优点深受程序员喜爱

三、Git版本管理

接下去我们来聊聊有关Git的版本管理。其实对于Git还有很多其他的功能,像分支管理、版本管理、版本回退、项目发布等等,这些功能可以支撑我们进行多人协作

1、感性理解 —— 大学生实验报告

因为对于Git的版本管理这一块挺难理解的,所以我会通过一个小案例来帮助大家理解,那就是我们大学生都要写的一样东西 —— 实验报告

对于实验报告呢,相信大家都写过,额。。。应该说是都抄过。各种像大物实验报告、英语翻译实验报告、网络实验报告、电路实验报告等等,对于这个报告而言一般有一两个人写好了那基本大家也都可以写好了,看上去也是差不多的样子,因为总会有那么一两个人会认真地去写实验报告✍


好,话不多说,我们继续扯

  • 你呢是一所普通高校的学生,叫做【张三】,你的室友叫做【小明】,今天是周一,明天就有大物实验课,所以就要交实验报告,不过你们是不同组的,所以你可以后天再交,到时候可以抄小明的。此时你的室友小明正在奋笔疾书地“写”着它的实验报告,争取要做写得最好的那一个,于是将它的报告改来改去,最后改的自己非常满意之后才上床睡觉💤
  • 到了第二天,小明开开心心地找到老师(^ _ ^),交上了他的实验报告,不过到了下午老师就把小明叫到了办公室,和它讲了有关实验报告的内容,挑出了小明实验报告中的很多问题,于是原本信心满满的小明在听了老师这番说辞之后便很郁闷地回到了宿舍开始了它的 实验报告修改之路。于是他将实验报告该来改来改去,终于将老师和它讲的这些修改好了,于是后一天来到物理老师的办公室交上了他的那份实验报告📰

在这里插入图片描述

  • 这天当老师收到小明修改后的【第二份】实验报告后,看来看去又指出了他一些地方的问题,于是就再让小明回去修改,那此时的小明没办法,只能按照老师的要求来,继续回去修改自己的报告。有耐心的小明在又一次修改了自己的报告后找到老师,可老师还是说:“小明,你这报告怎么越改越差呀,还不如第二版来得好呢,我看你也别改了,就把第二份的实验报告交上来,我看看给你些分数
  • 听了老师的这番说辞,小明心想,我每次都是在上一次的报告上直接做修改的呀,怎么还找得到第二版的实验报告呢?那此时的小明就非常慌张,不知道该如何是好,只能回忆那个时候自己的报告是如何写的,然后再慢慢地做修改

此时的你【张三】目睹了上面这一切过程,于是心中便多了一个心眼👀

  • 在小明交完实验报告的后一天,你也需要交实验报告了。 当报告交上去后,果然老师也把你叫过去然后让你修改实验报告里的很多内容,于是呢你也回到寝室准备开始你的修改,此时的你因为在看了室友小明的遭遇之后,于是就多了一份警惕,你呢就将原先的那份报告ctr + c,ctrl + v在当前目录下保留了一份,将原先的这份记为【版本1】,然后拷贝出来的副本修改为【版本2】,然后在版本2上去做一个修改,修改完之后,又拿到物理老师那里。果然,她又指出了其他的一堆问题让你去继续修改
  • 回到宿舍后,你也是和上次一样,将【版本2】进行ctr + c,ctrl + v在当前目录下保留了一份,然后再【版本3】上面做修改,改了一个晚上,第二天拿去给她看的时候,她依旧是不满意(一般的老师也不会这样),于是就说:“张三呀,你和是不是和小明一个宿舍的呀?你们这个报告都写得差不多,而且都不怎么样,这样吧,你把第二份的报告交上来,我给你个成绩
  • 此时你心中暗暗窃喜,回到宿舍后马上打开电脑,然后将这个目录下的【版本2】实验报告立马发给了老师

在这里插入图片描述

2、程序员与产品经理

在上一个案例的基础上,我使用【程序员与产品经理】的关系再来解释一下

  • 其实对于学生来说,可以看作是我们程序员;对于老师来说,可以看作是产品经理。当我们将业务逻辑写好将代码上传的时候,终于歇了一口气,可以回家休息了。但是过段时间产品经理又打电话来说这个地方写得不对,要你重新写的时候就会很郁闷,以及有时候和【测试人员】之间都会发生一些冲突

在这里插入图片描述

  • 当产品经理让你改来改去,发现这块功能没有之前好的时候想让你重写改回两个礼拜前的那个版本,此时若是你没有提前保存一份的话就【抓瞎】了,又得去重新写一遍,毕竟我们都是打工人🔧

难道代码也和实验报告一样,使用ctr + c,ctrl + v复制吗,那万一代码多了怎么办,这就需要有东西可以来专门管理我们的代码

3、张三的CEO之路 —— 版本管理工具的诞生

是的,故事还没完,我们接着上面的实验报告讲💬

  • 你,也就是【张三】在经历了这一切后,知道了这个老师是怎样的教学方式。而且这个老师还要带张三和他这个班其他的课程,所以张三便害怕再出现这样反复修改实验报告的狼狈样子🤦‍,于是呢他就把这次的实验报告修改过程经历做了一个总结,保留下来📰
  • 他呢也是一个很热心肠的人,就和其他同学说:“以后若是这个老师的其他实验报告,如果不给你通过的话就来找我,把修改前后修改后的版本都保存在我这里,如果想要哪个版本都可以来找我拿。“于是呢越来越多的同学来找到张三让他帮忙,到了后面不仅是同班同学,其他专业、甚至是其他学院的同学知道了又张三这么一个人,于是都来找他,此时张三就忙不过来了,和【Linus Torvalds】一样就是每天Ctrl + c/v。。。
  • 于是他也和【Linus Torvalds】一样开发出来这么一种软件,拥有服务端和客户端,其他同学只需要在自己本地做管理,将他们的实验报告上传到这个软件中,就可以实现自己对自己的提交记录进行管理(功能:新建管理文件夹,然后将自己原本的内容保存在这个里面,自己可以再做其他修改)。接下去他自己就很方便了,不需要再帮别人做这么多事
  • 但是呢他又一想,不光光是我们学校会出现这样的老师,像清北、一些985/211的学生可能也会有这样的困惑,于是呢就将自己的这款软件发布了出去,推向了全国,为他取了个名字。之后当张三毕业之后,就开了一家公司,是这家公司的CEO,于是就联合其他程序员优化了这个软件,将其部署到Web上,而且开发了客户端,客户可以直接在本地浏览操作,界面点击就可以完成内容的托管。
    • 它就是—— gitee/GitHub【底层基于git】

故事讲完了,这其实就是Gitee发明者故事,它知道了Linux之父发明了Git,于是便在它的基础上实现更趋向于大众化、专业化的成就,使得大家也可以使用它来进行版本的管理

四、如何在Linux上使用Git

我这里以Gitee为例为大家演示一下如果将自己的代码上传进行托管

1、创建仓库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 通过上面的一系列操作将仓库创建好之后我们就可以将其拷贝到我们的本地仓库中了。点击【克隆/下载】中的复制即可,通过HTTPS的形式将仓库的页面地址拷贝下来

在这里插入图片描述

2、将仓库克隆到本地

  • 然后我们来到Xshell中的命令行使用git clone + 仓库页面地址,这样就可以将远端仓库中的内容全部克隆过来,此时我们本地也相当于是拥有了这个【GitTest】的仓库

在这里插入图片描述

  • 接下去输入你gitee的用户名和密码之后就可以将这个仓库克隆你的本地了

在这里插入图片描述

  • 此时我们去【ls】一下就可以发现

在这里插入图片描述
那这时候就有同学说了,我把仓库克隆下来了,那么这个仓库在哪里呢?它长什么样?

  • 此时我们只需在在这个git-test中执行一下【ls -la】即可,-l代表以列表的形式呈现当前目录下的内容;-a表示会显示隐藏的文件,也就是以.开头的文件
  • 那么我们就可以看到有一个【.git】的东西被显示出来,其实它就是我们从远端克隆下来的那个仓库,其实通俗点说它就是一个【目录/文件夹】

在这里插入图片描述

  • 其实这个仓库在我们Windows下也是可以看到的,只需要修改一下【查看】方式中【显示隐藏的文件、文件夹和驱动器】便可以看见这个.git的仓库了

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

那这个仓库里面有哪些东西呢?我们来看看

  • 通过tree .git就可以看到这个目录中的所有内容了

在这里插入图片描述

  • 我们主要来说一下这个通过算法生成的随机二进制通过到Gitee上观看可以了解到它就是【本地修改记录的版本号】

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

  • 然后的话就是【refs (references)】,一些这个仓库中有关我们个人的资料

在这里插入图片描述
好,到这里,相信你对远程仓库克隆到本地以及对这个克隆过来的仓库有了一定的了解。其实对于Gitee来说就是【可视化地展现了我们的仓库】。接下去我们就要去使用一下这个仓库了👇

3、git三板斧

仓库克隆到本地之后,我们就可以将自己的代码托管到这个仓库中了

① git add

首先进行的就是【add】,也就是将当前目录下所有文件添加到仓库里

在这里插入图片描述

② git commit

接下去进行的就是【commit】,是提交的意思。是什么提交呢?是真正的提交。把我们修改的内容提交到本地仓库
语法格式:git commit -m "日志"

  • 不过可以看到,似乎并没有提交成功的感觉,而是报出了一些异常的错误
  • 因为这是我们第一次提交内容到Gitee仓库中,但是人家还不认识你,也不会让你随便提交什么东西。所以只需要配置一下我们每次提交的【邮箱】和【用户名】即可

在这里插入图片描述

  • 然后我们再去【commit】一下就可以看到这两个文件就被提交到了本地仓库

在这里插入图片描述

那有同学问,那我要怎么查看我确实是将这些东西提交到仓库中了呢🧐

此时我们就可以使用到git log去查看我们提交的一些日志

  • 可以看到,里面就有本次【commit】修改后的版本号,而且还会显示出我们本次修改的日志。包括更多的还有上面配置的【用户名】和【邮箱】以及本次提交修改的时间,都是可以查询到的

在这里插入图片描述
温馨提示:【日志】不要随便乱写,要写你本次修改了什么内容

  • 对于日志来说,是很重要的,因为记录了你本次修改仓库中的什么内容,方便以后可以快速查询到修改的时间和位置
  • 你之后在公司里写好代码后进行上传也是一样的,对于日志而言要好好写,因为之后可能你的领导会看你的代码、你的同事可能会看你的代码、你们公司的实习生也有可能会看到你的戴代码。此时他们就可以通过查看Gitee上面的提交记录或者是直接git log一下就可以搜索到你之前提交的记录,这个只要写了是无法修改的所以我们对于每一次的代码修改都要认真记录日志

🎯对于以上我们所做的【add】和【push】,其实已经完成了代码的托管,因为这个仓库就在我们本地,将代码放到这个仓库中,只要我们的服务器没坏掉,那都是可以找得到的
🎯此时对应的就是张三前面在为同学服务时将他们的代码拷贝到本地电脑中的过程

③ git push

最后要进行的就是【push】,为何要push呢,其实也就是将本地仓库中保存的内容推送到远程仓库,让本地仓库和远端仓库保持一致

  • 刚才说到过,对于本地的仓库虽然可以起到一个永久的保存,但是难免会出现突发事故导致本地机器故障,此时就找不到之前写的代码了【当然你也可以使用U盘保存,不过U盘也是有使用年限的,不可以一直用过去】
  • 但是对虚拟的云端就会一直存在,不会丢失,所以我们可以将本地仓库中的内容进行一个推送

在这里插入图片描述

  • 不过若是你第一次进行git push的话,就出现上面这样的警告提示这点的话是由于git push没有指定分支,只有当前分支会被 push 到你使用 git pull 获取的代码。

此时运行一下上面我框出的两句git config –global push.default matching 或: git config –global push.default simple。之后再去【git push】的时候就不会出现类似的问题了

  • 然后我们再去【git push】一下就可以发现不会出现像刚才那样的问题了,那也就推送成功了( •̀ ω •́ )

在这里插入图片描述

  • 通过来到Gitee上的远程仓库中可以看到我们刚才从本地仓库【push】上来的内容,这也就实现了本地仓库和远端仓库保持一致

在这里插入图片描述

4、有关git的其他指令

讲完了基本的git三板斧后,我们再来说说有关Linux下git的其他指令操作

  • 删除仓库中的文件 —— git rm 文件名
  • 查看本地和远端之间同步的状态 —— git status
  • 删除本地仓库 —— git .git rm

  • 首先我们来看看如何去删除仓库中的文件

在这里插入图片描述

  • 在删除掉这个文件之后我们再来看看这个本地仓库和远程仓库的状态

在这里插入图片描述

  • 所有的操作都展示完了,我们就将这个本地仓库删除吧!
  • 可以看到,在删除完后再去git status查看状态的话就会检测出来本地的并不是一个git仓库(repository)

在这里插入图片描述

除了删除本地仓库,在Gitee上创建的远程仓库也是可以删除的

  • 首先点击【管理】

在这里插入图片描述

  • 点击左侧菜单栏的【删除仓库】

在这里插入图片描述

  • 根据提示操作即可,输入内容

在这里插入图片描述

  • 最后再进行一下密码验证就可以删除成功了

在这里插入图片描述

  • 此时返回Gitee的大厅就可以看到我们删除仓库的记录了

在这里插入图片描述

五、总结与提炼

最后来总结一下本文所学习的内容

  • 首先我们介绍了有关【git】的相关知识,知道了它是由Linux之父【Linus Torvalds】在迫于某些需求的时候创建的,git是一款版本控制和多人协作的软件
  • 然后我们便说到了有关git的【版本控制】,因为网上大多数的文章都讲解了非常深奥难懂,于是我就使用到一些生活中的小案例来帮助大家理解,不过可不要真的和产品经理吵架哦,那就会很麻烦了~
  • 最后呢我们就说到了如何在Linux上去使用git,教了大家如何在Gitee上创建仓库并且将仓库克隆到本地。然后就可以使用git三板斧将本地的代码/文件托管到本地仓库进行管理了,但是本地仓库可能会存在风险,所以我们就可以使用第三板斧【push】将本地仓库中的内容推送到远端仓库,实现了一个云端备份

以上就是本文要介绍的所有内容,感谢您的观看

在这里插入图片描述


http://www.ppmy.cn/news/28688.html

相关文章

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测

机器学习:基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测 作者:AOAIYI 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞…

深入理解跳表及其在Redis中的应用

前言跳表可以达到和红黑树一样的时间复杂度 O(logN),且实现简单,Redis 中的有序集合对象的底层数据结构就使用了跳表。其作者威廉普评价:跳跃链表是在很多应用中有可能替代平衡树的一种数据结构。本篇文章将对跳表的实现及在Redis中的应用进行…

termux手机端安装mysql(MariaDB)

目录1 下载MariaDB2 配置MariaDB3 启动MariaDB服务器查看进程pid杀死进程4 登录 Mysqltermux用户登录MySQLroot用户登录MySQL5 配置 MariaDB 远程登录创建一个可远程登录的用户:用户授权:刷新授权:6 停止 MariaDB 服务器7 可选,但…

Java知识复习(四)多线程、并发编程

1、进程、线程和程序 进程:进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的;在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程…

2023安徽省“中银杯”职业技能大赛“网络安全” 项目比赛任务书

2023安徽省“中银杯”职业技能大赛“网络安全” 项目比赛任务书2023安徽省“中银杯”职业技能大赛“网络安全” 项目比赛任务书A模块基础设施设置/安全加固(200分)A-1:登录安全加固(Windows, Linux)A-2:Ngi…

清华源pip安装Python第三方包

一、更换PIP源PIP源在国外,速度慢,可以更换为国内源,以下是国内一些常用的PIP源。豆瓣(douban) http://pypi.douban.com/simple/ (推荐)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/阿里云 http://mirrors.aliyun.com/pypi/simple/中…

数学建模介绍

🚀write in front🚀 📜所属专栏: 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对我最大的激励…

【JavaScript】根据元素内容遍历元素的方案

▒ 目录 ▒🛫 导读需求1️⃣ jQuery2️⃣ XPATH(document.evaluate)3️⃣ 原生js(querySelectorAll & Array)🛬 文章小结📖 参考资料🛫 导读 需求 因业务需要,根据元…