Git - Git、GitHub、GitLab三者之间的关系

先来个总结版

  • Git:是一种版本控制系统,是一个命令,是一种工具
  • GitHub:一个基于Git实现的在线代码仓库,包含一个网站界面,向互联网开放
  • GitLab:一个基于Git实现的在线代码仓库软件,用于实现Git功能的开发库,可以自己用gitlab搭建一个类似GitHub一样的系统,一般用于企业、学校内部网络搭建git私服

详细来谈一谈

原始版本控制与Git

Git是一个版本控制系统。

版本控制是一种用于记录一个或多个文件内容变化,方便我们查询特定版本修订状态的系统。

以前在没有使用版本控制的时候,我们通常在我们的目录下记录多个命名的文件夹:

project_v1

project_v2

project_v2.1........

有的时候我们还会在不同版本的目录中写一个说明文档,记录这个版本的新增,修改,删除等信息

这样的操作是很繁杂的,有的时候还可能因为非人为因素导致文件的丢失和损坏等事故。

有了版本控制系统,我们就不用手动进行一些繁杂的操作,并且对于文件丢失这种事故我们也不用担心了,可以随时回退到历史版本。

早期的版本控制系统有:svn、cvs等,他们都是集中式版本控制系统,都是一个单个的集中管理的服务器,保存的所有文件的修订版本,而协同合作的开发人员都通过客户端连接到对应服务器,取出相应的最新的文件或者提交更新。

集中式和分布式版本控制系统

集中式版本控制系统

版本库是集中存放在*服务器的,工作的时候,用的是自己的电脑,所以,我们先需要从*服务器上拉取最新的版本,然后工作,工作完,将自己的工作提交到*服务器。

一个比喻:

*服务器好比一个图书馆,你需要修改其中一本书,必须要先从图书馆中把书借出来,然后修改,改完了,放回图书馆

集中式版本控制系统的最大一个毛病就是必须联网才能操作,所以对于网络较差的情况下使用集中式版本控制系统是一件比较让人头疼的事情。

分布式版本控制系统

分布式版本控制系统没有*服务器的概念,我们使用相关的客户端提取的不只是最新的文件,而是把代码仓库完整的镜像下载,相当于每个人的电脑都是一个完整的版本库,这样的话,任何一处工作的服务器出现故障,都可以用任何一个镜像出来的本地仓库进行恢复,并且,即使在网络脚叉的情况下也不用担心,因为版本库就在本地电脑上。

总结:

  • 分布式版本控制系统下的本地仓库包含代码还有历史库,在本地就可以查看历史版本。
  • 集中式版本控制系统下的历史仓库存于*仓库,每次对比与提交代码都必须连接到*仓库
  • 多人开发时,如果充当*仓库的Git仓库挂了,任何一个开发者都可以随时创建一个新的*仓库然后同步就可以恢复*仓库

Git - Git、GitHub、GitLab三者之间的关系

优点与劣势

GitHub和GitLab都是基于web的Git仓库,使用起来二者相差不大,都提供了分享项目的平台,为开发者提供了存储,分享,发布和合作开发项目的中心化云存储的场所。

GitHub作为开源代码库,拥有超过920万的开发者用户,目前仍然是最火的开源项目托管平台,GitHub同时提供了公共仓库和私有仓库,但如果使用私有仓库,是需要付费的。

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

GitLab让开发团队对他们的代码仓库拥有更多的控制,相比较GitHub,他有不少特色

  • 允许免费设置仓库权限
  • 允许用户选择分享一个project的部分源码
  • 允许用户设置project的获取权限,进一步提升安全性
  • 可以设置获取到团队整体的改进进度
  • 通过innersourcing让不在权限范围内的人访问不到的资源

总结

从代码的私有性上来看,GitLab是一个不错的选择,但是对于开源形目而言,GitHub仍然是代码托管的首选。