1. 程式人生 > >git和svn的區別

git和svn的區別

完成 改版 歷史版本 mark avi 個數字 分層 img scm

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

1.git
git官網https://git-scm.com/ 官網上是這麽介紹的:
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
git是一個開源的分布式版本控制系統,用以快速高效的處理項目從很小到非常大的項目的版本控制的所有事情。
另外官網上的介紹還有,git性能卓越,超過甚至顛覆一些其他的產品如cvs,perfamce等,git有非常方便的本地分支,多個工作流等。
2.git和svn的比較
git和svn是目前最常用的團隊協作的版本控制系統。下面我們從版本控制系統的
以下的1,2,3也正是版本控制的演進歷史:
①本地版本控制系統:(解決個人的版本管理)
很多人的選擇的版本控制方法是將文件復制到另一個目錄(可能是一個時間標記的目錄,如果他們是聰明)。這種做法是很常見的,因為它是如此簡單,但是很容易出錯,比如很容易忘了你是哪個目錄,不小心寫了錯誤的文件等等。
為了解決這個問題,程序員早就開發了VCSS具有該保留所有文件的更改版本控制下的一個簡單的數據庫。

技術分享圖片

但是這種版本控制會丟失。畢竟是本地的。

②集中式版本控制:(svn是這種形式)

人們遇到的下一個主要問題是,他們需要與其他系統上的開發者合作。為了解決這個問題,出現了集中式版本控制系統(CVCSs)的開發工作。集中式版本控制系統,如CVS,Subversion和Perforce的,有一個包含所有版本文件的單個服務器和一個數字(版本號),眾多客戶端從這個server上去檢出文件(只是文件,本地沒有倉庫的概念)。 多年以來,這已經成為版本控制的標準。

技術分享圖片

但是集中式的版本控制,有個嚴重的缺陷。就是中央服務器的單點故障。如果服務宕機一個小時,在這期間,沒有任何人可以在正在工作的版本上很好的合作或者去保存某一個版本的改變。另外如果中央數據庫的磁盤壞了,並且可能沒有保存備份,那麽將丟失所有的東西。你失去了絕對一切 - 除了單一的任何人的快照恰好有在本地計算機上項目的整個歷史。當然本地的版本控制系統也有相同的問題。雖然,你能夠把每個人的本地代碼,進行合並得到一個相對完整的版本,但是當你把這個相對完整的版本重新部署到服務器的新倉庫時,將會丟失所有的歷史版本包括日誌。

③分布式版本控制:(git是這種形式,GIT跟SVN一樣有自己的集中式版本庫或服務器)

這是在分布式版本控制系統(DVCSs)步在DVCS(如GIT中),客戶端不只是檢查出文件的最新快照:他們完全鏡像的存儲庫(本地有倉庫,這就是分布式的意義)。因此,如果出現上述問題,任何客戶機庫的可復制備份到服務器,以恢復它。每一個克隆確實是所有數據的完整備份(除了沒有push的代碼,這個也是理所當然的)。

那麽針對於本地版本控制系統,和集中式版本控制系統的最嚴重的缺陷,就被分布式版本控制系統解決了。

技術分享圖片

另外類似git這樣的分布式版本管理系統,能更好的去處理你在多個遠程倉庫上的工作。這樣是你可以同時去和多個團隊去寫作開發。這允許您設置幾種類型的工作流,這些集中式版本控制系統是做不到的。比如說分層模型。

對比結果:

1.git是分布式的scm,svn是集中式的。(最核心)

2.git是每個歷史版本都存儲完整的文件,便於恢復,svn是存儲差異文件,歷史版本不可恢復。(核心)

3.git可離線完成大部分操作,svn則不能。

4.git有著更優雅的分支和合並實現。

5.git有著更強的撤銷修改和修改歷史版本的能力

6.git速度更快,效率更高。

基於以上區別,git有了很明顯的優勢,特別在於它具有的本地倉庫。

git和svn的區別