一.Git概念
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):該到一定程度時,可以提交一批次暫存區的修改,操作后修改提交版本庫,並標記版本,是后續分享和回退的批次。
二.Eclipse 安裝EGit
1、安裝
2、配置
EGit每次提交都將包含用戶名和郵件,可以通過“Window => Preferences => Team => Git => Configuration”配置,
通過Add Entry 按鈕添加信息,key : user.name,value:用戶名 ;key:user.emai , value : 郵箱,賬戶信息通常GitHub相同。
三.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使用
1、創建本地倉庫
Git優勢是容易創建本地倉庫,將工作本地化,待需要的時候推送到遠程倉庫,因此所有修改可以在本地版本化。
方法:本地見一個工程,添加一些文件,然后在工程上右鍵Team => Share Project ,點擊 create按鈕創建倉庫。
2、提交(Commit)
(1)創建文件提交
創建新文件,由“?”標記,想提交倒本地倉庫進行版本管理,需要右鍵Team => Add to Index,操作后“?”變成“+”。
然后項目右鍵Team => Commit,輸入本次提交信息(注:輸入的信息會展示在歷史頁面),成功后標記由“+”變成“倉庫”符號。
=And to Index=>
(2)產生修改提交
修改項目文件,文件會由“>”標記,如果需要同步到本地庫,我們需要提交,過程同上commit。
3、撤銷修改
方法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 ]”。
方法2:
通過和上一次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版本的內容,未提交的更改都將丟失,因此該操作必須確認。
4、創建分支
項目上右鍵Team => Switch to => New Branch… ,選擇一個新分支的來源,點擊創建分支,輸入分支名。
新分支會出現在分支選擇窗口,如果向檢出一個新創建的分支,選擇然后點擊checkout。
注:
Git的一大優勢是很容易創建分支,根據需要可以快速創建Bug修復分支,新功能分支,幾條分支獨立開發,最后合並到主分支。
原則:
a)master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面開發;
b)開發都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合並到master上,在master分支發布1.0版本;
c)每個開發人員都在自己dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合並就可以了。
5、合並和解決沖突
(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 完成合並。
五.遠程倉庫
1、項目提交遠程倉庫
(1)GitHub上創建項目
(2)項目:右鍵 Team => Remote => Push,填寫遠程倉庫信息
(3)選擇推送的分支信息,這里由於建立了master和dev分支,選擇並通過"Add Spec"按鈕添加,選中復選框“Force Update”,已避免沖突,否則需要現更新再推送。
(4)由於Force Update所以需要確認。
(5)推送完成
2、克隆遠程倉庫導入項目
(1)File => Import => Git => Project from Git
(2)倉庫來源選擇:Clone from uri 填寫賬戶信息
(3)分支選擇也沒:選擇要導入的分支
(4)本地路徑指定地址
(5)完成后本地倉庫出現,克隆完成,可以直接選擇“Import as existing project”導入
(6)導入
3、提交修改到遠程倉庫程
方法1:正常的提交操作:
項目右鍵 => Team => Remote => Push 可以選擇不同的遠程倉庫進行推送。包括其他同事的倉庫推送。
方法2:向默認遠程倉庫推送:
項目右鍵 => Team => Remote =>Push to upstream
4、更新遠程倉庫修改到本地
方法1:
1)項目右鍵 => Team => Remote =>Fetch form upstream
注:該操作首先將遠程的分支同步到本地的origin/master分支。
2)項目右鍵 => Team => Marge
注:合並,可以查看和本地是否有沖突,可以通過合並解決沖突。
方法2: 項目右鍵 => Team => Pull
注:Pull 合並了Fetch from upstream 和marge;強制Marge,但上面的方法更安全。
六.EGit 視圖
1、倉庫視圖
庫視圖是有用的在處理分支/標記和執行操作,以及處理遠程存儲庫,讓你所了解概況。
右鍵Team => Show in Repositories View可以看到
2、同步視圖
工作區和本地庫的對比或者當前分支和其他分支的對比是通過同步操作完成的。
右鍵Team => Sychronize Workspace ,工作區會和當前分支比較並展示出不同。
右鍵Team => Advanced => Synchronize… 可以查看當前分支和其他分支的比較。這包括所有本地未提交的變化。
3、歷史視圖
查看已共享文件的歷史,右鍵Team => Show in History.
可以進行比較,標簽,回退。
