SVN和Git區別


SVN和Git的區別

SVN和Git都是比較常用和熟悉的版本控制器,各自有着自己的優勢和實用場景,今天就着兩種版本控制器來說說。

 

SVN:

SVN是Subversion的簡稱,是一個開放源代碼的集中式版本控制系統,支持大多數常見的操作系統。比Git早些出來,目前來說,大多是開發人員都是比較熟悉這款工具的。TortoiseSVN這款輔助軟件相信很多人都用過。

工作流程

集中式管理的工作流程如下圖:

 

Git:

是一個開源的分布式版本控制系統,可以有效、高速的處理從很小到非常大的項目版本管理。Git是為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。是一款比較進階的代碼控制器。

 

工作流程

下圖是經典的git開發過程。

 

SVN的特點:SVN對中文支持好,操作簡單,使用沒有難度,美工人員,產品人員,測試人員,實施人員都可輕松上手。使用界面統一,功能完善,操作方便。

(1)SVN的部署比較方便,擁有一個服務器主倉庫,開發人員都相當於是客戶端,設計理念上比較簡潔,容易讓人理解和接受,適合中小型代碼項目。

(2)使用的時候,首先開發人員都需要從預先的url倉庫獲取代碼到本地,然后大家集中向url倉庫提交代碼。最終的版本就是這個倉庫。

(3)提交代碼的時候先建議update,否則可能多個開發人員對同一個文件提交引起代碼沖突。

(4)如果中央服務器宕機,開發人員將不能及時進行代碼提交,如果中央服務器癱瘓可能導致數據和日志丟失。


Git的特點:對程序源代碼進行差異化的版本管理,代碼庫占極少的空間。易於代碼的分支化管理。不支持中文,圖形界面支持差,使用難度大。不易推廣。

(1)Git設計的原理比SVN要復雜一些,開發人員學習和理解的成本略高,它不是一個集中式的管理方式,引入了分布、分支等多個概念。

(2)分布式也就是說當從服務器檢索好代碼到本地的時候,本地會自動創建一個倉庫,本地的倉庫和服務器的倉庫的地位是一樣的。

(3)提交代碼的時候一般是先提交(commit)到本地倉庫,然后在push到服務器倉庫進行合並(merge)。

(4)當沒有網絡的環境下,依然可以方便本地倉庫的提交代碼和查看代碼的歷史日志。服務器就算宕機和故障,代碼恢復也是輕而易舉。

(5)可以在本地靈活創建分支,然后提交到服務器上,多個分支來進行版本分化。


兩種版本控制器的選擇:

其實無論是哪一種版本控制器,都能夠滿足基本的協同需求,首先是看團隊成員對版本的熟悉程度來選擇。其次建議代碼量過大的程序還是使用Git安全性比較高,同時一般情況下,兩種版本控制器都會用,SVN一般用來管理項目,放設計圖,各種文檔和資料,這種東西沒有必要弄得那么麻煩,而且本來就是需要大家共享且改動不大,其次Git專門用來管理代碼。

適用范圍

1)適用對象不同。Git適用於參與開源項目的開發者。他們由於水平高,更在乎的是效率而不是易用性。SVN則不同,它適合普通的公司開發團隊。使用起來更加容易。

2)使用的場合不同。Git適用於通過Internet,有多個開發角色的單個項目開發,SVN適合企業內部由項目經理統一協調的多個並行項目的開發。

3)權限管理策略不同。Git沒有嚴格的權限管理控制,只要有帳號,就可以導出、導入代碼,甚至執行回退操作。SVN則有嚴格的權限管理,可以按組、按個人進行針對某個子目錄的權限控制。區分讀、寫權限。更嚴格的,不支持回退操作。保證代碼永遠可以追蹤。

4)分支(branch)的使用范圍不一樣。Git中,你只能針對整個倉庫作branch,而且一旦刪除,便無法恢復。而SVN中,branch可以針對任何子目錄,它本質上是一個拷貝操作。所以,可以建立非常多、層次性的branch,並且,在不需要時將其刪除,而以后需要時只要checkout老的SVN版本就可以了。

5)基於第三點,Git適用於單純的軟件項目,典型的就是一些開源項目,比如Linux內核、busybox等。相反,SVN擅長多項目管理。比如,你可以在一個SVN倉庫中存放一個手機項目的bsp/設計文檔/文件系統/應用程序/自動化編譯腳本,或者在一個SVN中存放5款手機項目的文件系統。git中必須建立n(項目數)*m(組件數)個倉庫。SVN中只需要最多n或者m個就可以了。

6)Git使用128位ID作為版本號,而且checkout時要注明是哪個branch,而SVN使用一個遞增的序列號作為全局唯一的版本號,更加簡明易懂。雖然可以使用gittag來建立一些文字化的別名,但是畢竟那只是針對特殊版本。

7)可跟蹤性,git的典型開發過程為:建立分支,進行開發,提交到本地master,刪除分支。這樣做的后果是以前的修改細節會丟失。而在SVN下做同樣的事情,不會丟失任何細節。這里是一個有趣的鏈接,表明了git下典型的工作方式:(以master為核心,不斷創建新branch,刪除舊branch):

8)局部更新,局部還原。SVN由於是在每個文件夾建立一個.svn文件夾來實現管理,所以可以很簡單實現局部更新或者還原。假如你只希望更新某些部分,則svn可以很好實現。同時代碼寫錯了,同時可以很好實現局部還原,當然git也可以通過歷史版本還原,但是無法簡單地實現局部還原。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM