進入點融之前,筆者的版本控制一直用的是SVN斜友。在加入點融后词顾,接觸到了GIT八秃,也使筆者有機會學(xué)習(xí)到更為廣泛應(yīng)用的GIT版本控制。
通過同事幫助和自主學(xué)習(xí)肉盹,以及在一些網(wǎng)絡(luò)上學(xué)習(xí)到Git相關(guān)知識的基礎(chǔ)之上昔驱,筆者將從大的方面來闡述一下GIT與SVN的區(qū)別。
1上忍、控制版本
最核心的區(qū)別舍悯,GIT是分布式控制版本,而SVN不是睡雇。
GIT跟SVN一樣有自己的集中式版本庫或服務(wù)器萌衬,但是GIT更傾向于被使用于分布式模式,也就是每個開發(fā)人員從中心版本庫/服務(wù)器上checkout代碼后會在自己的機器上克隆一個自己的版本庫它抱。舉個例子秕豫,如果你被困在一個不能連接網(wǎng)絡(luò)的地方時,如飛機上观蓄,地下室混移,電梯里等,你仍然能夠提交文件侮穿,查看歷史版本記錄歌径,創(chuàng)建項目分支等等。
2亲茅、存儲方式
GIT把內(nèi)容按元數(shù)據(jù)方式存儲回铛,而SVN是按文件。
所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個類似.svn克锣,.cvs等的文件夾里茵肃。如果你把.git目錄的體積大小跟.svn比較,你會發(fā)現(xiàn)它們差距很大袭祟。因為.git目錄是處于你的機器上的一個克隆版的版本庫验残,它擁有中心版本庫上所有的東西,例如標簽巾乳,分支您没,版本記錄等。
3胆绊、分支
GIT分支和SVN的分支不同氨鹏。
分支在SVN中一點不特別,就是版本庫中的另外的一個目錄辑舷。然而喻犁,處理GIT的分支卻是相當(dāng)?shù)暮唵魏陀腥ぁD憧梢詮耐粋€工作目錄下快速的在幾個分支間切換。你很容易發(fā)現(xiàn)未被合并的分支肢础,你能簡單而快捷的合并這些文件还栓。
4、rebase命令的操作
言歸正傳传轰,接下來剩盒,本文將主要介紹的rebase命令的操作。
在實際項目開發(fā)過程當(dāng)中慨蛙,開發(fā)人員都會從遠程主分支克隆代碼到本地辽聊,然后在此基礎(chǔ)之上,進行自己的功能開發(fā)期贫。在本地開發(fā)的同時跟匆,遠程主分支也會不斷有其他同事開發(fā)的功能被push上去。在本地開發(fā)的代碼通砍,可以通過fetch玛臂,然后在merge提交到本地或者直接pull到本地來做作為本地同步遠程代碼的目的,當(dāng)然在此筆者主要想講述的是如何通過統(tǒng)一遠程和本地的代碼的log封孙,從而神不知鬼不覺的去同步代碼迹冤。
我們來具體演示一下rebase的用法。
首先克隆遠程主分支到本地主分支(master)虎忌,然后創(chuàng)建自己的分支(test)泡徙,具體demo如下圖所示:
此時test分支的版本如下:
主分支master,在其他同事的不斷push后膜蠢,現(xiàn)在的版本如下:
如上圖所示堪藐,當(dāng)前主分支有新的代碼提交,本地分支開發(fā)人員每天也會有新的代碼提交狡蝶。但是往往一個功能模塊的開發(fā)是需要好幾天才能完成的庶橱,故一個功能點往往會產(chǎn)生多個log贮勃,關(guān)于如何合并多個提交log贪惹,后面會講述(詳見步驟8)。接下來寂嘉,在本地開發(fā)人員進行功能開發(fā)結(jié)束后奏瞬,如下圖所示:
如上圖所示,可以看到開發(fā)人員在本地分支提交了3次代碼泉孩,完成了功能開發(fā)硼端,接下來就要進行rebase操作,如下圖所示:
在rebase過程當(dāng)中可能需要處理一些沖突寓搬,具體操作如下圖所示:
如上圖所示珍昨,rebase結(jié)束,具體結(jié)果如下所示:
接下來主要看一下,如果合并分支多次提交log镣典,運行命令如下:
git
rebase -i 9b67ef73b1225777153aad76de0dee444fa9d892
會跳出vim編輯模式兔毙,修改除第一個外的后面幾個pick為s或者squash,將log改為:test合并之前提交的1,2,3兄春;
如下所示:
到此合并結(jié)束澎剥,具體結(jié)果如下:
至此,這個rebase基本功能用法就介紹完畢了赶舆。在操作過程當(dāng)中哑姚,可能要解決一些沖突,merge一些代碼芜茵,提交之后叙量,才可以繼續(xù)操作。一般情況下九串,敲入命令:git status宛乃,查看當(dāng)前版本下的提示情況之后,再進行相應(yīng)操作蒸辆,就可以了征炼。
希望筆者對此命令的一些心得體會可以幫助更多的開發(fā)人員理解GIT,可以更好的上手應(yīng)用GIT躬贡,有更多關(guān)于GIT的心得體會谆奥,歡迎與筆者探討。
本文作者:張金周(點融黑幫)拂玻,現(xiàn)任點融FinTech團隊后端開發(fā)工程師酸些,江西理工大學(xué)計算機專業(yè)。工作三年檐蚜,兩年外企經(jīng)驗魄懂,平時研究后端框架,喜歡學(xué)習(xí)前端技術(shù)以及新技術(shù)闯第。業(yè)余時間喜歡打羽毛球市栗,看電影。