經常使用的版本控制系統有VSS、SVN、CVS等等,Git是最近幾年使用得比較多的分佈式版本控制系統,存在即合理,Git的出現總有它出現的理由,之前的版本控制系統確定有一些不足的地方,因此纔出現了Git。git
[1].Git簡介
Git是一款免費、開源的分佈式版本控制系統,用於敏捷高效地處理任何或小或大的項目。Git的讀音爲/gɪt/。github
Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到很是大的項目版本管理。Git 是 Linus Torvalds 爲了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。web
Torvalds 開始着手開發 Git 是爲了做爲一種過渡方案來替代 BitKeeper,後者以前一直是 Linux 內核開發人員在全球使用的主要源代碼工具。開放源碼社區中的有些人以爲 BitKeeper 的許可證並不適合開放源碼社區的工做,所以 Torvalds 決定着手研究許可證更爲靈活的版本控制系統。儘管最初 Git 的開發是爲了輔助 Linux 內核開發的過程,可是咱們已經發如今不少其餘自由軟件項目中也使用了 Git。例如 最近就遷移到 Git 上來了,不少 Freedesktop 的項目也遷移到了 Git 上。算法
Git特色
分佈式相比於集中式的最大區別在於開發者能夠提交到本地,每一個開發者經過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫。
下圖是經典的git開發過程。服務器
Git的功能特性:
從通常開發者的角度來看,git有如下功能:
一、從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
二、在本身的機器上根據不一樣的開發目的,建立分支,修改代碼。
三、在單機上本身建立的分支上提交代碼。
四、在單機上合併分支。
五、把服務器上最新版的代碼fetch下來,而後跟本身的主分支合併。
六、生成補丁(patch),把補丁發送給主開發者。
七、看主開發者的反饋,若是主開發者發現兩個通常開發者之間有衝突(他們之間能夠合做解決的衝突),就會要求他們先解決衝突,而後再由其中一我的提交。若是主開發者能夠本身解決,或者沒有衝突,就經過。
八、通常開發者之間解決衝突的方法,開發者之間可使用pull 命令解決衝突,解決完衝突以後再向主開發者提交補丁。網絡
從主開發者的角度(假設主開發者不用開發代碼)看,git有如下功能:分佈式
一、查看郵件或者經過其它方式查看通常開發者的提交狀態。
二、打上補丁,解決衝突(能夠本身解決,也能夠要求開發者之間解決之後再從新提交,若是是開源項目,還要決定哪些補丁有用,哪些不用)。
三、向公共服務器提交結果,而後通知全部開發人員。svn
優勢:
適合分佈式開發,強調個體。
公共服務器壓力和數據量都不會太大。
速度快、靈活。
任意兩個開發者之間能夠很容易的解決衝突。
離線工做。工具
缺點:
資料少(起碼中文資料不多)。
學習週期相對而言比較長。
不符合常規思惟。
代碼保密性差,一旦開發者把整個庫克隆下來就能夠徹底公開全部代碼和版本信息。學習
Via: http://baike.baidu.com/subview/1531489/12032478.htm
[2].推薦!手把手教你使用Git
這篇文章寫的Git教程寫得太好了,很是實用,適合對Git剛剛入門的朋友學習,教程很是全面。
一:Git是什麼?
Git是目前世界上最早進的分佈式版本控制系統。
二:SVN與Git的最主要的區別?
SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而幹活的時候,用的都是本身的電腦,因此首先要從中央服務器哪裏獲得最新的版本,而後幹活,幹完後,須要把本身作完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工做,若是在局域網還能夠,帶寬夠大,速度夠快,若是在互聯網下,若是網速慢的話,就納悶了。
Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每一個人的電腦就是一個完整的版本庫,這樣,工做的時候就不須要聯網了,由於版本都是在本身的電腦上。既然每一個人的電腦都有一個完整的版本庫,那多我的如何協做呢?好比說本身在電腦上改了文件A,其餘人也在電腦上改了文件A,這時,大家兩之間只需把各自的修改推送給對方,就能夠互相看到對方的修改了。
Via: http://blog.jobbole.com/78960/
[3].GIT和SVN之間的五個基本區別
1.GIT是分佈式的,SVN不是:
這是GIT和其它非分佈式的版本控制系統,例如SVN,CVS等,最核心的區別。若是你能理解這個概念,那麼你就已經上手一半了。須要作一點聲明,GIT並非目前第一個或惟一的分佈式版本控制系統。還有一些系統,例如Bitkeeper, Mercurial等,也是運行在分佈式模式上的。但GIT在這方面作的更好,並且有更多強大的功能特徵。
GIT跟SVN同樣有本身的集中式版本庫或服務器。但,GIT更傾向於被使用於分佈式模式,也就是每一個開發人員從中心版本庫/服務器上chect out代碼後會在本身的機器上克隆一個本身的版本庫。能夠這樣說,若是你被困在一個不能鏈接網絡的地方時,就像在飛機上,地下室,電梯裏等,你仍然可以提 交文件,查看歷史版本記錄,建立項目分支,等。對一些人來講,這好像沒多大用處,但當你忽然遇到沒有網絡的環境時,這個將解決你的大麻煩。
一樣,這種分佈式的操做模式對於開源軟件社區的開發來講也是個巨大的恩賜,你沒必要再像之前那樣作出補丁包,經過email方式發送出去,你只須要建立一個分支,向項目團隊發送一個推請求。這能讓你的代碼保持最新,並且不會在傳輸過程當中丟失。GitHub.com就是一個這樣的優秀案例。
有些謠言傳出來講subversion未來的版本也會基於分佈式模式。但至少目前還看不出來。
2.GIT把內容按元數據方式存儲,而SVN是按文件:
全部的資源控制系統都是把文件的元信息隱藏在一個相似.svn,.cvs等的文件夾裏。若是你把.git目錄的 體積大小跟.svn比較,你會發現它們差距很大。由於,.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上全部的東西,例如標籤,分 支,版本記錄等。
3.GIT分支和SVN的分支不一樣:
分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。若是你想知道是否合併了一個分支,你須要手工運行像這樣的命令svn propget svn:mergeinfo,來確認代碼是否被合併。感謝Ben同窗指出這個特徵。因此,常常會發生有些分支被遺漏的狀況。
然而,處理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
Via: http://www.oschina.net/news/12542/git-and-svn
延伸閱讀:
http://www.baidu.com/s?wd=git
http://www.sogou.com/web?query=git
http://www.so.com/s?q=git
http://baike.baidu.com/subview/1531489/12032478.htm
http://blog.jobbole.com/78960/
http://www.oschina.net/news/12542/git-and-svn
http://git-scm.com/
https://github.com/git/git