Git與SVN的區別

2022-08-25 23:51:29 字數 1856 閱讀 5137

一、 svn系統執行示意圖:

svn的每一次提交,都會在伺服器端的db/revs 和 db/rebprops目錄下各建立乙個以順序數字編號命名的檔案。其中:

1.  db/revs 目錄下的檔案(即變更集內容)記錄了與上乙個提交之間的差異(字母a表示新增,m表示修改,d表示刪除)

2. db/rebprops 目錄下同名檔案則儲存著提交日誌,作者,提交時間等資訊。

這樣設計的好處有:

1. 擁有全域性版本號。每提交一次,svn的版本號就會自動加一(全域性版本號)。這為svn的使用提供了極大的便利。回想cvs時代,每個檔案都擁有各自獨立的版本號(rcs版本號),要想獲得全域性版本號,只能通過手工不斷地建立里程碑來實現。

2.實現了原子提交。svn不會像cvs那樣出現檔案的部分內容被提交而其餘的內容沒有被提交的情況(說明svn是真個專案整體提交的)。

3. 檔名不受限制。因為伺服器端不再需要建立和客戶端檔案相似的檔名,於是,檔案的命名就不再受伺服器作業系統的字符集和大小寫的限制。

4. 檔案和目錄重新命名也得到了支援。

svn最具有特色的功能是輕量級拷貝,例如:將目錄trunk拷貝為branches/v1.x只相當於在db/revs的目錄中的變更集檔案中用特定的語法做了一下標註,無須真正的檔案拷貝。svn使用輕量級拷貝的功能,輕鬆地解決了cvs存在的里程碑和分支的建立速度慢又不可見的問題,使用svn建立里程碑和分支只在眨眼之間。

svn在版本庫授權上也有改進,不再像cvs那樣依賴作業系統本身對版本庫目錄和檔案進行授權,而是採用授權檔案的方式來實現。

svn還有乙個創舉,就是在工作區跟蹤目錄下(.svn目錄)為當前目錄中的每乙個檔案都儲存乙份冗餘的原始拷貝。這樣做的好處是部分命令不再需要網路連線,例如檔案修改的差異比較,以及錯誤更改的回退等。

但是,相對於cvs,svn在本質上並沒有突破,都屬於集中式版本控制系統即乙個專案只有唯一的乙個版本庫與之對應,所有的專案成員都通過網路向該伺服器進行提交。這樣的設計除了容易出現單點故障以外,在檢視日誌和提交資料等操作時的延遲,會讓基於廣域網協同工作的團隊抓狂。

除了集中式版本控制系統固有的問題外,svn的里程碑和分支的設計也被證明是乙個錯誤,雖然這個錯誤的設計使得svn擁有了快速建立里程碑和分支的能力,

1.   專案檔案在版本庫中必須按照一定的目錄結構進行部署,否則就可能無法建立里程碑和分支。如: 直接在版本庫的根目錄下建立專案檔案,這樣的版本庫布局,在需要建立里程碑和分支時就無從下手了,因為根目錄是不能拷貝到子目錄中的。所以svn的使用者在建立版本庫時必須遵守乙個古怪的約定:先建立三個頂級目錄 /trunk ,/tags 和 /branches。

2.  建立里程碑和分支會破壞精心設計的授權。

svn的授權是基於目錄的,分支和里程碑也被視為目錄(和其他目錄沒有分別)。因此每次建立分支和里程碑時,就要將針對/trunk及其子目錄的授權在新建的分支或里程碑上重建。隨著分支和里程碑數量的增多,授權愈加複雜,維護也愈加困難。

3.  分支太隨意從而導致混亂。 svn的分支建立非常隨意:可以基於 /trunk 目錄建立分支,也可以基於其他任何目錄建立分支,因此svn很難畫出乙個有意義的分支圖。再加上一次提交可以同時包含針對不同分支的檔案變更,使得事情變得更糟。

4. 雖然svn在1.5版本之後擁有了合併追蹤功能,但這個功能會因為混亂的分支管理而被抵消。

Svn與Git的區別

這篇主要是談談兩者的區別,至於誰優誰劣看官自己思考吧!把第一條理解到位思想到位了做起來才會有的放矢,其他幾條都是用的時候才能體會到 1 最核心的區別git是分布式的,而svn不是分布的。能理解這點,上手會很容易,宣告一點git並不是目前唯一的分布式版本控制系統,還有比如mercurial等,所以說它...

Svn與Git的區別

1 最核心的區別git是分布式的,而svn不是分布的。能理解這點,上手會很容易,宣告一點git並不是目前唯一的分布式版本控制系統,還有比如mercurial等,所以說它們差不許多。話說回來git跟svn一樣有自己的集中式版本庫和server端,但git更傾向於分布式開發,因為每乙個開發人員的電腦上都...

Git與SVN的區別

如果你在讀這篇文章,說明你跟大多數開發者一樣對git感興趣,如果你還沒有機會來試一試git,我想現在你就要了解它了。git不僅僅是個版本控制系統,它也是個內容管理系統 cms 工作管理系統等。如果你是乙個具有使用svn背景的人,你需要做一定的思想轉換,來適應git提供的一些概念和特徵。所以,這篇文章...