近期就【版本管理工具是否進行切換SVN->Git】的問題進行了討論,於是對svn和Git進行了相關研究,進而梳理出Git的特點(優、缺點),最后將Git與SVN進行了對比,對比結果詳見下方內容。(有歧義的地方請評論指出!!!,THANKS)
其他相關: 1.git基礎 2.git分支 3.實戰篇 4.番外篇
| 版本工具 |
svn |
git |
| 系統特點 |
1.集中式版本控制系統(文檔管理很方便) 2.企業內部並行集中開發 3.windows系統上開發推薦使用 4.克隆一個擁有將近一萬個提交(commit),五個分支,每個分支有大約1500個文件,用時將近一個小時 |
1.分布式系統(代碼管理很方便) 2.開源項目開發 3.mac,Linux系統上開發推薦使用 4.克隆一個擁有將近一萬個提交(commit),五個分支,每個分支有大約1500個文件,用時1分鍾 |
| 靈活性 |
1.搭載svn的服務器出現故障,無法與之交互 |
1.可以單機操作,git服務器故障也可以在本地git倉庫工作 |
| 安全性 |
較差,定期備份,並且是整個svn都得備份 |
較高,每個開發者的本地就是一套完整版本庫,記錄着版本庫的所有信息(gitlab集成了備份功能) |
| 分支方面 |
1.拉分支更像是copy一個路徑 5.多分支並行開發較重(工作較多而且繁瑣) |
1.我可以在Git的任意一個提交點(commit point)開啟分支!(git checkout -b newbranch HashId) 4.比較適合多分支並行開發 5.git checkout hash值(切回之前的版本,無需版本回退) 6.強大的cherry-pick |
| 版本控制 |
1.保存前后變化的差異數據,作為版本控制 |
1.git只關心文件數據的整體發生變化,更像是把文件做快照,文件沒有改變時,分支只想這個文件的指針不會改變,文件發生改變,指針指向新版本 3.git rebase操作可以更好的保持提交記錄的整潔 |
| 工作流程 |
1.每次更改文件之前都得update操作,有的時候修改過程中這個文件有更新,commit不會成功 |
1.開始工作前進行fetch操作,完成開發工作后push操作,有沖突解決沖突 3.gitflow流程(經典) |
| 內容管理 |
svn對中文支持好,操作簡單,適用於大眾 |
對程序的源代碼管理方便,代碼庫占用的空間少,易於分支化管理 |
| 學習成本 |
使用起來更方便,svn對中文支持好,操作簡單,適用於大眾 |
更在乎效率而不是易用性,成本較高(有很多獨有的命令,rebase,遠程倉庫交互的命令,等等) |
| 權限管理 |
svn的權限管理相當嚴格,可以按組、個人針對某個子目錄的權限控制(每個目錄下都會有個.svn的隱藏文件) |
git沒有嚴格的權限管理控制,只有賬號角色划分(在項目的home文件下有且只有一個.git目錄) |
| 管理平台 |
有吧(這個“吧”字,肯定有,但本人沒有接觸過) |
gitlab(建議使用,集成的功能較多,API開發),gerrit,github等 |
