在講區別以及聯繫以前先簡要的介紹一下,這三者都是什麼(本篇文章適合剛入門的新手,大佬請出門左轉)web
1.什麼是 Git?安全
Git 是一個版本控制系統。服務器
版本控制是一種用於記錄一個或多個文件內容變化,方便咱們查閱特定版本修訂狀況的系統。網絡
之前在沒有使用版本控制的時候,咱們一般在咱們的項目根目錄下這樣命名項目:分佈式
project_v一、project_v1.一、project_v2等等,經過這種方式記錄咱們項目的不一樣版本的修改,版本控制
有的時候咱們還會在不一樣版本的文件中寫一個說明,記錄此版本項目新增、修改,刪除等操做。blog
這樣的操做是很繁雜的,有的時候還可能由於一些非人爲因素致使文件丟失這樣的事故。ci
有了版本控制系統,咱們就不用再手動進行一些繁雜的操做,而且對於文件丟失這種事故咱們也不資源
用再擔憂,你能夠隨便回到歷史記錄的某個時刻。開發
早期出現的版本控制系統有:SVN、CVS等,它們是集中式版本控制系統,都有一個單一的集中管理
的服務器,保存全部文件的修訂版本,而協同合做的開發人員都經過客戶端鏈接到這臺服務器,取出
最新的文件或者提交更新。
從網上找了一張圖,展現一下它們的原理:
而咱們的主角 Git 是分佈式版本控制系統。Git 已經成爲愈來愈多開發者的青睞,由於分佈式的優點是很顯著的。
2.說一下集中式和分佈式版本控制系統的區別:
集中式版本控制系統,版本庫是集中存放在中央服務器的,工做的時候,用的是本身的電腦,因此,咱們首先須要
從中央服務器上拉取最新的版本,而後開始工做,等工做完了,再把本身的工做提交到中央服務器。在這裏借用廖
雪峯老師的一個比喻,中央服務器比如是一個圖書館,你要改其中的一本書,必須先要從圖書館裏把書借出來,然
後更改,改完以後,再放回圖書館。
集中式版本控制系統的一個最大毛病就是必須聯網才能工做,因此對於網絡環境比較差的狀況使用集中式版本控制
系統是一件比較讓人頭疼的事情。
分佈式版本控制系統沒有中央服務器的概念,咱們使用相關的客戶端提取的不僅是最新的文件,而是把代碼倉庫完整
地鏡像下來,至關於每一個人的電腦都是一個完整的版本庫,這樣的話,任何一處協同工做的服務器出現故障,均可以
用任何一個鏡像出來的本地倉庫恢復。而且,即使在網絡環境比較差的狀況下也不用擔憂,由於版本庫就在本地電腦
上。
我的總結:
(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 依然是代碼託管的首選。