【Git】git 从入门到实战系列(二)—— Git 介绍以及安装方法

news2024/11/26 8:57:00

文章目录

    • 一、前言
    • 二、git 是什么
    • 三、版本控制系统是什么
    • 四、本地 vs 集中式 vs 分布式
      • 本地版本控制系统
      • 集中式版本控制系统
      • 分布式版本控制系统
    • 五、安装 git

一、前言

本系列上一篇文章【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?我们讲述了 git 诞生的过程。此篇我们对 git 的特点进行总结,以及总结 git 的安装方法。

该系列浅显易懂,有理论,有实例,实用性超强,读者可以边学边练,不枯燥,易上手,读完该系列你可以通过 git 轻松地完成你的工作。该系列不会让你成为git专家,但用于工作已绰绰有余。

二、git 是什么

git 是一个免费、开源的分布式版本控制系统。用于跟踪文件的修改,特别是在软件开发中,已经成为现代软件开发中最流行的版本控制系统之一。在许多情况下,尤其是在团队协作、开源项目和企业开发中,git 几乎是标准选择。

三、版本控制系统是什么

git 是一个分布式版本控制系统,那什么是版本控制系统?版本控制系统是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。常见的版本控制系统有:cvs、svn、git。

纵观版本控制系统的发展历史,《Version Control By Example》一书的作者 Eric Sink 在他的书中对版本控制进行了分类,广义上讲,版本控制工具的历史可以分为三代:第一代为本地版本控制系统,第二代为集中式版本控制系统,第三代为分布式版本控制系统。

四、本地 vs 集中式 vs 分布式

本地版本控制系统

第一代版本控制系统被称为本地版本控制系统。通过加锁将并发执行转换成顺序执行。 一次只能有一个人处理文件。如果多人开发,每个人都在不同的系统和电脑上开发,没办法协同工作。

具体流程如下:首先,应该把文件放在一个服务器上,方便使用者上传或下载文件;其次,任何人想对文件修改时,需要先把这个文件加锁,通过checkout指令,使得其他人无法修改;最后,当修改完成之后,需要释放锁,通过checkin指令,形成一个新的版本,存放到服务器端。

第一代版本控制系统主要有 RCS、SCCS(1972年发布)和 DSEE(被认为是 Atria ClearCase 的前身)。目前,有些项目还在使用!

集中式版本控制系统

第二代版本控制系统被称为集中式版本控制系统(Centralized Version Control Systems,CVCS),其对同步修改更加宽容,可以让在不同系统上的开发者协同工作,所有的用户电脑都是从中央服务器获取代码或者是将本地的代码提交到中央服务器。

集中式管理系统的特点:版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。本地是没有版本库的修改记录的,所以集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个10M的文件就需要5分钟。

集中式版本控制系统的缺点也是显而易见的,最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

第二代版本控制系统主要有 CVS、SourceSafe、Subversion、Team Foundation Server、SVN。

分布式版本控制系统

第三代版本控制系统被称为分布式式版本控制系统(Distributed Version Control Systems,DVCS),其允许合并和提交分开。在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用。在这类系统中,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是对代码仓库的完整备份。
在这里插入图片描述
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

既然是多人协作,我们肯定是需要指定一个人的电脑作为总仓库,用来同步各开发者的私有仓库,所有人从总仓库上提交更新,拉取别人的提交,这样才能保证总仓库保留了所有人的改动。 这个总仓库其实就充当了公共服务器仓库的角色。

所以我们通常说的分布式管理系统的服务器其实就是找一台电脑充当公共服务器的角色,每天24小时开机,其他每个人都从这个服务器仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。在分布式版本控制系统中,每个参与者的本地也会有一个完整的仓库。即使服务器端崩溃,我们仍然可以使用 git(仅在本地仓库管理我们的代码),在网络具备时,再和服务器进行同步即可!

第三代版本控制系统主要有 Bazaar、Git、Mercurial、BitKeeper、Monotone。且第三代版本控制系统已经大有一同江湖的趋势。

五、安装 git

ubuntu上安装git
你可以试着输入 git,看看系统有没有安装 git。
在这里插入图片描述
像上面的命令,系统会提示你Git没有安装,还会提示你如何安装Git。
一般按照以下步骤安装 git
【1】、更新软件包列表
在安装之前,首先更新你本地的包列表,确保你能获取到最新的软件版本。

sudo apt update

【2】、安装 git
使用下面的命令安装 git:

sudo apt install git

【3】、验证 git 安装
安装完成后,你可以通过以下命令检查 git 是否安装成功,以及查看安装的版本:

git --version

这将显示 git 的版本号,比如 git version 2.17.1
在这里插入图片描述
【4】、配置 Git
在使用 git 之前,建议配置用户信息,这样在你提交代码时能够正确地记录作者信息。执行以下命令来设置你的姓名和邮箱:

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"

【5】、验证配置
通过以下命令可以查看你的 git 配置是否已成功设置:

git config --list

在这里插入图片描述

到此,你已在 ubuntu 上成功安装并配置了 git。你可以开始创建git仓库、克隆代码、提交更改以及进行其他版本控制操作。今天总结到此,下一篇总结创建版本库等内容。

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

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

相关文章

S硅谷-AI大模型实战训练

课程概述 AI大模型实战训练课程是一门专为有志于深入学习人工智能领域的学员设计的高级课程。本课程以当前人工智能领域的前沿技术——大模型为核心,通过理论与实践相结合的教学方式,培养学员在AI领域的实战能力。 课程目标 理解大模型的基本原理和架构。…

python爬虫之用scrapy下载中间件爬取网易新闻

python爬虫之用scrapy下载中间件爬取网易新闻 相关资源如下: 采用scrapy下载中间件爬取网易新闻国内、国际、数读、军事、航空五大板块新闻标题和内容 程序wangyi.py主代码: import scrapy from selenium import webdriver from selenium.webdriver.e…

PDF——分割pdf的10个工具

PDF分割器是一种可用于将PDF文档分割成更小的文档甚至单个页面的工具。分割 PDF 文档的主要原因是为了更容易共享。 但该过程的成功取决于您用于拆分 PDF 的工具。较简单的工具仅提供几个选项,可能并不适合所有类型的文档。我们将在本文中列出的 10 个最佳 PDF 分割…

gemini api 应用

安装 gemini Prerequisites To complete this quickstart locally, ensure that your development environment meets the following requirements: Python 3.9 An installation of jupyter to run the notebook. Install the Gemini API SDK The Python SDK for the Gemin…

手机在网时长查询接口如何对接?(一)

一、什么是手机在网时长查询接口? 传入手机号码,查询该手机号的在网时长,返回时间区间,支持携号转网号码查询。 二、手机在网时长查询接口适用于哪些场景? 例如:客户画像与精准营销 (1&…

2个一键生成PPT目录的AI软件,轻松搞定PPT目录制作!

在各种信息都在努力争夺每个人的注意力的当下,一份精心制作的PPT可能成为决定成败的关键因素。而PPT目录,作为整个PPT演示文稿的门面和导航,其重要性往往被低估。 每个人的时间都是有限的,如果PPT目录没有让潜在观众Get到重点&am…

Vue常见问题(一)组件的使用

Failed to resolve component. 报错原因: 组件注册错误:我们在组件中使用了未注册的组件。在Vue中,组件必须先注册才能使用。 解决方法: 引用组件 : import ItemPage from "/components/itemPage.vue";…

Python NumPy数组维度和坐标轴的含义(ndarray demension axis)

Numpy是Python中科学计算的基础包,而其核心对象就是ndarray(n维数组)。关于如何创建n维度数组可以参考下面的文章: Python NumPy数组的创建方法 为了对ndarray进行数学处理,很多函数中都要指定一个叫做坐标轴的参数(a…

创建Apple开发者ID及ABM账号教程

申请苹果开发者账号和ABM (Apple Business Manager) 账号,以便在iPhone(IOS平台)上发布和管理汽应用。申请需要遵循一系列步骤。以下是详细的申请流程: 一、苹果开发者账号申请流程 1. 注册Apple ID - 访问…

打卡第34天------动态规划

我目前刷leetcode上的题的时候,不仅每天按照代码随想录的算法训练营的进度来刷题,也会自己开始在leetcode上刷题了,有些简单的题目,不用看题解就能做出来了,这也是一种进步呀。希望可以尽快找到下家工作单位,分秒必争,不浪费自己的一分一毫时间,与时间赛跑的过程呀。 一…

文心一言 VS 讯飞星火 VS chatgpt (319)-- 算法导论22.3 11题

十一、请解释有向图的一个结点u怎样才能成为深度优先树中的唯一结点,即使结点u同时有入边和出边。如果要写代码,请用go语言。 文心一言: 在一个有向图中,如果结点u在深度优先搜索(DFS)的过程中成为深度优…

【面试高频,必知必会】OpenGL渲染流程

😎 作者介绍:欢迎来到我的主页👈,我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun(领取大厂面经等资料),欢迎加我的…

建议收藏:如何快速搭建一套仓库管理系统?

在工作中碰到仓库出错或因统计繁琐而加班到天亮都是常有的事情,工作效率真的很低。我相信这种的困境,不少同行朋友定能深有体会! 实话说,我们公司之前也曾尝试斥巨资引入传统仓库管理系统,但效果却不尽人意。不仅操作…

面试中的算法 [ 持续更新中 ] 基于Python语言 如何判断链表有环

本文主要介绍了如何判断链表有环的问题,并进行了延伸: 如果链表有环如何求出环的长度,入环节点... ...嗯,点个赞总可以不!!! 目录 5.1如何判断链表有环 5.1.1 有一个单向链表,链表…

动态规划之——背包DP(进阶篇)

文章目录 概要说明多重背包(朴素算法)模板例题思路code 多重背包(二进制优化)模板例题思路code 多重背包(队列优化)模板例题思路 混合背包模板例题思路code1code2 二维费用背包模板例题思路code 概要说明 本文讲多重背包、混合背包以及二维费用背包&…

汇聚行业实践,树立应用典范——《Serverless应用实践案例集》重磅发布

云计算已经成为数字时代的基础设施,借助其规模效应实现资源的集约化利用,最大化发挥计算的价值。Serverless进一步优化了云服务供给模式,简化了云上应用的构建方式,代表了云计算的重要发展趋势。 2024年7月24日,2024可…

【Java】二维码生成工具

一、引入相关依赖 <!-- 引入Hutool工具库&#xff0c;简化Java开发&#xff0c;提高开发效率 --> <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.5</version> </dependency&…

LearnOpenGL之摄像机

前序 AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合&#xff1a; Github地址&#xff1a;https://github.com/wangyongyao1989/AndroidLearnOpenGL 系列文章&#xff1a; 1、LearnOpenGL之入门基础 2、LearnOpenGL之3D显示 3、LearnOpenGL之摄像机 4、LearnOpenG…

UNION ALL 在单个子查询中排序不生效问题

业务场景 有两张表&#xff1a;表A&#xff0c;和表B&#xff0c;需要对A中数据按排序字段排序&#xff0c;对B表也按排序字段排序&#xff0c;然后返回并集。 写出如下SQL&#xff08;已简化&#xff09;&#xff1a; (select id from A order by sort desc) union all (se…

《python语言程序设计》2018年版第6章31题调用time.time()返回从1970年1月1日0点开始显示当前日期和时间

我没按要求显示结果。但是内容差不都&#xff0c;关键。每个31日或者月底就时间出现偏差 # 之前已经做好的当前的小时、分、秒。 def currentTime_output():currentTime time.time()totalSeconds int(currentTime)currentSecond totalSeconds % 60totalMinutes totalSecon…