如果你在讀這篇文章,說明你跟大多數開發者一樣對GIT感興趣,如果你還沒有機會來試一試GIT,我想現在你就要了解它了。
GIT不僅僅是個版本控制系統,它也是個内容管理系統(CMS),工作管理系統等。如果你是一個具有使用SVN背景的人,你需要做一定的思想轉換,來适應GIT提供的一些概念和特征。是以,這篇文章的主要目的就是通過介紹GIT能做什麼、它和SVN在深層次上究竟有什麼不同來幫助你認識它。
那好,這就開始吧…
1.GIT是分布式的,SVN不是:
這是GIT和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的差別。如果你能了解這個概念,那麼你就已經上手一半了。需要做一點聲明,GIT并不是目前第一個或唯一的分布式版本控制系統。還有一些系統,例如, 等,也是運作在分布式模式上的。但GIT在這方面做的更好,而且有更多強大的功能特征。
GIT跟SVN一樣有自己的集中式版本庫或伺服器。但,GIT更傾向于被使用于分布式模式,也就是每個開發人員從中心版本庫/伺服器上chect
out代碼後會在自己的機器上克隆一個自己的版本庫。可以這樣說,如果你被困在一個不能連接配接網絡的地方時,就像在飛機上,地下室,電梯裡等,你仍然能夠提
交檔案,檢視曆史版本記錄,建立項目分支,等。對一些人來說,這好像沒多大用處,但當你突然遇到沒有網絡的環境時,這個将解決你的大麻煩。
同樣,這種分布式的操作模式對于開源軟體社群的開發來說也是個巨大的恩賜,你不必再像以前那樣做出更新檔包,通過email方式發送出去,你隻需要建立一個分支,向項目團隊發送一個推請求。這能讓你的代碼保持最新,而且不會在傳輸過程中丢失。就是一個這樣的優秀案例。
有些謠言傳出來說subversion将來的版本也會基于分布式模式。但至少目前還看不出來。
2.GIT把内容按中繼資料方式存儲,而SVN是按檔案:
所有的資源控制系統都是把檔案的元資訊隐藏在一個類似.svn,.cvs等的檔案夾裡。如果你把.git目錄的
體積大小跟.svn比較,你會發現它們差距很大。因為,.git目錄是處于你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如标簽,分
支,版本記錄等。
3.GIT分支和SVN的分支不同:
分支在SVN中一點不特别,就是版本庫中的另外的一個目錄。如果你想知道是否合并了一個分支,你需要手工運作像這樣的指令,來确認代碼是否被合并。感謝Ben同學指出這個特征。是以,經常會發生有些分支被遺漏的情況。
然而,處理GIT的分支卻是相當的簡單和有趣。你可以從同一個工作目錄下快速的在幾個分支間切換。你很容易發現未被合并的分支,你能簡單而快捷的合并這些檔案。
4.GIT沒有一個全局的版本号,而SVN有:
目前為止這是跟SVN相比GIT缺少的最大的一個特征。你也知道,SVN的版本号實際是任何一個相應時間的源代
碼快照。我認為它是從CVS進化到SVN的最大的一個突破。因為GIT和SVN從概念上就不同,我不知道GIT裡是什麼特征與之對應。如果你有任何的線
索,請在評論裡奉獻出來與大家共享。
更新:有些讀者指出,我們可以使用GIT的SHA-1來唯一的辨別一個代碼快照。這個并不能完全的代替SVN裡容易閱讀的數字版本号。但,用途應該是相同的。
5.GIT的内容完整性要優于SVN:
GIT的内容存儲使用的是雜湊演算法。這能確定代碼内容的完整性,確定在遇到磁盤故障和網絡問題時降低對版本庫的破壞。這裡有一個很好的關于GIT内容完整性的讨論
–
GIT和SVN之間隻有這五處不同嗎?當然不是。我想這5個隻是“最基本的”和“最吸引人”的,我隻想到這5點。如果你發現有比這5點更有趣的,請共享出來,歡迎。