SVN
SVN 作為一個開源的版本控制系統,管理著碎時間改變的數據,這些數據放置在一個中央資料檔案庫(repository
)中。這個檔案庫就像一個普通的文件服務器,它會記住每次文件的變動。我們可以瀏覽文件的變動歷史,把當前版本的文件恢復到舊的版本。
集中式代碼管理的核心是服務器,所有的版本信息都放在服務器上,因此受到網絡的限制。所有開發者在開始一天的工作前都要從服務器獲取最新版本的代碼,然后進行開發,再提交代碼,解決沖突。
Git
Git 是一款開源的分布式版本控制系統,可以敏捷高效的處理或大或小的項目。 分布式和 SVN 等集中式的最大區別在于每個開發人員從中心版本庫/服務器上 check out 代碼后會在自己的機器上克隆一個自己的版本庫。這樣在沒有網絡的情況下在本地也可以進行開發,代碼管理。
Git 的一些功能特性:
- 從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上;
- 在自己的機器上根據不同的開發目的,創建分支,修改代碼;
- 在單機上自己創建的分支上提交代碼;
- 在單機上合并分支;
- 把服務器上最新版的代碼fetch下來,然后跟自己的主分支合并;
- 生成補丁(patch),把補丁發送給主開發者;
......
Git 是一個系統,相當于一個工具,而 Github 就是基于這樣一個系統的平臺,讓開發者更高效地使用 Git 去托管自己的代碼。
Git 與 SVN 區別
Git 是分布式的,SVN 是集中式的。好處是跟其他同事不會有太多沖突,自己寫的代碼放在自己電腦上,一段時間后再提交、合并,也可以在不用聯網在本地提交。
Git 把內容按元數據方式存儲,而 SVN 是按文件。所有的資源控制系統都是把文件的元信息隱藏在一個類似
.svn
,.cvs
等的文件夾里。如果你把.git
目錄的體積大小跟.svn
比較,你會發現它們差距很大。因為,.git
目錄是處于你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標簽,分支,版本記錄等。Git 分支和 SVN 的分支不同。分支在 SVN 中一點不特別,就是版本庫中的另外的一個目錄。而 Git 可以從同一個工作目錄下快速的在幾個分支間切換。
Git 沒有一個全局的版本號,而 SVN 有。SVN 里容易閱讀的數字版本號,它實際是任何一個相應時間的源代碼快照。
Git 的內容完整性要優于 SVN。Git 的內容存儲使用的是 SHA-1 哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
SVN 和 Git 的適用性
SVN 更適用于項目管理, Git 僅適用于代碼管理。一個研發隊伍的成員正常包括:需求分析、設計、美工、程序員、測試、實施、運維,每個成員在工作中都有產出物, 包括了文檔、設計代碼、程序代碼,這些都需要按項目集中進行管理的。SVN 能清楚的按目錄進行分類管理,使項目組的管理處于有序高效的狀態。
參考文章
項目管理Git與SVN
Git和SVN之間的五個基本區別
注,文章只作為個人知識整理,學習使用。如有違規可隨時@我,謝謝。