用上GIT你必定會愛上他

前言

Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到很是大的項目版本管理。
Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。
Torvalds 開始着手開發 Git 是爲了做爲一種過渡方案來替代 BitKeeper,後者以前一直是 Linux 內核開發人員在全球使用的主要源代碼工具。開放源碼社區中的有些人以爲 BitKeeper 的許可證並不適合開放源碼社區的工做,所以 Torvalds 決定着手研究許可證更爲靈活的版本控制系統。儘管最初 Git 的開發是爲了輔助 Linux 內核開發的過程,可是咱們已經發如今不少其餘自由軟件項目中也使用了 Git。例如,X.org 最近就遷移到 Git 上來了,不少 Freedesktop.org 的項目也遷移到了 Git 上。git

GIT優點

分支更快、更容易。
支持離線工做;本地提交能夠稍後提交到服務器上。
Git 提交都是原子的,且是整個項目範圍的,而不像 CVS 中同樣是對每一個文件的。
Git 中的每一個工做樹都包含一個具備完整項目歷史的倉庫。
沒有哪個 Git 倉庫會天生比其餘倉庫更重要。算法

Git與SVN的區別

若是你在讀這篇文章,說明你跟大多數開發者同樣對GIT感興趣,若是你尚未機會來試一試GIT,我想如今你就要了解它了。服務器

GIT不只僅是個版本控制系統,它也是個內容管理系統(CMS),工做管理系統等。若是你是一個具備使用SVN背景的人,你須要作必定的思想轉換,來適應GIT提供的一些概念和特徵。因此,這篇文章的主要目的就是經過介紹GIT能作什麼、它和SVN在深層次上究竟有什麼不一樣來幫助你認識它。網絡

那好,這就開始吧…分佈式

1. GIT是分佈式的,SVN不是:

這是GIT和其它非分佈式的版本控制系統,例如SVN,CVS等,最核心的區別。若是你能理解這個概念,那麼你就已經上手一半了。須要作一點聲明,GIT並非目前第一個或惟一的分佈式版本控制系統。還有一些系統,例如Bitkeeper, Mercurial等,也是運行在分佈式模式上的。但GIT在這方面作的更好,並且有更多強大的功能特徵。svn

GIT跟SVN同樣有本身的集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個本身的版本庫。能夠這樣說,若是你被困在一個不能鏈接網絡的地方時,就像在飛機上,地下室,電梯裏等,你仍然可以提交文件,查看歷史版本記錄,建立項目分支,等。對一些人來講,這好像沒多大用處,但當你忽然遇到沒有網絡的環境時,這個將解決你的大麻煩。工具

一樣,這種分佈式的操做模式對於開源軟件社區的開發來講也是個巨大的恩賜,你沒必要再像之前那樣作出補丁包,經過email方式發送出去,你只須要建立一個分支,向項目團隊發送一個推請求。這能讓你的代碼保持最新,並且不會在傳輸過程當中丟失。GitHub.com就是一個這樣的優秀案例。動畫

有些謠言傳出來講subversion未來的版本也會基於分佈式模式。但至少目前還看不出來。ui

2. GIT把內容按元數據方式存儲,而SVN是按文件:

全部的資源控制系統都是把文件的元信息隱藏在一個相似.svn,.cvs等的文件夾裏。若是你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。由於,.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上全部的東西,例如標籤,分支,版本記錄等。.net

3. GIT分支和SVN的分支不一樣:

分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。若是你想知道是否合併了一個分支,你須要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合併。感謝Ben同窗指出這個特徵。因此,常常會發生有些分支被遺漏的狀況

然而,處理GIT的分支倒是至關的簡單和有趣。你能夠從同一個工做目錄下快速的在幾個分支間切換。你很容易發現未被合併的分支,你能簡單而快捷的合併這些文件。
GIT

4. GIT沒有一個全局的版本號,而SVN有:

目前爲止這是跟SVN相比GIT缺乏的最大的一個特徵。你也知道,SVN的版本號實際是任何一個相應時間的源代碼快照。我認爲它是從CVS進化到SVN的最大的一個突破。由於GIT和SVN從概念上就不一樣,我不知道GIT裏是什麼特徵與之對應。若是你有任何的線索,請在評論裏奉獻出來與你們共享。

更新:有些讀者指出,咱們可使用GIT的SHA-1來惟一的標識一個代碼快照。這個並不能徹底的代替SVN裏容易閱讀的數字版本號。但,用途應該是相同的。

## 5. GIT的內容完整性要優於SVN:

GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時下降對版本庫的破壞。這裏有一個很好的關於GIT內容完整性的討論 –http://stackoverflow.com/questions/964331/git-file-integrity

GIT和SVN之間只有這五處不一樣嗎?固然不是。我想這5個只是「最基本的」和「最吸引人」的,我只想到這5點。若是你發現有比這5點更有趣的,請共享出來,歡迎。

更多其餘資料

爲何說 Git 比 SVN 更好:http://www.oschina.net/news/29214/why-git-is-better-than-svn
Git初體驗:http://my.oschina.net/dxqr/blog/134811
git官網:http://git-scm.com
git快速入門(gif動畫版):http://git.oschina.net/wzw/git-quick-start

相關文章
相關標籤/搜索