進入點融之前,筆者的版本控制一直用的是SVN。在加入點融後,接觸到了GIT,也使筆者有機會學習到更為廣泛應用的GIT版本控制。
通過同事幫助和自主學習,以及在一些網絡上學習到Git相關知識的基礎之上,筆者將從大的方面來闡述一下GIT與SVN的區別。
最核心的區別,GIT是分布式控制版本,而SVN不是。
GIT跟SVN一樣有自己的集中式版本庫或服務器,但是GIT更傾向於被使用於分布式模式,也就是每個開發人員從中心版本庫/服務器上checkout代碼後會在自己的機器上克隆一個自己的版本庫。舉個例子,如果你被困在一個不能連接網絡的地方時,如飛機上,地下室,電梯裡等,你仍然能夠提交文件,查看歷史版本記錄,創建項目分支等等。
GIT把內容按元數據方式存儲,而SVN是按文件。
所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾裡。如果你把.git目錄的體積大小跟.svn比較,你會發現它們差距很大。因為.git目錄是處於你的機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標簽,分支,版本記錄等。
GIT分支和SVN的分支不同。
分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。然而,處理GIT的分支卻是相當的簡單和有趣。你可以從同一個工作目錄下快速的在幾個分支間切換。你很容易發現未被合並的分支,你能簡單而快捷的合並這些文件。
言歸正傳,接下來,本文將主要介紹的rebase命令的操作。
在實際項目開發過程當中,開發人員都會從遠程主分支克隆代碼到本地,然後在此基礎之上,進行自己的功能開發。在本地開發的同時,遠程主分支也會不斷有其他同事開發的功能被push上去。在本地開發的代碼,可以通過fetch,然後在merge提交到本地或者直接pull到本地來做作為本地同步遠程代碼的目的,當然在此筆者主要想講述的是如何通過統一遠程和本地的代碼的log,從而神不知鬼不覺的去同步代碼。
我們來具體演示一下rebase的用法。
首先克隆遠程主分支到本地主分支(master),然後創建自己的分支(test),具體demo如下圖所示:
此時test分支的版本如下:
主分支master,在其他同事的不斷push後,現在的版本如下:
如上圖所示,當前主分支有新的代碼提交,本地分支開發人員每天也會有新的代碼提交。但是往往一個功能模塊的開發是需要好幾天才能完成的,故一個功能點往往會產生多個log,關於如何合並多個提交log,後面會講述(詳見步驟8)。接下來,在本地開發人員進行功能開發結束後,如下圖所示:
如上圖所示,可以看到開發人員在本地分支提交了3次代碼,完成了功能開發,接下來就要進行rebase操作,如下圖所示:
在rebase過程當中可能需要處理一些沖突,具體操作如下圖所示:
如上圖所示,rebase結束,具體結果如下所示:
接下來主要看一下,如果合並分支多次提交log,運行命令如下:
git
rebase -i 9b67ef73b1225777153aad76de0dee444fa9d892
會跳出vim編輯模式,修改除第一個外的後面幾個pick為s或者squash,將log改為:test合並之前提交的1,2,3;
如下所示:
到此合並結束,具體結果如下:
至此,這個rebase基本功能用法就介紹完畢了。在操作過程當中,可能要解決一些沖突,merge一些代碼,提交之後,才可以繼續操作。一般情況下,敲入命令:git status,查看當前版本下的提示情況之後,再進行相應操作,就可以了。
希望筆者對此命令的一些心得體會可以幫助更多的開發人員理解GIT,可以更好的上手應用GIT,有更多關於GIT的心得體會,歡迎與筆者探討。