Git到底是什么?

299 阅读6分钟

一、什么是Git?

用一句话概括:

Git是目前世界上最先进的分布式版本控制系统,没有之一!

二、什么是版本控制系统?

🌴问题引入

我们来讲一个例子,在公司里,上司要让小明去写一份报告,小明是一个非常认真工作的员工,于是小明回到家后就开始写报告,写好了一份报告,却发现好像有些地方不太好,但对于原报告又不想删掉,说不定哪一天可以用得着呢,于是,小明就在第一份报告的基础上继续更改,第二个版本的报告完成了,但细心的小明发现不行,还得改,于是,就又写了版本3,版本4.....

于是就造成了以下这个局面:

image.png

🚀【痛苦面具1】:当小明想要找回之前修改的某个报告时,却【找不到了】,是不是极其【痛苦】。

🚀【痛苦面具2】:有些部分需要小明的同事帮助填写,于是小明把文件通过【微信】发送给他,然后,小明继续修改Word文件。一天后,同事再把Word文件传给小明,此时,小明需再想想,发给同事之后到收到他的文件期间,小明作了【哪些改动】,得把小明的改动和同事的部分【合并】,真【困难】。

🌴救星登场

如果有一个软件不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便

这个软件用起来就应该像这个样子,能记录每次文件的改动

image.png

而这个就是我们的版本控制系统

二、集中式与分布式版本控制区别

🌵集中式版本控制(CVCS)

🚀特点:

版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。

image.png

🚀优点:

1、每个人都可以在一定程度上看到项目中的其他人正在做些什么。

2、管理员可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库来得轻松容易。

🚀缺点:

1、必须联网才能工作,这也是其最大的毛病。

2、中央服务器的单点故障,如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。

3、安全问题欠佳,如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,那么我们将丢失所有数据。

🌵分布式版本控制系统(DVCS)

🚀特点:

与集中式版本控制系统相比,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,在工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。

🚀那么我们如何多人协作呢?

当你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

🚀实际开发中的使用

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。

因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

image.png

🔥集中式与分布式对比

1、集中式版本管理系统需要中央服务器,分布式管理系统不需要中央服务器。

2、集中式版本管理需要联网,分布式管理不需要联网。

3、分布式版本控制系统的安全性要比集中式版本管理高很多。

因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

三、Git工作流程

🌵工作流程

image.png

Workspace:工作区,平时存放项目代码的地方。

Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息。

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本。

Remote:远程仓库 ,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换。

🚀Git的工作流程:

1、在工作目录(Workspace)中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域(Index / Stage);

3、将暂存区域的文件提交到Git仓库。

🌵目录结构

image.png

Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。

WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。

.git:存放Git管理信息的目录,初始化仓库的时候自动创建。

Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。

Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。

Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

推荐更多学习课程:

java基础:    Java300集课程-Java必备优质教程_手把手图解学习Java,让学习成为一种享受_

Python基础: Python入门大全套!更适合初学者的Python从业速成计划!两个月可上岗那种!

java游戏项目:  【Java项目】开发王者荣耀教程和素材全套合集,不到2小时用Java做出王者荣耀

前端基础: 超干货!一周时间搭出小米商城!Web前端零基础入门HTML5+css3,学搭网站看这篇就够了!