Git 使用 Cola Git GUI (1)
Cola git 是一個 Linux 底下的 git 視窗程式,藉由 Cola git 我們可以先練習 git 在 local repository 的基本操作。
Git 安裝
以下我們以 Ubuntu Linux 與 Cola git 為操作環境,首先需要在 Ubuntu 系統中安裝 git 以及 cola git,可以於終端機執行以下指令安裝:
$ sudo apt-get install git-core git-cola
或是使用 Ubuntu 軟體中心安裝 git-core 與 git-cola
初始化 repository
安裝完 git 之後需要為 git repository 準備一個資料夾,以 Cola-Git_Test 這個資料夾作為示範。
假設想要維護一個新的軟體專案,可開啟終端機於 Cola-Git_Test 目錄下開一個新的 repository:
#切換至 Cola-Git_Test 資料夾
$ cd Cola-Git_Test
#初始化 git repository,這會於 Cola-Git_Test 資料夾內產生 .git 資料夾
$ git init
開啟 Cola Git
將資料夾初始成 git repository 後即可使用 Cola git 開啟此資料夾,點擊 open 可開啟本地端的 repository。
選擇剛才建立的 repository - Cola-Git_Test
接著會自動開啟 Cola git 圖形界面!
新增檔案
接著我們可以在 Cola-Git_Test 資料夾底下嘗試新增一些檔案,看看如何使用 Cola Git 來管理它。先建立一個 main.c 實驗一下:
儲存 main.c 檔案之後接著回到 Cola Git 來觀察一下發生甚麼變化,可以在 action 子窗格中執行 Rescan 操作,此時 Cola Git 會幫我們檢查 Working directory (以此範例而言是Cola-Git_Test 資料夾)是否有新的修改發生,會發現 Repository Status 中出現一個未追蹤檔案的新紀錄 Untracked -> main.c。
Stage
我們可以將 main.c 這個檔案先新增到 staging area 暫存,可以在 action 子窗格中執行 Stage 操作,因此 main.c 會顯示成 Staged 狀態:
Commit
緊接著準備將這一筆 staged 的暫存紀錄 commit 到 repository,先於 Commit Message Editor 中寫下這一筆紀錄的註記訊息,接著點擊 Commit 即於 repository 增加一筆新的 commit。
當然我們可以檢視剛才新增的這一筆 commit 紀錄,可以至選單 Branch->Visualize Current Branch 檢視目前的 branch:
目前的 branch 會以 gitk 視窗顯示,可以看到目前是在 master branch(也就是預設的分支),以及剛才 commit 的紀錄與註記訊息,此外 Git 會依據 commit 內容自動計算出唯一的 SHA1 ID,假設日後新增了許多新的 commit ,可以依據 SHA1 ID 快速的找回以前的 commit。
有一就有二,馬上試著新增第二筆紀錄吧!
先在 main.c 檔案中增加幾行:
接著 Rescan 檢查 working directory 是否有修改:
仔細留意這次 Repository Status 顯示為 Modified,與第一次新增檔案時 Untracked 的狀態不同。
同樣需要把 working directory 的修改放到 staging area:
接著新增第二筆 commit 紀錄:
新增完第二筆 commit 之後,可從選單 Branch->Visual Current Branch 瀏覽目前的版本分支:
可以看到視窗中顯示兩筆 commit 紀錄,以及 master 分支指向目前最新一筆的 commit。
實際上在一般開發的過程中,通常會重複以上步驟持續將版本演進成線性的 master branch (預設/主幹分支),然而許多時候開發過程中伴隨著其他外複雜的情況,例如想要做某些實驗性新功能,想針一些已知 bug 改寫一版 debug 版本,由於這些都屬於實驗性階段通常不會直接放在 master branch,因此我們接下來就一起來運用 Git 方便的 branch 功能,將這些實驗性質的操作放到新的 branch 中管理。
Branch 分支使用與管理
接下來示範 Cola Git branch 的使用方式,事實上可以從任意一個 commit 紀錄衍生出新的 branch,只要先選定某個 branch -> 按下滑鼠右鍵 -> Create New Branch:
為新的 branch 命名,假設這個新的 branch 預計用來修改已知 bug,因此將它命名為 Bug01然後建立新的 branch:
建立 bug01 branch 之後可以看到目前有兩個 branch,一個是預設的 master 另一個是剛才新增的 bug01,為了編輯 Bug01 需要將它 checkout 到 working directory 中:
Checkout 之後需要先將 gitk 視窗以及 Cola Git 視窗關閉,並重新開啟 Cola Git:
可觀察到目前 branch 已經為 Bug01 branch(紅色方框所示)
現在 working directory - Cola-Git_Test 資料夾已經對應到 Bug01 branch,因此接下來若對於 working directory 做的更動 commit 之後會被紀錄在 Bug01 branch 中。
讓我們先對 Cola-Git_Test 資料夾做一些更動,編輯 main.c 加入 bug01 處理:
回到 Cola Git 視窗中,快速完成 Rescan、Stage、填寫 Commit Message 以及 Commit 新紀錄:
檢視目前的 commit 紀錄,Branch -> Visualize All Branches:
可以看到最新的 Bug01 branch 指向最新筆 commit,而 master 仍停留在之前的 commit 。
實際上開發軟體的過程中時常會有額外的情況或是需求發生,假設在 debug 的同時突然想到新功能要加入,不過 debug branch 可能仍在測試階段暫時不會靶心功能直接加在 debug branch 上,於是可以回到先前較穩定的版本上,開另一個 branch 將開發流程分開進行。例如可以回到第二筆 commit 版本新增一個 feature01 branch 進行新功能開發:
設定 branch 名稱並建立新的 branch - Feature01:
然後將 Feature01 checkout,關閉 gitk 以及Cola Git 回到 working directory 去工作吧!
這一次我們新增多一點東西,除了在 main.c 加入新的程式碼,另外開了一個 feature.c 檔案:
接著開啟 Cola Git 先確認一下目前是不是在 Feature01 branch,如果不是可以至 Branch -> Checkout 設成 Feature01,接著 Rescan 剛才 working directory 所作的修改,選取 main.c 以及 feature.c 對兩個更動的檔案 Stage:
想必大家一定熟悉接下來的操作,填上 Commit Message 並且 Commit 一筆新紀錄:
當然我們可以檢視最新的 Commit 狀況,Branch->Visualize All Branches:
至目前為止是否已經感受到 Git branch 的特色呢?無論開發人員開多少個 branches 無論開發流程如何錯綜複雜,working directory 永遠只會有一份內容,其他的 branches 、commits 都是由 Git 幫忙維護管理,修改後就 commit 給 Git repository 需要時就從 repository checkout 出來。
Merge 合併分支
假設目前 Feature01 以及 Bug01 兩個分支已經發展到一個相對穩定程度,接下來想要將兩個版本合併可以藉由 git 的 merge 來達成。
點選選單 Action -> Merge。
接著會跳出 Merge 設定視窗,由於目前是在 Feature01 底下我們選擇與 Bug01 做 marge:
若沒有衝突發生 Merge 將直接產生新的版本,可以觀察 main.c 的結果是不是兼具 debug 以及 feature 的程式碼:
此外還能使用 Branch -> Visualize All Branches 檢查最新的分支狀態:
認識了以上方法,想必大家都能透過 Git 在自己電腦上進行完整且便利的版本控管囉!