Git在Eclipse中的使用
前言:
1)Git於SVN的不同
Git是分散式資料庫,本地建立倉庫,即可在本地完成版本控制(等價於SVN在本地安裝伺服器和客戶端,SVN伺服器如果在遠端,斷網情況將無法完成提交及版本維護)。
Git協作開發,大家可以互相剋隆版本庫(相當於SVN下載專案),進行開發,每人都有完整的庫(分散式)。通常為了方便,遠端還是會建立一個共享庫,如GitHub,方便大家同步和共享,不用互相線上,點對點同步修改。
2)Git元素概念
工作區(Working Directory):程式碼開發和修改的區域,Eclipse將Workspace區域的檔案顯示給使用者,用於操作。
暫存區(Index):修改不同檔案,通過Add to Index,新增到暫存區,暫存該批次的多個修改。
注:在最初的Git,檔案提交前必須提交到暫存區。EGit這不是必要的,Team => Commit可以提交unstaged變化。可以和暫存區的狀態比較和回退暫存區修改。(狀態參見二)
版本庫(Repository):該到一定程度時,可以提交一批次暫存區的修改,操作後修改提交版本庫,並標記版本,是後續分享和回退的批次。
3)文章概述:
1> EGit 安裝配置
2> EGit 檔案狀態及圖示標誌
2> EGit 本地開發
建立本地庫;提交;回退;建立分支;合併;
3> EGit 協作開發
專案推送遠端倉庫;克隆遠端倉庫匯入專案;提交修改到遠端倉庫程;更新遠端倉庫修改到本地;解決衝突。
4> EGit 檢視
倉庫檢視;同步檢視;歷史檢視;
一 Eclipse 安裝EGit
1)安裝
Eclipse Juno 版後已經集成了EGit,如果使用早些版本,可以通過如下地址安裝:http://download.eclipse.org/egit/updates ,選擇“Eclipse Git Team Provider”,不需要安裝其他外掛,直到結束。
2)配置
EGit每次提交都將包含使用者名稱和郵件,可以通過“Window => Preferences => Team => Git => Configuration”配置,通過Add Entry 按鈕新增資訊,
key : user.name,value:使用者名稱 ;key:user.emai , value : 郵箱,賬戶資訊通常GitHub相同。
二 EGit檔案狀態及圖示展示
EGit會出現如下圖示,其對應狀態及意義如下:
1)忽略[ ignored ]:倉庫認為該檔案不存在(如bin目錄,不需要關注)。通過右鍵Team => Ignore 新增忽略檔案
2)未跟蹤[ untracked ]:倉庫未跟蹤,通常是新建的檔案,要接入版本管理可以通過“Add to Index”或直接“Commit”操作。
3)已跟蹤[ tracked ]:檔案已被倉庫記錄。
4)已新增[ added ]:untracked 狀態的檔案,通過“Add to Index”被倉庫已知,但是沒有“Commit”,“Commit”後可變為“已跟蹤[ tracked ]”狀態。
5)已刪除[ removed ]:從工作區中刪除檔案,檔案會消失,也就沒有圖標出現,下一次提交時被刪除。Team => Untrack可以觸發本圖示,在“Commit”對話方塊中可以看到圖示。
6)已修改[ dirty ]: 修改“已跟蹤[ tracked ]”的檔案,未新增到暫存區Index(未“Add to Index”或“Commit”)的檔案,標誌與本地庫不一致。
7)已暫存[ staged ]:修改“已跟蹤[ tracked ]”的檔案,並新增到暫存區Index(即執行“Add to Index”);
8)衝突[ conflict ] : 進行Marge合併操作會引起衝突,需要人工解決並新增到索引區修改狀態。
9)已部分暫存[ partially-staged ]:修改“已跟蹤[ tracked ]”的檔案,部分修改已新增暫存區Index,部分未新增。
相當於:已跟蹤的檔案修改,Add to Index ,Commit前又修改了檔案。
10)假設有效[ assume-valid ]:一些修改未被Git檢查。右鍵Team => Assume unchanged可產生該狀態。
三 EGit使用
(一)建立本地倉庫
Git優勢是容易建立本地倉庫,將工作本地化,待需要的時候推送到遠端倉庫,因此所有修改可以在本地版本化。
方法:本地見一個工程,新增一些檔案,然後在工程上右鍵Team => Share Project ,點選 create按鈕建立倉庫。
儘管我們建立了本地倉庫,並share 專案,但庫是空的。我們可以向工程新增檔案,並提交到本地倉庫。
(二) 提交(Commit)
1)建立檔案提交
建立新檔案,由“?”標記,想提交倒本地倉庫進行版本管理,需要右鍵Team => Add to Index,操作後“?”變成“+”。然後專案右鍵Team => Commit,輸入本次提交資訊(注:輸入的資訊會展示在歷史頁面),成功後標記由“+”變成“倉庫”符號。
=And to Index=>
=commit=>
===》
2)產生修改提交
修改專案檔案,檔案會由“>”標記,如果需要同步到本地庫,我們需要提交,過程同上commit
(三) 撤銷修改
方法1:通過和上一次暫存區(Index)檔案比較——用於單個檔案,一般檔案狀態為“已部分暫存[ partially-staged ]”
檔案上右鍵Compare With => Git index
如果想修改暫存區Index,點選Copy All Non-Conflicting Changes from Right to Left-button,修改後檔案變為“已暫存[ staged ]”。
如果向回退上次Add to Index的情況,點選Copy All from Left to Right,修改後檔案變為“已暫存[ staged ]”。
方法1:通過和上一次Commit版本比較回退——用於單檔案
檔案上右鍵Compare With => HEAD Revision
如果想完全恢復檔案,點選Copy All Non-Conflicting Changes from Right to Left-button
如果向回退某幾行,選擇單獨每一行,點選the Copy Current Change from Right to Left button。
手工完成修改合併後再提及。
方法3:通過重置回退(Revert via Reset)——用於整個工程
在專案上回退所有修改,專案上右鍵Team => Reset…;選擇要回退到的分支(如果沒有建立分支,只有有一個Master),Reset Type 選擇Hard,點選“Reset”確認。所有修改回退到該分支的最後一次提交,包括工作區所有完成的修改。
注:重置型別(Reset Type):
1)Soft:只回退commit資訊(HEAD 指標),不回退暫存區(Index)和工作區(Working Directory 檔案)原始碼,如果需要可再次提交,回到上次commit情況。
2)Mixed:回退commit資訊(HEAD 指標)和暫存區(Index),只保留工作區(Working Directory 檔案)原始碼。
3)Hard:所有更改都將恢復到所選分支/標記/Commit版本。工作區(Working Directory 檔案)原始碼會變為上一個Commit版本的內容,未提交的更改都將丟失,因此該操作必須確認。
(三) 建立分支
專案上右鍵Team => Switch to => New Branch… ,選擇一個新分支的來源,點選建立分支,輸入分支名。
新分支會出現在分支選擇視窗,如果向檢出一個新建立的分支,選擇然後點選checkout
》》》》》》》
注:
Git的一大優勢是很容易建立分支,根據需要可以快速建立Bug修復分支,新功能分支,幾條分支獨立開發,最後合併到主分支。
原則:
a)master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面開發;
b)開發都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本釋出時,再把dev分支合併到master上,在master分支釋出1.0版本;
c)每個開發人員都在自己dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合併就可以了。
(四)合併和解決衝突
1)合併
將一個分支合併到另一個分支,首先切換到要合併的分支,專案郵件Team => Switch to => 分支名(或倉庫檢視,Branches => Local =>指定分支右鍵Checkout),右鍵 Team => Merge… 選擇要合併到當前分支的分支,點選Merge。
合併開始並彈出結果,結果有如下幾種:Already-up-to-date, Fast-forward, Merged, Conflicting, Failed.
2)解決衝突
衝突需要手動解決。開啟衝突檔案,找到衝突修改標誌“<<<<<<<”,手動合併後後,需要通知Git衝突解決,Add to index 和commit 完成合並
四 遠端倉庫
遠端倉庫一般用於多人共享,GitHub就提供免費的共享空間,註冊帳號,在GitHub上建立倉庫,就可以推送專案。
(一)專案提交遠端倉庫
1)GitHub上建立專案
2)專案:右鍵 Team => Remote => Push,填寫遠端倉庫資訊
3)選擇推送的分支資訊,這裡由於建立了master和dev分支,選擇並通過"Add Spec"按鈕新增,選中複選框“Force Update”,已避免衝突,否則需要現更新再推送。
4)由於Force Update所以需要確認。
5)推送完成
(二)克隆遠端倉庫匯入專案
1)File => Import => Git => Project from Git
2)倉庫來源選擇:Clone from uri 填寫賬戶資訊
3)分支選擇也沒:選擇要匯入的分支
4)本地路徑指定地址
5)完成後本地倉庫出現,克隆完成,可以直接選擇“Import as existing project”匯入
6)匯入
(三)提交修改到遠端倉庫程
方法1:正常的提交操作:
專案右鍵 => Team => Remote => Push 可以選擇不同的遠端倉庫進行推送。包括其他同事的倉庫推送。
方法2:向預設遠端倉庫推送:
專案右鍵 => Team => Remote =>Push to upstream
(四)更新遠端倉庫修改到本地
方法1:
1)專案右鍵 => Team => Remote =>Fetch form upstream
注:該操作首先將遠端的分支同步到本地的origin/master分支
2)專案右鍵 => Team => Marge
注:合併,可以檢視和本地是否有衝突,可以通過合併解決衝突。
方法2: 專案右鍵 => Team => Pull
注:Pull 合併了Fetch from upstream 和marge;強制Marge,但上面的方法更安全。
五 EGit 檢視
(一)倉庫檢視
庫檢視是有用的在處理分支/標記和執行操作,以及處理遠端儲存庫,讓你所瞭解概況。
右鍵Team => Show in Repositories View可以看到
(二)同步檢視
工作區和本地庫的對比或者當前分支和其他分支的對比是通過同步操作完成的。
右鍵Team => Sychronize Workspace ,工作區會和當前分支比較並展示出不同。
右鍵Team => Advanced => Synchronize… 可以檢視當前分支和其他分支的比較。這包括所有本地未提交的變化。
(三)歷史檢視
檢視已共享檔案的歷史,右鍵Team => Show in History.
可以進行比較,標籤,回退。