1、Git的歷史
Git是目前世界上最先進的分散式版本控制系統,開源、免費。
Git 是 Linus (林納斯)為了幫助管理 Linux 核心開發而開發的一個開放原始碼的版本控制軟體。
Tips:
Linus在1991年建立Linux,現在已經成為最大的伺服器系統軟體了。
Linux的壯大是靠全世界熱心的志願者:
在2002年以前,世界各地的志願者把原始碼檔案發給Linus,然後由Linus本人通過手工方式合併程式碼!
為什麼Linus不把Linux程式碼放到版本控制系統裡呢?
不是有CVS、SVN這些免費的版本控制系統嗎?
因為Linus堅定地反對CVS和SVN,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用。
有一些商用的版本控制系統,雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。
...
不過,到了2002年,Linux系統已經發展了十年了,程式碼庫之大讓Linus很難繼續通過手工方式管理了,社群的裡也對這種方式表達了強烈不滿,於是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出於人道主義精神,授權Linux社群免費使用這個版本控制系統。
...
安定團結的大好局面在2005年就被打破了,原因是Linux社群牛人聚集,開發Samba的這個人Andrew,試圖破解BitKeeper的協議(這麼幹的其實也不只他一個),被BitMover公司發現了,於是BitMover公司怒了,要收回Linux社群的免費使用權。
Linus花了兩週時間自己用C寫了一個分散式版本控制系統,這就是Git!一個月之內,Linux系統的原始碼已經由Git管理了!
Linus 對新的版本控制系統制訂了若干目標,如下圖所示:
Git迅速成為最流行的分散式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源專案免費提供Git儲存,無數開源專案開始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這麼偶然,如果不是當年BitMover公司威脅Linux社群,可能現在我們就沒有免費而超級好用的Git了。
Git的發展歷史圖:
2、Git的特點
當Git剛剛推出的時候很多人還對他發生質疑,但是不久之後因為Git具備非常好的特點,導致了開源社群很多專案沒過多久,就陸陸續續的從SVN上轉移到Git上來進行版本控制。
(1)Git的特點如下:
- Git中每個克隆(clone)的版本庫都是平等的。你可以從任何一個版本庫的克隆來建立屬於你自己的版本庫,同時你的版本庫也可以作為源提供給他人,只要你願意。
- Git的每一次拉取操作,實際上都是一次對程式碼倉庫的完整備份。
- 提交完全在本地完成,無須別人給你授權,你的版本庫你作主,並且提交總是會成功。
- 甚至基於舊版本的改動也可以成功提交,提交會基於舊的版本建立一個新的分支。
- Git的提交不會被打斷,直到你的工作完全滿意了,PUSH給他人或者他人PULL你的版本庫,合併會發生在PULL和PUSH過程中,不能自動解決的衝突會提示您手工完成。
- 衝突解決不再像是SVN一樣的提交競賽,而是在需要的時候才進行合併和衝突解決。
- Git版本庫統一放在伺服器中。Git 也可以模擬集中式的工作模式,同時Git 的集中式工作模式非常靈活,
- 團隊的成員先將伺服器的版本庫克隆到本地;並經常的從伺服器的版本庫拉(PULL)最新的更新。
- 團隊的成員將自己的改動推(PUSH)到伺服器的版本庫中,當其他人和版本庫同步(PULL)時,會自動獲取改變。
- 你完全可以在脫離Git伺服器所在網路的情況下,如移動辦公/出差時,照常使用程式碼庫。
- 你只需要在能夠接入Git伺服器所在網路時,PULL和PUSH即可完成和伺服器同步以及提交。
- Git提供
rebase
命令,可以讓你的改動看起來是基於最新的程式碼實現的改動。 - Git 有更多的工作模式可以選擇,遠非
Subversion
可比。 - 協同修改,多人可並行修改伺服器端的同一個檔案。
- 資料備份,不僅儲存目錄和檔案的當前狀態,還能夠儲存每一個提交過的歷史狀態。
- 版本管理,在儲存每一個版本的檔案資訊的時候要做到不儲存重複資料,以節約儲存空間,提高執行效率。這方面SVN採用的是增量式管理的方式,而Git採取了檔案系統快照的方式(對比Hash值)。
- 許可權控制,對團隊中參與開發的人員進行許可權控制。誰能建立版本庫,誰能向版本庫PUSH,誰能夠讀取(克隆)版本庫。對團隊外開發者貢獻的程式碼進行稽核,通過fork。(Git獨有)。
- 歷史記錄,檢視修改人、修改時間、修改內容、日誌資訊。將本地檔案恢復到某一個歷史狀態。
- 分支管理,允許開發團隊在工作過程中多條生產線同時推進任務,進一步提高效率。
(2)簡單說明:
Git有最優的儲存能力以及非凡的效能,得益於林納斯(Linus Torvalds
:林納斯·本納第克特·託瓦茲,Linux核心的發明人)本身的這個技能,他是Linux核心專家,也是檔案系統的管理專家。所以他開發出來的Git具備了最優的儲存能力以及非凡的效能。林納斯它本身就是崇尚開源的,所以他開發的Git也是開源的。
Git還很容易做備份,還支援離線的操作。基於Git的分支管理的成本是非常低的,而且也非常容易定製工作流程。
在實際使用分散式版本控制系統的時候,其實很少在兩人之間的電腦上推送版本庫的修改,因為可能你們倆不在一個區域網內,兩臺電腦互相訪問不了,也可能今天你的同事病了,他的電腦壓根沒有開機。因此分散式版本控制系統通常也有一臺充當”中央伺服器”的電腦,但這個伺服器的作用僅僅是用來方便“交換”大家的修改,沒有它大家也一樣幹活,只是交換修改不方便而已。
3、Git在專案協作開發中所解決的問題
- 多人協作,出現程式碼衝突 (版本控制工具)
- 多人協作,在程式碼整合期間引發BUG(回滾)
- 多人協作,領導要看專案 (版本歷史)
- 多人協作,使用者身份的控制(許可權管理)
- 專案版本的釋出問題 (標誌&里程碑管理)