在了解了Git的相关操作之后,让我们来看看它的家庭成员。
分布式版本控制系统
Git是一款自由和开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Github
GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。它提供给用户空间以创建git仓库,保存用户的一些数据文档或者代码等。所以,很多优秀的项目都在GitHub进行托管,你可以轻易的拉下一个优秀的项目并改进它。
GitLab
GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
二者都是基于web的Git仓库,在正常使用中,GitHub同时提供公共仓库和私有仓库,但如果要使用私有仓库,是需要付费的。
而GitLab解决了这个问题,你可以在上面创建私人的免费仓库。
所以在大多数情况下,GitLab的安全性(私有仓库)和可见性(可以控制每个人能访问的项目)使他成为了公司商业项目的首选。但二者在操作上不会有大的区别。
在没有分布式之前,项目大多采用SVN进行管理,SVN就是一个集中式的版本控制系统,那二者又有什么区别呢?
集中式与分布式的区别
1.集中式版本控制系统(CVS,SVN)
有一个中央服务器,干活的时候,用的都是自己的电脑,需要先从中央服务器获取最新的版本,然后开始干活,干完活了,再把自己的修改推动给中央服务器。
缺点:需要联网的情况下才能使用,上传速度慢。
2.分布式版本控制系统(最常见的Git)
分布式版本控制系统没有中央服务器,每个人的电脑上都用一个完整的版本库,只要交换对方的修改就行,把各自的修改推送给对方。
分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
优点:安全性高,不需要联网
简单理解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下来,操作人员必定有该项目的权限,较为安全。