目前我使用的Eclipse luna版本中已經集成了git插件,這里就不介紹如何安裝Git插件了,不懂可以看其他的博客。
上篇筆記介紹了Git的基本指令,實際開發中我基本都使用eclipse插件進行代碼提交和更新,下面就介紹下Eclipse中如何使用Git插件。
首先看一張Git管理代碼原理圖:
從這張圖中可知道Git管理代碼涉及到4個地方,
Remote:遠程倉庫,或者叫遠程分支,一個項目由多個人開發時,遠程倉庫就是中央代碼庫。
Repository:本地倉庫,顧名思義就是安裝在本地的代碼庫,這也是Git與Svn最大的區別,SVN是集中式管理,每次提交或更新代碼前都要連接遠程倉庫,而Git因為有本地倉庫,代碼先提交到本地倉庫,需要時再更新到遠程倉庫,也就是說本地代碼提交和更新無需連接遠程倉庫,沒網也能提交和更新代碼。
Index:索引,這就要談到上篇筆記中提到的Git的三種狀態,當代碼由Git托管后,工作區的代碼更改后,狀態會變成已修改(Eclipse中表現為代碼文件上有一個>標記),那么想要提交到本地倉庫,必須先將代碼提交到暫存區,這個暫存區就是索引,Eclipse中的指令是Add to Index。
WorkSpace:本地工作空間,這個就不多解釋了。
下面介紹實際工作中代碼的提交與合並,沖突解決。
在你上次更新代碼到遠程倉庫,現在准備寫代碼之前,先pull下遠程倉庫的代碼,這樣可將遠程倉庫的更改合並到本地代碼,這樣做的好處是通常無需手動解決沖突,因為之前你已經把本地倉庫的更改推送到遠程倉庫了,遠程倉庫后面的更改也是在你的代碼基礎上,而你本地代碼並沒有更改,所以這種情況下合並是最好最簡單的方式。合並代碼后再寫代碼。
當然你也可以省略上面這步,直接寫代碼,寫完代碼后add to Index —— commit,將代碼提交到本地倉庫。
記住這時別急着push到遠程倉庫,因為在你寫代碼這段時間可能其他人和你同時修改了一個文件的同一個位置,這時你要再次pull下,查看工作空間的代碼有沒有紅色的雙箭頭的,如果有那就要手動解決沖突了。
如圖
解決完沖突后,再次Add to Index ——Commit,更新到遠程倉庫前最好還是pull,只到沒有出現沖突時,再push代碼。
這種方法是最保險的,保證不會影響別人的代碼,也不會出錯。
總結:記住在推送代碼到遠程倉庫時,記得pull代碼,有沖突解決沖突,沒沖突直接push.
順便說下pull和fetch的異同,他們都是更新遠程倉庫代碼到本地的,不同的是fetch完以后還需要merge一下,而pull一個指令包含了fetch和merge兩個操作。
然后再說下merge和rebase的異同,他們都是用於合並代碼,不同的時rebase操作稍微復雜一些,但更仔細一些,它會將遠程文件和本地文件做對比,並標記出沖突的地方,當解決完所有沖突后執行Add to Index操作,然后不要馬上執行commit操作,先執行Continue Rebase操作,然后再執行Commit操作。是不是有寫麻煩?如果使用merge指令就沒有Continue Rebase操作了,但解決沖突就沒那么明顯了,他自動將遠程和本地的代碼合並到本地,然后用上圖中的形式標記出來。解決完沖突后執行Add to Index ——Commit操作。所以這就看你個人喜好了。