Git、GitHub、GitLab 三者之間的聯繫以及區別

在講區別以及聯繫之前先簡要的介紹一下,這三者都是什麼 (本篇文章適合剛入門的新手,大佬請出門左轉)

  1. 什麼是 Git?

Git 是一個版本控制系統。

版本控制是一種用於記錄一個或多個文件內容變化,方便我們查閱特定版本修訂情況的系統。

以前在沒有使用版本控制的時候,我們通常在我們的項目根目錄下這樣命名項目:

project_v1、project_v1.1、project_v2 等等,通過這種方式記錄我們項目的不同版本的修改,

有的時候我們還會在不同版本的文件中寫一個說明,記錄此版本項目新增、修改,刪除等操作。

這樣的操作是很繁雜的,有的時候還可能因爲一些非人爲因素導致文件丟失這樣的事故。

有了版本控制系統,我們就不用再手動進行一些繁雜的操作,並且對於文件丟失這種事故我們也不

用再擔心,你可以隨便回到歷史記錄的某個時刻。

早期出現的版本控制系統有:SVN、CVS 等,它們是集中式版本控制系統,都有一個單一的集中管理

的服務器,保存所有文件的修訂版本,而協同合作的開發人員都通過客戶端連接到這臺服務器,取出

最新的文件或者提交更新。

從網上找了一張圖,展示一下它們的原理:

而我們的主角 Git 是分佈式版本控制系統。Git 已經成爲越來越多開發者的青睞,因爲分佈式的優勢是很顯著的。

  1. 說一下集中式和分佈式版本控制系統的區別:

集中式版本控制系統,版本庫是集中存放在中央服務器的,工作的時候,用的是自己的電腦,所以,我們首先需要

從中央服務器上拉取最新的版本,然後開始工作,等工作完了,再把自己的工作提交到中央服務器。在這裏借用廖

雪峯老師的一個比喻,中央服務器好比是一個圖書館,你要改其中的一本書,必須先要從圖書館裏把書借出來,然

後更改,改完之後,再放回圖書館。

集中式版本控制系統的一個最大毛病就是必須聯網才能工作,所以對於網絡環境比較差的情況使用集中式版本控制

系統是一件比較讓人頭疼的事情。

分佈式版本控制系統沒有中央服務器的概念,我們使用相關的客戶端提取的不只是最新的文件,而是把代碼倉庫完整

地鏡像下來,相當於每個人的電腦都是一個完整的版本庫,這樣的話,任何一處協同工作的服務器出現故障,都可以

用任何一個鏡像出來的本地倉庫恢復。並且,即便在網絡環境比較差的情況下也不用擔心,因爲版本庫就在本地電腦

上。

個人總結:

(1). 分佈式版本控制系統下的本地倉庫包含代碼庫還有歷史庫,在本地就可以查看版本歷史

(2). 而集中式版本控制系統下的歷史倉庫是存在於中央倉庫,每次對比與提交代碼都必須連接到中央倉庫

(3). 多人開發時,如果充當中央倉庫的 Git 倉庫掛掉了,任何一個開發者都可以隨時創建一個新的中央倉庫然後同步就可

以恢復中央倉庫

從網上找了一張圖,展示一下它們的原理:

3.GitHub 和  GitLab 都是基於 web 的 Git 倉庫,使用起來二者差不多,它們都提供了分享開源項目的平臺,

爲開發團隊提供了存儲、分享、發佈和合作開發項目的中心化雲存儲的場所。

GitHub 作爲開源代碼庫,擁有超過 900 萬的開發者用戶,目前仍然是最火的開源項目託管平臺,GitHub 同時

提供公共倉庫和私有倉庫,但如果使用私有倉庫,是需要付費的。

GitLab 解決了這個問題,你可以在上面創建私人的免費倉庫。

GitLab 讓開發團隊對他們的代碼倉庫擁有更多的控制,相比較 GitHub , 它有不少特色:

(1) 允許免費設置倉庫權限;

(2) 允許用戶選擇分享一個 project 的部分代碼;

(3) 允許用戶設置 project 的獲取權限,進一步提升安全性;

(4) 可以設置獲取到團隊整體的改進進度;

(5) 通過 innersourcing 讓不在權限範圍內的人訪問不到該資源;

所以,從代碼的私有性上來看,GitLab 是一個更好的選擇。但是對於開源項目而言,GitHub 依然是代碼託管的首選。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/uQkPJGijuJ-_aI-4xYhfzA