GIT與SVN世紀大戰

GIT與SVN世紀大戰

為神馬會寫這篇文章?由於本人之前一直使用git雖然沒到爐火純青的地步但也能自由的coding,但是最近需要使用到svn,於是呢總在想兩者有神馬區別呢?接下來一起來仔細研究一番。

漫畫篇

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

學術篇

差 異SVNGIT
系統特點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都得備份較高,每個開發者的本地就是一套完整版本庫,記錄著版本庫的所有資訊(gitlab整合了備份功能)
分支方面1.拉分支更像是copy一個路徑
2.可針對任何子目錄進行branch
3.拉分支的時間較慢,因為拉分支相當於copy
4.建立完分支後,影響全部成員,每個人都會擁有這個分支
5.多分支並行開發較重(工作較多而且繁瑣)
1.我可以在Git的任意一個提交點(commit point)開啟分支!(git checkout -b newbranch HashId)
2.拉分支時間較快,因為拉分支只是建立檔案的指標和HEAD
3.自己本地建立的分支不會影響其他人
4.比較適合多分支並行開發
5.git checkout hash值(切回之前的版本,無需版本回退)
6.強大的cherry-pick
版本控制1.儲存前後變化的差異資料,作為版本控制
2.版本號進行控制,每次操作都會產生一個高版本號(svn的全域性版本號,這是svn一個較大的特點,git是hash值)
1.git只關心檔案資料的整體發生變化,更像是把檔案做快照,檔案沒有改變時,分支只想這個檔案的指標不會改變,檔案發生改變,指標指向新版本
2. 40 位長的雜湊值作為版本號,沒有先後之分
3.git rebase操作可以更好的保持提交記錄的整潔
工作流程1.每次更改檔案之前都得update操作,有的時候修改過程中這個檔案有更新,commit不會成功
2.有衝突,會打斷提交動作(衝突解決是一個提交速度的競賽:手快者,先提交,平安無事;手慢者,後提交,可能遇到麻煩的衝突解決。)
1.開始工作前進行fetch操作,完成開發工作後push操作,有衝突解決衝突
2.git的提交過程不會被打斷,有衝突會標記衝突檔案
3.gitflow流程(經典)
內容管理svn對中文支援好,操作簡單,適用於大眾對程式的原始碼管理方便,程式碼庫佔用的空間少,易於分支化管理
許可權管理svn的許可權管理相當嚴格,可以按組、個人針對某個子目錄的許可權控制(每個目錄下都會有個.svn的隱藏檔案)git沒有嚴格的許可權管理控制,只有賬號角色劃分(在專案的home檔案下有且只有一個.svn目錄)

命令篇

常用命令SVN命令GIT命令
版本庫初始化svnadmin creategit init
匯入資料svn importgit clone;git add;git commit
版本庫檢出svn checkoutgot clone
工作區更新svn updategit pull
切換至里程碑svn switch <url/of/tags/name>git checkout <tag>
切換至分支svn switch <url/of/branchs/name>git checkout <branch>
新增檔案svn addgit add
刪除檔案svn rmgit rm
移動檔案svn mv <old><new>git mv <old><new>
工作區差異比較svn diffgit diff
回滾svn merge -r <rec>git revert <commit_id>將之前的提交反轉
git reset <commit_id>該commit_id之後的提交都會刪除
分支合併svn merge <url/of/branch>git merge <branch>
刪除分支svn rm <url/of/branch/name>git branch -d <branch>
提交揀選svn merge -c <rev>git cherry-pick
顯示分支svn ls <url/of/branchs>git branch
顯示里程碑svn ls <url/of/tags>git tag
更改提交說明svn ps -revprop -r<rev> svn:log “msg”git commit –amend
撤銷提交svnadmin dumpgit reset [–hard]HEAD^

SVN官網: https://tortoisesvn.net/
GIT官網: https://git-scm.com/

更過詳情可以官網查閱~~~

掃碼關注公眾號“偉大程式猿的誕生“,更多幹貨等著你~
掃碼關注公眾號“偉大程式猿的誕生“,更多幹貨等著你~
掃碼關注公眾號“偉大程式猿的誕生“,更多幹貨等著你~

公眾號回覆“資料獲取”,獲取更多幹貨哦~
公眾號回覆“資料獲取”,獲取更多幹貨哦~
公眾號回覆“資料獲取”,獲取更多幹貨哦~