Git
與SVN
都是版本控制系統,版本控制是指對軟件開發過程當中各類程序代碼、配置文件及說明文檔等文件變動的管理,是軟件配置管理的核心思想之一,最主要的功能就是追蹤文件的變動。html
SVN
是集中式管理的版本控制器,而Git
是分佈式管理的版本控制器,這是二者之間最核心的區別。
SVN
只有一個單一的集中管理的服務器,保存全部文件的修訂版本,而協同工做的人們都經過客戶端連到這臺服務器,取出最新的文件或者提交更新。
Git
每個終端都是一個倉庫,客戶端並不僅提取最新版本的文件快照,而是把原始的代碼倉庫完整地鏡像下來,每一次的提取操做,實際上都是一次對代碼倉庫的完整備份。
相對來講分佈式管理系統功能更強大一些,但一樣的上手難度也就高一些,固然分佈式代碼版本管理系統並不必定適合全部團隊,好比中小團隊可能更關心的只是成本更低,簡單易用,那麼SVN
等這類集中式版本管理工具仍是更爲適合,可是無論團隊最終選用什麼代碼版本管理工具,只要適合本身的團隊的開發流程和工做方式,而且代碼管理順暢就能夠了。git
差別 | SVN | Git |
---|---|---|
系統特色 | 1. 集中式版本控制系統,文檔管理很方便。 2. 企業內部並行集中開發 3. windows 系統上開發推薦使用 4. 克隆一個擁有將近一萬個提交 commit ,五個分支,每一個分支有大約1500 個文件,用時將近一個小時 |
1. 分佈式系統,代碼管理很方便。 2. 開源項目開發。 3. Mac 、Linux 系統上開發推薦使用。 4. 克隆一個擁有將近一萬個提交 commit 、五個分支、每一個分支有大約1500 個文件,用時1 分鐘。 |
靈活性 | 1. 搭載SVN 的服務器若是出現故障,就沒法與之交互。 2. 全部的 SVN 操做都須要中央倉庫交互,例如拉分支,看日誌等。 |
1. 能夠單機操做,Git 服務器故障也能夠在本地Git 倉庫工做。 2. 除了 push 和pull 或fetch 操做,其餘均可以在本地操做。 3. 根據本身開發任務任意在本地建立分支。 4. 日誌都是在本地查看,效率較高。 |
安全性 | 較差,按期備份,而且是整個SVN 都得備份。 |
較高,每一個開發者的本地就是一套完整版本庫,記錄着版本庫的全部信息。 |
分支方面 | 1. 拉分支更像是copy 一個路徑。 2. 可針對任何子目錄進行 branch 。 3. 拉分支的時間較慢,由於拉分支至關於 copy 。 4.建立完分支後,影響所有成員,每一個人都會擁有這個分支。 5.多分支並行開發較重,工做較多並且繁瑣。 |
1. 我能夠在Git 的任意一個提交點commit point 開啓分支。 2. 拉分支時間較快,由於拉分支只是建立文件的指針和 HEAD 。 3. 本身本地建立的分支不會影響其餘人。 4. 比較適合多分支並行開發。 5. Git checkout hash 切回以前的版本,無需版本回退。 6. 強大的 cherry-pick 。 |
工做流程 | 1. 每次更改文件以前都得update 操做,有的時候修改過程當中這個文件有更新,commit 不會成功。 2. 有衝突,會打斷提交動做,衝突解決是一個提交速度的競賽:手快者,先提交,平安無事;手慢者,後提交,可能遇到麻煩的衝突解決。 |
1. 開始工做前進行fetch 操做,完成開發工做後push 操做,有衝突解決衝突。 2. Git 的提交過程不會被打斷,有衝突會標記衝突文件。 3. Gitflow 經典流程。 |
內容管理 | SVN 對中文支持好,操做簡單。 |
對程序的源代碼管理方便,代碼庫佔用的空間少,易於分支化管理。 |
學習成本 | 使用起來更方便,SVN 對中文支持好,操做簡單。 |
更在意效率而不是易用性,成本較高,有不少獨有的命令如rebase 、遠程倉庫交互的命令等等。 |
權限管理 | SVN 的權限管理至關嚴格,能夠按組、我的針對某個子目錄的權限控制,每一個目錄下都會有個.SVN 的隱藏文件。 |
Git 沒有嚴格的權限管理控制,只有帳號角色劃分。 |
管理平臺 | 有功能很是完善的插件。 | 除功能插件外,還有Gitlab 、Gerrit 、Github 等。 |
https://Github.com/WindrunnerMax/EveryDay
https://juejin.cn/post/6844903619813179405 https://www.cnblogs.com/ssgeek/p/9642171.html https://www.cnblogs.com/Sungeek/p/9152223.html