1. 程式人生 > >svn和git的區別及適用場景

svn和git的區別及適用場景

svn的優勢:

  1. 優異的跨平臺支援,對windows平臺支援非常友好。
  2. 簡單易用,安裝後稍微培訓下就知道怎麼操作。
  3. 程式碼,需求,文件,涉及稿都可以用svn進行管理,適合不同部門的技術非技術的同事協作。

git的優勢:

  1. 去中心化:Git是沒有中心伺服器的,每個人機器上都是一個完整的庫,我們平時開發程式碼時的中央伺服器其實和我們自己機器上的庫內容是完全一樣的(格式有點不同,是bare的)。雖然平時大家都是將程式碼提交到中央伺服器上再統一pull別人的程式碼,但實際情況你可以總是pull張三的庫,然後push給李四等等操作。
  2. 本地提交:本地提交好處主要有3點:一, 斷網提交二, 小步提交。可以對自己的階段成果有跟蹤,並且提高每次變更的安全性。三,本地庫
    。這個和斷網提交是同一個實現,但從需求角度出發則略有不同,主要是說即使只有自己一個人開發專案,也可以輕易的讓自己的程式碼有版本跟蹤,而不需要去費力建個什麼svn server。四,本地回滾。這個其實是由於本地庫的存在而產生的,但可以減少中央庫上的冗餘版本
  3. 分支策略:在Git實際開發中分支的分離和merge是屬於日常操作,開啟和合並分支成本相比SVN要小得多:SVN是複製一份程式碼到分支目錄,Git則是在分支點做一下標記。隨便一次衝突就會自動產生分支,所以大家每天都在與分支打交道。這便是弱化了分支的概念,由於分支成本很小,因此使得按功能分支的開發模式(每個分支一個功能,開發完了再merge到主幹)變得非常簡單,大家可以完全不需要再因為擔心SCM成本太高而選用主幹開發模式(所有功能都在主幹上開發,到了發版本前再分離出分支)。

兩者的工作流對比:

svn模式

  1. 寫程式碼。
  2. 從伺服器拉回伺服器的當前版本庫,並解決伺服器版本庫與原生代碼的衝突。
  3. 將原生代碼提交到伺服器。

git模式

  1. 寫程式碼。
  2. 提交到本地版本庫。
  3. 從伺服器拉回伺服器的當前版本庫,並解決伺服器版本庫與原生代碼的衝突。
  4. 將遠端庫與原生代碼合併結果提交到本地版本庫。
  5. 將本地版本庫推到伺服器。

對比可以看出:分散式版本管理僅僅是增加了本地庫這個概念,其餘的概念與集中管理並無區別。——但是 svn 在與伺服器同步之前無法提交程式碼,因而本地修改更容易出問題。

表格說明兩者區別:

 集中式(SVN) 分散式(Git)
 是否有中央伺服器 有。開發人員需要從中央伺服器獲得最新版本的專案然後在本地開發,開發完推送給中央伺服器。因此脫離伺服器開發者是幾乎無法工作的
 沒有中央伺服器,開發人員本地都有 Local Repository
 網路依賴   必須要聯網才能工作,而且對網路的依賴性較強,如果推送的檔案比較大而且網路狀況欠佳,則提交檔案的速度會受到很大的限制。 分散式在沒有網路的情況下也可以執行commit、檢視版本提交記錄、以及分支操作,在有網路的情況下執行 push 到 Remote Repository。
 檔案儲存格式  按照原始檔案儲存,體積較大 按照元資料方式儲存,體積很小
 是否有版本號 有   沒有
分支操作的影響 

建立新的分支則所有的人都會擁有和你一樣的分支

分支操作不會影響其他開發人員
 提交 提交的檔案會直接記錄到中央版本庫 提交是本地操作,需要執行push操作才會到主要版本庫

總結一下:

當研發成本比較低,協作開發人數不多,開發人員對於版本管理的水平參差不齊的時候,或者對於程式碼的安全性要求更高一點的時候,適合用svn。

而對於很多人蔘與開發,程式碼量比較大,或者高頻次協作,跨公司,跨地域合作的情況下,更適合用git。

其他的可以參考以下資料瞭解更多