前言
- 因為工作中目前要大量使用 Git,雖然之前已經會用了,但沒有系統的總結過,現在來重新總結
- 概念篇會直接搬網上的教程,比如:菜鳥、廖雪峰、老張、中文版Git,就不再花時間自己總結過概念了
Git 是什么?
- Git是目前世界上最先進的分布式版本控制系統(沒有之一),用於敏捷高效地處理任何或小或大的項目
- Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件
- Git 與常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本庫的方式,不必服務器端軟件支持
什么是集中式版本控制系統?
- 版本庫是集中存放在中央服務器的
- 而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活
- 干完活了,再把自己的活推送給中央服務器
- 中央服務器就好比是一個圖書館,你要改一本書,必須先從圖書館借出來,然后回到家自己改,改完了,再放回圖書館
缺點
- 集中式版本控制系統最大的毛病就是必須聯網才能工作
- 如果在局域網內還好,帶寬夠大,速度夠快
- 可如果在互聯網上,遇到網速慢的話,可能提交一個10M的文件就需要5分鍾,體驗極其不好
什么是分布式版本控制系統?
- 分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,就不需要聯網了
- Git 這種系統,客戶端並不只提取最新版本的文件快照, 而是把代碼倉庫完整地鏡像下來,包括完整的歷史記錄
- 那任何一處協同工作用的服務器發生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復, 因為每一次的克隆操作,實際上都是一次對代碼倉庫的完整備份
- 它還以指定和若干不同的遠端代碼倉庫進行交互,因此你就可以在同一個項目中,分別和不同工作小組的人相互協作,可以根據需要設定不同的協作流程
Git 和 SVN 的區別
-
Git 是分布式的,SVN 不是:這是 Git 和其它非分布式的版本控制系統,例如 SVN,CVS 等,最核心的區別
-
Git 把內容按元數據方式存儲,而 SVN 是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似 .svn、.cvs 等的文件夾里
-
Git 分支和 SVN 的分支不同:分支在 SVN 中一點都不特別,其實它就是版本庫中的另外一個目錄
-
Git 沒有一個全局的版本號,而 SVN 有:目前為止這是跟 SVN 相比 Git 缺少的最大的一個特征
-
Git 的內容完整性要優於 SVN:Git 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞
Git 的工作流程