【Linux】分布式版本控制工具Git的学习 | 在Linux上使用git

news2024/11/16 22:32:25

👑作者主页:@安 度 因
🏠学习社区:安度因的学习社区
📖专栏链接:Linux

文章目录

  • 一、前言
  • 二、历史背景
  • 三、版本控制
    • 1、何为版本控制
    • 2、版本控制工具
      • ① 集中式版本控制工具
      • ② 分布式版本控制工具
  • 四、代码托管平台
  • 五、Linux上使用git
    • 1、创建仓库
    • 2、仓库克隆和细节介绍
    • 3、git三板斧
  • 六、结语

如果无聊的话,就来逛逛 我的博客栈 吧! 🌹

一、前言

今天 a n d u i n anduin anduin 带大家学习的内容是 G i t Git Git

大家可能多多少少都用过 Github, Gitee 等代码托管平台。而它们的名字中就带有 git 的字段。

实际上这些平台都是可以通过 git 来进行管理的,而 git 本身是一个开源的、免费的 分布式版本控制工具 ,通过 git 可以快速高效地处理代码的合并,项目的管理等功能。

而 git 在团队协作开发上也是十分好用的,因为 git 支持多分支,团队成员可以将代码提交到一个仓库,从而对项目进行多人合作开发。

讲到这里,我们几乎已经可以感受到 git 的重要性了。

今天的目标就是带大家了解git 的历史背景和认识何为分布式版本控制工具。并且做到能在 LInux 上使用 git ,完成代码的提交等基本操作。

而对于一些较难的操作,例如多分支,版本回溯等操作我们暂且不提。

二、历史背景

G i t Git Git 的发明者就是下图的大叔, L i n u s Linus Linus 大神。那么究竟是什么原因让 L i n u s Linus Linus 发明 G i t Git Git 的呢?那就得从开发 L i n u x Linux Linux 操作系统时讲起。


L i n u s Linus Linus 大神在和世界上优秀的程序员开发 L i n u x Linux Linux 操作系统时,当时可用的版本控制工具并不多。所以 L i n u s Linus Linus 那些代码都是靠 L i n u s Linus Linus 本人合并,也就是类似于复制粘贴… 复制粘贴…

要知道 L i n u x Linux Linux 内核的代码是很多的,所以 L i n u s Linus Linus 大神本人每天干这个事情也是很累。

而当时最好用的版本管理软件是 B i t K e e p e r BitKeeper BitKeeper ,这个软件它不开源并且是收费的。 但是 B i t K e e p e r BitKeeper BitKeeper 的东家 B i t M o v e r BitMover BitMover 公司处于人道主义精神,授权 L i n u x Linux Linux 社区免费使用版本控制系统,因为 L i n u x Linux Linux 操作系统的开发本身就是一件很有意义的事情,但是要求不能进行破解。

但是 L i n u x Linux Linux 社区无法像商业公司那样对参与开发者进行强有力的约束,因为社区性质本身就是开源社区。所以社区内的成员就开始对 B i t K e e p e r BitKeeper BitKeeper 试图破解。最后被 B i t M o v e r BitMover BitMover 公司发现了。

别人明确规定不能破解,也答应了。破解了没发现还好,最坏的是被发现了。这时提供软件的公司就很生气,于是就收回 L i n u x Linux Linux 社区的免费使用权。

可是一旦养成习惯使用分布式版本控制工具了,在要 L i n u s Linus Linus 大神再去手动合并代码就不可能了。毕竟由奢入俭难嘛!

所以 L i n u s Linus Linus 大神自己亲自出马,闭关两周后, G i t Git Git 就诞生了。 G i t Git Git 是由 L i n u s Linus Linus 大神使用 C C C 语言开发的一个分布式版本控制系统,一个月后 L i n u x Linux Linux 系统代码由 G i t Git Git 管理。

而到现在 G i t Git Git 已经成为最火的分布式版本控制工具,一些著名代码托管平台,例如 G i t h u b Github Github 等只支持以 G i t Git Git 作为唯一的版本库格式作为托管。

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

三、版本控制

G i t Git Git 是一个分布式版本控制工具,但是版本控制是什么,版本控制工具又是什么,它们能干什么,优点是什么?

这些我们可能还不清楚,所以下面我们对其进行讲解。

1、何为版本控制

版本控制是一种记录文件内容变化,以便查阅指定版本修订情况的控制系统。

版本控制最大的优点就是记录了以往的版本,可以随时查阅版本记录,从而让用户能查看历史版本。

举个例子,论文我们应该都写过。而论文从开始写,到交上去,可能会修正很多遍。

而版本,就是每次的论文样式,例如:

image-20230113175204240

这里的每一个文件都是一个版本,都记录着之前的文件。

而版本控制就是将这些版本记录下来,方便用户查阅之前的版本

而由于版本控制,当进行团队协作时也更加方便,通过版本控制就可以更加清晰的了解各版本的变化,从而做出升级和改进。

2、版本控制工具

版本控制工具分为两类,集中式版本控制工具和分布式版本控制工具。

① 集中式版本控制工具

常见的集中式版本控制工具有 S V N SVN SVN C V S CVS CVS 等。

集中式版本控制有一个特点就是 只有单一的集中管理的服务器 。在服务器中,保存着所有文件的修订版本。

在协同工作时,小组成员都会通过客户端链接到服务器,通过服务器来完成提交更新。

这种版本控制可以通过管理员来掌握小组成员的动作情况,管理权限。管理成本低,管理模式集中。

但是这种版本控制有一个致命的缺陷:服务器发生故障,小组成员就无法协同工作

插个题外话:

所以说 L i n u s Linus Linus 大神在不能使用 B i t K e e p e r BitKeeper BitKeeper 的情况,宁愿自己开发一个 G i t Git Git 也不愿意使用集中式版本控制工具。

因为 L i n u x Linux Linux 社区成员众多,如果使用这种版本控制,还不如自己合并代码呢 …

② 分布式版本控制工具

常见的分布式版本控制工具有 G i t Git Git M e r c u r i a l Mercurial Mercurial 等。

分布式版本控制工具通常有客户端和服务端。

客户端提取的不是这些文件版本,而是把代码仓库完整的通过镜像的方式克隆到本地,就是 本地库 。

这种机制也让仓库的控制性更加好。如果一处协同工作的文件故障了,那么可以通过其他客户端的本地库进行恢复。

而分布式版本控制工具也解决了集中式版本工具的弊病

  • 当服务器崩掉时,也可以进行开发,因为存在本地库,通过本地库就可以进行版本控制
  • 在小组成员的客户端上保存着完整的项目备份,提高了安全性

而这种控制方式也提高了使用者的舒适度

  • 如果用户不想要把自己的项目上传到远端,也可以将项目上传到本地,进行本地式的管理。

  • 对于协同开发的用户,更是可以将项目上传至服务器,让服务器进行数据管理,避免数据丢失,更加安全。

四、代码托管平台

说到代码托管平台,大家耳熟能详的实际上就是 G i t h u b Github Github G i t e e Gitee Gitee 等平台了。

G i t h u b Github Github

image-20230113180443653

G i t e e Gitee Gitee

image-20230113180504108

这些代码托管平台的特点就是 继承了 G i t Git Git 代码仓库托管的功能,并且增加了许多个性化的功能,如代码片段分享,订阅等特色功能

除了通过 G i t Git Git 进行版本的控制,用户更能在网站上直接进行操作,让用户在网站上也可以完成对版本的修改。

说白了就像是抽象出了一块独立空间,更贴近于用户体验。增加了个性化功能,让代码托管平台不仅能版本控制,更作为一个协作的平台,变成一个更大的交流圣地。

程序员可以在 G i t h u b Github Github G i t e e Gitee Gitee 上进行交流,且在上面也有着许多开源项目,让更多人见识到开源的魅力。

G i t h u b Github Github G i t e e Gitee Gitee 的区别:

  • G i t e e Gitee Gitee 是国内的, G i t h u b Github Github 是国外的
  • G i t h u b Github Github 用户基数较多,开源项目更加丰富
  • G i t e e Gitee Gitee 的用户大多是国人,且是中文界面更容易让人接受
  • G i t h u b Github Github 的服务器在国外,如果不使用加速器的话访问速度相对较慢,而 G i t e e Gitee Gitee 则由于服务器在国内的原因,访问速度较快

五、Linux上使用git

前面讲了这么多,我们总算对 git 有了一些认识,那么接下来我们就在 LInux 上进行操作。

先用 git --version 检查一下 LIinux 下有没有安装 git :

image-20230113185920877

显然是安装了的,如果没有安装的可以使用安装:

sudo yum install -y git

1、创建仓库

紧接着到 G i t e e Gitee Gitee G i t h u b Github Github 上创建一个仓库,我使用的是 G i t e e Gitee Gitee

首先选择新建仓库:

image-20230113192403718

然后设置仓库名、是否开源,初始化,设置模板等…

image-20230113190820337

然后点击克隆,以 https 的形式复制远端仓库的链接:

image-20230113192001552

而联合开发和删除仓库在都在仓库的管理部分,相对简单,我就不多赘述了。

2、仓库克隆和细节介绍

使用命令:

git clone https格式网址

将远端仓库克隆到本地,输入指令后需要输入用户名和密码:

image-20230113201654147

(注:只有私有的克隆时才需要输入用户名和密码,开源的话就不用输)

然后目录下就出现了一个目录,名字就是上方创建目录时生成的路径名:

然后进入目录,在显示一下隐藏文件,可以发现一个 ,git 的隐藏目录。

image-20230113193008079

而之前我们仓库中的文件也都在这里,就比如 Readme 文件。

同时也出现了一个叫做 .git 的目录。.git 实际上就是仓库,也就是本地库,git 中会将修改记录以二进制的形式保存在文件中。

使用 tree .git 查看一下目录内容:

image-20230113194042852

框出来的部分就是修改记录。

注: .git 中的内容不要改!一定要记好了!

3、git三板斧

首先,进行一下内容拷贝,将上次写的进度条代码拷贝到当前目录下:

image-20230113194612416

当内容拷贝过来之后,需要将本文件夹内所有内容提交到暂存区

git add .

在使用指令查看一下暂存区状态:

git status

image-20230113194908210

下面显示了 new file ,说明我们已经将文件提交到了暂存区。

接着,将暂存区的文件提交到本地库

git commit -m "日志信息"

"" 引起来的部分为上传的日志,日志一定要好好写 ,这表明这部分代码是什么,或者新增加了什么功能。

并且别人是可以看到你的日志信息的,只要你的仓库开源,别人将仓库克隆到本地后,就可以使用 git loggit reflog 查看到你的日志信息:

git reflog 为查看版本信息,git log 为查看版本详细信息。

image-20230113202407854

注:这些日志都是被保存下来的,所以在团队协作中,一定不能乱写,也千万不能写骂领导的话(小声bb)。打马赛克的部分是邮箱,不好好写会被问候的(doge)。

image-20230113195346722

当第一次提交时,会遇到一个小问题:

框出来的话表明你需要设定一下自己的邮件和用户名,方便之后别人查看到你的日志后和你及时联系。

这时需要输入两行指令,就是第二个方框中的内容:

image-20230113195713636

这时框起来的部分出现,就表明已经将暂存区的内容提交到了本地库,也就是 .git 目录中。

而以上的 add 和 commit 的操作就是将文件保存到本地库的动作(还是在本地)。

而这它们的逻辑关系可以用一张图表示:

image-20230113200440972

接下来将本地库内容推送到远端

git push

输入指令后,要求我们输入用户名密码,注意这里的账号是一开始克隆仓库时使用的用户名和密码。

image-20230113201621928

输入后呈现这样的格式就说明推送成功了。

可以设置免密码提交,操作很简单,可以百度一下。

注:提交时可能会出现这样的告警

image-20230113201305590

这个告警的影响其实不大,只需要修改全局配置,让每次 push 的时候总是显示即可。

对于 matching 和 simple ,分别输入:

git config --global push.default matching
git config --global push.default simple

进行完这些步骤,切换至 gitee 查看一下是否提交成功:

image-20230113201747939

已经提交成功了(后面显示的时间,是把文件放到暂存区的时间)

总结一下 git 三板斧

  1. git add . :将内容提交到暂存区
  2. git commit -m “日志信息” :将内容提交到本地库,日志要好好写
  3. git push :将本地库中的内容推送到远端仓库

六、结语

到这里本篇博客就到此结束了。

学习完之后,大家也许会发现,对 G i t Git Git 的认知和版本控制等知识更加清晰了,有了这个反应,就说明今天的知识大家基本已经掌握了。

G i t Git Git 无论是在平常的学习,还是日后工作的团队开发中都是极其重要的,所以为了更加了解这个流程,大家下去也可以在 Linux 上实操一下,相信通过今天的学习我们也能很轻松的操作出来。

如果觉得 a n d u i n anduin anduin 写的不错的话,可以 点赞 + 收藏 + 评论 支持一下哦!我们下期见~

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

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

相关文章

React 学习笔记总结(八)

react-router6版本的学习笔记。 文章目录一、React Router 6二、router6版本的 安装 和 一级路由1. 安装router6版本2. Routes组件 和 Route的 element属性三、router6 之 重定向四、router6的 NavLink高亮五、router6 的 useRoutes路由表(重要)六、router6 的 嵌套路由七、rou…

编写自己的OPTEE CA/TA demo

前言 (默认你对optee有一点点点点了解) 一、hello_world分析 在\optee_examples\hello_world目录下,optee给出了一个简单的CA/TA示例。 hello_world的结构如下: 1、CA端 A.main.c main.c文件有效代码如下: #incl…

vue2组件之间的数据传递(组件之间使用mitt第三方模块创建事件中心进行订阅与发布)

目录 一、组件之间的通信 1、组件之间的关系:父子关系、兄弟关系、跨级关系 2、父子组件之间的通信(数据传递): 3、兄弟组件之间的通信(数据传输): 4、跨级组件之间的通信:provide / inject 类似于消息…

正则表达式 - 匹配开头、结尾、中间 - 某天气网站网页源代码分析

背景 爬取某天气网站数据,使用 Selenium 能够得到渲染数据后的页面源代码。特定日期的真实数据肯定只有1份,展示在页面表格中,但是源代码中提供了3个都有数据的 Table,而其中2个Table 的数据是通过 math.random 生成后填充&#…

ASP.NET Core 3.1系列(25)——Autofac中的泛型注册和程序集注册

1、前言 在实际开发业务中,泛型的应用非常广泛,而这也就产生了一个问题:泛型类和泛型接口该怎么注册?难道要开发者一行一行去写泛型构造参数吗?同时,实际业务中往往也会对项目进行分层设计,例如…

【十】Netty WebSocket协议栈开发

Netty WebSocket协议栈开发背景介绍HTTP 协议的弊端WebSocket 介绍WebSocket 特点WebSocket 连接建立Socket生命周期WebSocket关闭开发WebSocket 服务端功能介绍流程图代码实现jar 依赖WebSocket 服务端启动类 WebSocketServer服务端业务处理类 WebSocketServerHandlerWebSocke…

nacos的部署以及nacos启动报错“Unable to start embedded Tomcat”(部分解决)

这几天有一个基于yshop改编的SpringBoot的项目开发需求,本地需要下载使用nacos-server进行部署和开发,于是下载了nacos-server-2.0.3,并将其解压在一个没有中文路径的地方。 接下来根据nacos需求,设置了JAVA_HOME的环境变量: 修…

防火墙NAT综合实验

实验要求 1.内网网段配置动态pat将内网192.168.1.0网段映射到防火墙外网接口上 2.dmz区域服务器做静态pat将两台服务器对应到一个外网接口的不同端口 3.开启nat 控制 4.对内网网段192.168.2.0或豁免能够发访问外网 5.并通过远程进行验证 实验命令 ciscoasa# conf t cisco…

如何快速做好SEO优化?怎样综合查询seo?

本篇接着讲新手优化网站的技巧及应该注意什么方面,一起来看看吧! 6.优化你的图片 从可读性的角度来看,图像非常重要。他们帮助可视化你的内容,帮助读者更容易理解。但它们对SEO也很重要,因为它们可以帮助你的网站被抓…

MySQL——SQL逻辑语句相同但是性能相差巨大?

在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。 下面通过三个案例对SQL语句进行分析: 案例一:条件字段函数操作 假设你现在维护了…

51单片机特性概览

51单片机指的是使用英特尔8051指令集的微控制器。 首先要了解什么是微控制器。 一、什么是微控制器? 微控制器包括: CPU其他组件(可能包括RAM,ROM,I/O端口,定时器、计数器、通信端口), 而微处理器只包含CPU。 一开始只有微处…

适应性学习率

目录 适应性学习率 Adaptive learning rate 为什么不是临界点仍会导致训练停止 示例一示例二 RMSRMSPropAdam学习率还和时间有关 Learin Rate DecayWarm up 2021 - 类神经网络训练不起来怎么办(三) 自动调整学习率 (Learning Rate)适应性学习率 Adaptive learning rate 一般…

团队协作软件如何整合内容营销

每个内容营销团队都以不同的方式管理他们的流程和工作流程——无论是为成长中的团队扩展编辑流程,还是视频和社交媒体活动规划。优化内容营销项目管理就是降低复杂性和更有效地管理工作。 但是,为什么正确地做到这一点如此重要呢?与对外营…

第一个uni-app程序小结

工院喵开发小结 这是一篇关于uniapp新手写微信小程序的收获和踩坑总结。 目录工院喵开发小结一、架构二、收获1. 一些扩展组件的使用a. uni-uib. uni-listc. 栅格系统d. uni.scss辅助样式e. uni-easyinput 增强输入框f. uni-fab悬浮按钮g. swiper2. api管理3. 页面跳转传参4. …

iOS 语言基础初探 Xcode 工具

前言: 作为 iOS 开发的主要应用工具之一,Xcode 已经越来越被业内认可,本章节将针对此官方开发工具,为同学解读 Xcode 的基本情况,认识 Xcode 的工程体系,带领大家进入 iOS 开发第一步。 🎶文章目…

SAP入门技术分享四:模块化程序

模块化程序1.子程序概要2.子程序定义3.子程序参数(1)传递参数的方法(2)定义参数类型(3)参数与结构体(4)参数与内表4.调用子程序(1)调用程序内部子程序&#x…

vue npm link关联本地组件库

什么是 npm link 就是把你在本地开发好的文件做一个映射和链接,当你在 本地开发一个a项目,你的本地b项目想使用a项目下的组件 这时候就是需要进行npm link链接起来 a项目的运行效果 b项目的运行效果: 想要实现的效果:(在b项目上…

Oracle SQL Developer使用dbms_output.put_line显示输出

dbms输出 点击DBMS输出左侧的号,选择需要输出的数据库,点击确定 与步骤2选择相同数据库,右击数据库,选择打开SQL工作表(T) 在工作表中执行语句 declare --定义,相当于声明属性。t_a varchar2(20);--声明自定义属…

怎么写一篇计算机SCI论文初稿? - 易智编译EaseEditing

一、SCI论文的要求 SCI论文的核心是创新性。对于这个方面来说主要就是针对于论文的观点正确,文字通畅,逻辑严密,结构合理,结论有创新等等。 二、SCI论文格式规范 每一个SCI期刊都有自己特定的宗旨、栏目和专业定位,投…

TCP通信机制:三次握手、四次挥手、滑动窗口

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 TCP通信机制1. TCP三次握手2. TCP四次挥手3. TCP连接与数据传输过程4. TCP滑动窗口机制5. server服务端…