天天看點

svn與git的差別(總結)

版本控制器的作用:

可以協同代碼管理,讓多人開發代碼得以實作。

回歸到以前的任何一個時間點的代碼處(好比:開始寫了很多代碼,後面有修改了一些,突然IDE崩潰,但是發現還是以前的代碼更好,這個時候無法回去,這個時候沒有後悔藥吃,但是可以使用版本備份,但是即花費空間和花費時間)。

由于上面的版本備份造成版本衆多,難于找到正确的版本(SVN有專門的日志記錄了檔案的每一次修改,可以通過檢視日志回到任何一個自己想要的版本)。

代碼沖突的問題,主要是多人操作同一個檔案(團隊開發很常見)。

可以檢視每個人具體的操作,便于出現問題後及時排查(由于某個員工個人失誤造成很大的bug,可以友善的追究責任)。

常見的版本控制器分類

​CVS(90年代開發,版本控制器的鼻祖)、SVN(CVS的接班人)、VSS(微軟産品)、GIT(李納斯開發)

SVN

SVN:代碼控制器(版本控制器),主要是為了多人協同開發項目,管理代碼。也可以管理個人代碼。也叫程式界的”後悔藥“。

SVN(是subversion的簡稱)是近年來一款基于C/S架構的,非常優秀的版本控制器(可以簡單的了解為管理代碼的工具,在多人協同開發的時候,尤其重要),與傳統的CVS(90年代左右,一個非常優秀的代碼管理器,是代碼管理器的鼻祖)管理工具類似。

SVN可以随着時間的推移來管理各種資料,這些資料被放置在一個SVN管理的中央倉庫(所有的代碼的集合)裡面。同時SVN會備份并記錄每個檔案每一次的修改更新變動。這樣就開發者就可以回歸到任何一個時間點的某一個舊的版本(對于SVN,沒修改一次檔案,SVN就會建立一個叫做版本的概念,是從0 開始自增的序列)。當然也可以指定檔案的更新曆史記錄(index.php)。

SVN又叫做集中式版本控制器。嚴重的依賴伺服器端,當伺服器端無法使用的時候,版本控制也就無法再使用了。

svn工作流程圖

GIT​

Git是目前世界上最先進的分布式版本控制系統(沒有之一)。​當這個系統的任何一個用戶端出現問題的時候,都可以從另外的用戶端(即使伺服器挂了)擷取所有的代碼。

SVN與GIT的差別:

1.GIT是分布式的,而SVN是集中式的

2.GIT把内容按中繼資料方式存儲,而SVN是按檔案:因為git目錄是處于個人機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如标簽,分支,版本記錄等。​

3.GIT分支和SVN的分支不同:svn會發生分支遺漏的情況,而git可以同一個工作目錄下快速的在幾個分支間切換,很容易發現未被合并的分支,簡單而快捷的合并這些檔案。

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

5.GIT的内容完整性要優于SVN:GIT的内容存儲使用的是SHA-1雜湊演算法。這能確定代碼内容的完整性,確定在遇到磁盤故障和網絡問題時降低對版本庫的破壞。

集中式和分布式的差別:​

集中式版本控制系統:版本庫是集中存放在中央伺服器的,而幹活的時候,用的都是自己的電腦,是以要先從中央伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給中央伺服器。​集中式版本控制系統最大的毛病就是必須聯網才能工作。

​分布式版本控制系統:分布式版本控制系統根本沒有“中央伺服器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。比方說你在自己電腦上改了檔案A,你的同僚也在他的電腦上改了檔案A,這時,你們倆之間隻需把各自的修改推送給對方,就可以互相看到對方的修改了。

​為了友善“交換”大家的修改,分布式版本控制系統通常也有一台充當“中央伺服器”的電腦,但沒有它大家也一樣幹活,隻是交換修改不友善而已。

分布式版本控制系統的安全性要高很多,因為每個人電腦裡都有完整的版本庫,某一個人的電腦壞掉了不要緊,随便從其他人那裡複制一個就可以了。而集中式版本控制系統的中央伺服器要是出了問題,所有人都沒法幹活了。