svn和git的區別及適用場景
來源 https://blog.csdn.net/wz947324/article/details/80104621
svn的優勢:
- 優異的跨平台支持,對windows平台支持非常友好。
- 簡單易用,安裝后稍微培訓下就知道怎么操作。
- 代碼,需求,文檔,涉及稿都可以用svn進行管理,適合不同部門的技術非技術的同事協作。
git的優勢:
- 去中心化:Git是沒有中心服務器的,每個人機器上都是一個完整的庫,我們平時開發代碼時的中央服務器其實和我們自己機器上的庫內容是完全一樣的(格式有點不同,是bare的)。雖然平時大家都是將代碼提交到中央服務器上再統一pull別人的代碼,但實際情況你可以總是pull張三的庫,然后push給李四等等操作。
- 本地提交:本地提交好處主要有3點:一, 斷網提交 。二, 小步提交。可以對自己的階段成果有跟蹤,並且提高每次變更的安全性。三,本地庫。這個和斷網提交是同一個實現,但從需求角度出發則略有不同,主要是說即使只有自己一個人開發項目,也可以輕易的讓自己的代碼有版本跟蹤,而不需要去費力建個什么svn server。四,本地回滾。這個其實是由於本地庫的存在而產生的,但可以減少中央庫上的冗余版本
- 分支策略:在Git實際開發中分支的分離和merge是屬於日常操作,開啟和合並分支成本相比SVN要小得多:SVN是復制一份代碼到分支目錄,Git則是在分支點做一下標記。隨便一次沖突就會自動產生分支,所以大家每天都在與分支打交道。這便是弱化了分支的概念,由於分支成本很小,因此使得按功能分支的開發模式(每個分支一個功能,開發完了再merge到主干)變得非常簡單,大家可以完全不需要再因為擔心SCM成本太高而選用主干開發模式(所有功能都在主干上開發,到了發版本前再分離出分支)。
兩者的工作流對比:
svn模式
- 寫代碼。
- 從服務器拉回服務器的當前版本庫,並解決服務器版本庫與本地代碼的沖突。
- 將本地代碼提交到服務器。
git模式
- 寫代碼。
- 提交到本地版本庫。
- 從服務器拉回服務器的當前版本庫,並解決服務器版本庫與本地代碼的沖突。
- 將遠程庫與本地代碼合並結果提交到本地版本庫。
- 將本地版本庫推到服務器。
對比可以看出:分布式版本管理僅僅是增加了本地庫這個概念,其余的概念與集中管理並無區別。——但是 svn 在與服務器同步之前無法提交代碼,因而本地修改更容易出問題。
表格說明兩者區別:
集中式(SVN) | 分布式(Git) | |
是否有中央服務器 | 有。開發人員需要從中央服務器獲得最新版本的項目然后在本地開發,開發完推送給中央服務器。因此脫離服務器開發者是幾乎無法工作的 | 沒有中央服務器,開發人員本地都有 Local Repository |
網絡依賴 | 必須要聯網才能工作,而且對網絡的依賴性較強,如果推送的文件比較大而且網絡狀況欠佳,則提交文件的速度會受到很大的限制。 | 分布式在沒有網絡的情況下也可以執行commit、查看版本提交記錄、以及分支操作,在有網絡的情況下執行 push 到 Remote Repository。 |
文件存儲格式 | 按照原始文件存儲,體積較大 | 按照元數據方式存儲,體積很小 |
是否有版本號 | 有 | 沒有 |
分支操作的影響 | 創建新的分支則所有的人都會擁有和你一樣的分支 |
分支操作不會影響其他開發人員 |
提交 | 提交的文件會直接記錄到中央版本庫 | 提交是本地操作,需要執行push操作才會到主要版本庫 |
總結一下:
當研發成本比較低,協作開發人數不多,開發人員對於版本管理的水平參差不齊的時候,或者對於代碼的安全性要求更高一點的時候,適合用svn。
而對於很多人參與開發,代碼量比較大,或者高頻次協作,跨公司,跨地域合作的情況下,更適合用git。
其他的可以參考以下資料了解更多
https://www.cnblogs.com/wx1993/p/7680877.html
https://www.cnblogs.com/zcbing/p/6416525.html
https://www.zhihu.com/question/20093241
====================== End