初識 git
git
是一個開源的分布式版本控制系統,用于靈活高效地處理任何或小或大的項目.
背景
我們都知道,Linus 在1991年建立了開源的
linux
系統,随着不斷發展壯大,目前已發展成為最大的伺服器系統軟體.
Linus 雖然建立了
linux
,但
linux
的發展壯大是靠全世界熱心的志願者參與貢獻的,這麼多人在世界各地為
linux
系統編寫代碼,那麼
linux
的代碼是如何管理呢?
事實上,在2002年以前,世界各地的志願者直接将源代碼通過
diff
的方式發送給Linus,然後由Linus本人通過手動方式合并代碼!
...
Linus花了兩周時間自己用
C語言
寫了一個分布式版本控制系統,這就是Git!
一個月之内,Linux系統的源碼已經由Git管理了!牛是怎麼定義的呢?大家可以體會一下.
分布式 和 集中式
先說集中式版本控制系統,版本庫是集中存放在專門的中央伺服器中,而平時使用過程中需要時刻處于聯網狀态才能和中央伺服器保持聯系.日常工作流程是這樣的,上班前先從中央伺服器拉取最新工作内容,本地修改完畢後推送到中央伺服器,第二天上班再拉取最新内容,修改後再推送給中央伺服器...
集中式版本控制系統的特點就是必須要有一個專門的中央伺服器,工作中必須聯網才能進行版本控制,試想一下如果正在在外地出差或者沒有網絡條件下,還怎麼進行版本控制,豈不是又重新回到原始時代了嗎?
那再說說分布式版本控制系統,版本庫是存放在各自使用者的電腦的,不需要專門的中央伺服器,每個人電腦中就是一份完整的版本庫,是以不需要聯網也能工作,工作流程和其他的版本控制系統大緻相同.
由此可見,集中式的版本控制系統依賴于中央伺服器,要求使用者一直保持通信,而分布式的版本控制系統并不依賴中央伺服器,不必強制聯網.
萬一出現意外,集中式版本控制系統中充當
中央伺服器
的電腦當機了,那麼所有人就沒法工作了,再也不能享受版本控制帶來的便利了!
同樣的情況發生在分布式版本控制系統身上會如何呢?一台電腦當機沒關系,所有人的電腦不可能同時都當機吧,因為每個人電腦中都是一份完整的版本控制,那麼找到其中一個人的版本手動複制到當機電腦中瞬間不久恢複運作了麼?是以說分布式比集中式更安全!
可能會有疑問了,既然分布式版本控制系統中每個人都擁有完整的版本庫,那麼兩個人到底如何交流以誰的版本為準呢?一個版本,兩個版本還好,假設有100個版本庫呢?
實際上,這并不重要,假設有100個人在合作開發一個項目,而你作為項目負責人,你可能并不關心100人的全部工作細節,在乎的隻是最終成果,而這些成果是由10個項目組長送出維護的,是以你關心的隻是10個版本,假設沒有集中式的中央伺服器角色,那麼你需要手動合并10個版本庫,最終完成項目.
這樣看起來中央伺服器确實還是有存在的必要,為了友善不同版本庫之間進行交流,通常分布式版本控制系統也有一台充當中央伺服器角色的電腦,需要了解的是,此時中央伺服器的作用僅僅是友善大家交換各自的修改而已,沒有它,大家還是可以照常工作的,隻是彼此間交換修改不太友善而已!
不論是分布式還是集中式,存在即合理,如何取舍有着各自應用場景,分别代表民主和專制.
git 和 svn
git
是分布式版本控制系統的代表,除此之外還有
BitKeeper
,
Mercurial
Bazaar
等分布式控制系統,每種分布式控制系統均有自身特點,毋容置疑的是
git
是最簡單最流行!
svn
是集中式版本控制系統的代表,是目前使用最廣泛的集中式版本控制系統,
cvs
ClearCase
等均屬于集中式.
不論是分布式還是集中式,不論是免費還是收費,不一昧追求最好的,隻需要最适合自己的即可.
-
是分布式控制系統,git
是集中式版本控制系統svn
-
将内容按中繼資料方式存儲,git
是按檔案方式存儲svn
-
的内容完整性優于git
,因為svn
内容存儲基于git
雜湊演算法,確定内容的完整性.sha-1
小結
git
是Linus為了幫助管理
Linux
核心開發而開發的一個開放源碼的版本控制軟體.
原文請通路 https://snowdreams1006.github.io/git/base/about.html