工作中快速上手Git --软件原理篇

135 阅读4分钟

在了解了Git的相关操作之后,让我们来看看它的家庭成员。

分布式版本控制系统

Git是一款自由和开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Github

GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。它提供给用户空间以创建git仓库,保存用户的一些数据文档或者代码等。所以,很多优秀的项目都在GitHub进行托管,你可以轻易的拉下一个优秀的项目并改进它。

GitLab

GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

二者都是基于web的Git仓库,在正常使用中,GitHub同时提供公共仓库和私有仓库,但如果要使用私有仓库,是需要付费的。

GitLab解决了这个问题,你可以在上面创建私人的免费仓库。

所以在大多数情况下,GitLab的安全性(私有仓库)和可见性(可以控制每个人能访问的项目)使他成为了公司商业项目的首选。但二者在操作上不会有大的区别。

在没有分布式之前,项目大多采用SVN进行管理,SVN就是一个集中式的版本控制系统,那二者又有什么区别呢?

集中式与分布式的区别

1.集中式版本控制系统(CVS,SVN)

有一个中央服务器,干活的时候,用的都是自己的电脑,需要先从中央服务器获取最新的版本,然后开始干活,干完活了,再把自己的修改推动给中央服务器。

缺点:需要联网的情况下才能使用,上传速度慢。

img

2.分布式版本控制系统(最常见的Git)

分布式版本控制系统没有中央服务器,每个人的电脑上都用一个完整的版本库,只要交换对方的修改就行,把各自的修改推送给对方。

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

优点:安全性高,不需要联网

img

简单理解ssh协议

我们在git基本使用篇中配置过一个公钥,当时是为了实现免密登录,那个就是SSH。它跳过了用户名和密码,却还能帮助Git来验证我们身份,这是怎么做到的呢?

1.什么是SSH?

简单说,SSH是一种网络协议,用于计算机之间的免密远程登录。

如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的。

为什么是安全的?

因为SSH的通信即使被中途截获,密码也不会泄露

2.GitHub验证过程

1.用户将自己的公钥储存在远程主机上;

2.登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来;

3.远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell。

所以,就不需要我们再输入信息了。

HTTPS和SSH的区别

HTTPS:拿到url就可以直接clone项目而不需要多余配置,但是在push的时候需要验证用户名和密码;

SSH:clone前必须已经配置好SSH的公钥,并且这个项目你必须是拥有者或者管理员,但是其在push的时候就不需要输入用户名。

总结:

1.HTTPS 利于匿名访问,适合开源项目可以方便被别人克隆和读取;

2.SSH 适合于公司内部的项目,不是谁都能clone下来,操作人员必定有该项目的权限,较为安全。