Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å...

18
在現今的資訊產業中,軟體扮演的角色愈來愈重要。如果公司想要在 資訊產業界佔有一席之地,擁有強大的軟體研發實力是必要的條件。 雖然軟體研發的核心技術是「程式設計」,但是以現階段軟體產業的 生態來說,能夠善用工具軟體來提升軟體研發的效率,也是影響軟體 實力的關鍵因素之一,而 Git 就是能夠有效提升軟體研發效率的重要 工具。 Git 青出於藍、更勝於藍 Git 最初是由 Linux kernel 的作者 Torvalds 先生所開發,用來管理 Linux kernel 專案的工具。它的功能是負責專案的版本控制,我們稱它 為「版本控制系統」(Version Control System, VCS)。雖然在 Git 前,已經有許多 VCS。但是相較之下,Git 有更多的優點。因此自從 Git 出現之後,就以「後來居上」的態勢快速普及。不僅有許多軟體研 發公司改用 Git 來控管軟體專案,網路上也出現許多提供 Git 檔案庫儲 存服務的網站。而且絕大多數的開放源碼的程式專案,也都是使用 Git 來控制版本。為了因應這樣的趨勢,軟體開發工具現在也都支援 Git 版本控制。因此只要是從事軟體專案研發相關工作,或是未來即將踏 入這個領域,Git 已經成為必備的技能。 Git 和其他 VCS 有許多不一樣的地方。它的優點是能夠提升軟體 開發團隊的工作效率,但是相對而言,就需要多一點時間來學習。初 次使用 Git 的人通常會有似懂非懂的感覺,仿照別人的操作雖然很容

Transcript of Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å...

Page 1: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

在現今的資訊產業中,軟體扮演的角色愈來愈重要。如果公司想要在

資訊產業界佔有一席之地,擁有強大的軟體研發實力是必要的條件。

雖然軟體研發的核心技術是「程式設計」,但是以現階段軟體產業的

生態來說,能夠善用工具軟體來提升軟體研發的效率,也是影響軟體

實力的關鍵因素之一,而 Git就是能夠有效提升軟體研發效率的重要

工具。

Git 青出於藍、更勝於藍

Git最初是由 Linux kernel的作者 Torvalds先生所開發,用來管理

Linux kernel專案的工具。它的功能是負責專案的版本控制,我們稱它

為「版本控制系統」(Version Control System, VCS)。雖然在 Git之

前,已經有許多 VCS。但是相較之下,Git 有更多的優點。因此自從

Git出現之後,就以「後來居上」的態勢快速普及。不僅有許多軟體研

發公司改用 Git來控管軟體專案,網路上也出現許多提供 Git檔案庫儲

存服務的網站。而且絕大多數的開放源碼的程式專案,也都是使用 Git

來控制版本。為了因應這樣的趨勢,軟體開發工具現在也都支援 Git

版本控制。因此只要是從事軟體專案研發相關工作,或是未來即將踏

入這個領域,Git已經成為必備的技能。

Git 和其他 VCS 有許多不一樣的地方。它的優點是能夠提升軟體

開發團隊的工作效率,但是相對而言,就需要多一點時間來學習。初

次使用 Git 的人通常會有似懂非懂的感覺,仿照別人的操作雖然很容

Page 2: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

iii

易,可是究竟這樣操作會得到什麼結果,或是在不同的情況下該如何

處理,這一切都覺得懵懵懂懂。如果是和軟體研發團隊一起工作,每

一次操作 Git 更是膽顫心驚,害怕一不小心,毀了整個團隊的心血結

晶,成為大家的罪人!

其實 Git的核心精神是要保護我們的檔案,因此它運作的最高指導

原則,就是不會遺失我們的資料,除非我們自己執行刪除檔案的指令。

因此 Git的安全性是無庸置疑的,只要我們瞭解它的運作方式,熟悉各

種情境下的操作方法,就能夠讓它發揮最大的效能。

Git 的學習之道

這本書的目的是要幫助讀者,以循序漸進的方式,學習 Git 的功

能和用法。書中以實際的操作範例,讓讀者親身體驗 Git運作的細節,

並且掌握每一個指令的效果,和每一個選項的使用時機。雖然網路上

有許多採用 GUI操作介面的 Git程式,但是筆者不建議初學者一開始

就使用這類型的程式。因為它的操作介面過於複雜,初學者在還沒有

完全瞭解的情況下,常常會覺得疑惑,反而容易讓學習失焦。相較之

下,輸入 Git指令的操作方式雖然比較麻煩一點,但是卻比較清楚,

初學者可以完全理解每一個操作和選項所造成的結果。等到建立好

Git 指令操作的基礎之後,再來使用 GUI 介面的 Git 程式,就會水到

渠成,輕而易舉!

本書的內容安排先從 Git的單機操作開始,讓讀者先瞭解 Git如何

運作,並且熟悉設定檔和檔案庫的基本操作方法。接著學習如何建立

分支、合併分支和解決衝突。等到基礎完備之後,再來介紹 GUI操作

介面的 Git程式,讓讀者體驗不同的操作風格。接著學習 Git在團隊開

發模式的應用,以及介紹網路上提供 Git檔案庫儲存服務的網站。讓讀

者瞭解如何利用這些資源,輔助程式專案的開發。使用這些網站的另

Page 3: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

iv

一個好處是可以藉此參與開放原始碼的程式專案,提升自己程式開發

的經驗和能力。本書的最後部分是介紹架設 Git Server的幾種方法,讓

每一個專案開發團隊,可以依照自己的軟硬體環境,選擇適合的方式

來控管專案。

相信藉由本書精心編排的學習單元,能夠順利地引導初學者,一

步一步建立完整的操作觀念和技巧,並且培養在不同情境下的應用能

力。一旦讀者能夠完全掌握 Git之後,它必定成為你,或是你的團隊,

開發程式專案的最佳助手!

孫宏明

于 開南大學 資訊管理學系

Page 4: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

到目前為止,我們已經瞭解 Git如何運作,並且學會一些基本的操作技

巧。這個單元我們就來實地演練一下,看看如何把它們套用到實際的

程式專案。我們將以 Android App 專案開發為例,看看如何利用 Git

管理程式碼。雖然我們是用 Android App 專案來示範,但是同樣的技

巧可以適用其他的程式專案。

當我們使用 Android Studio 開發工具建立一個新的 App 專案時,

會在 App 專案資料夾中產生許多檔案和子資料夾,其中包括專案設定

檔、程式檔、程式庫檔、各種專案資源檔,以及編譯程式專案所產生

的暫存檔。需要由 Git管理的檔案只有專案設定檔、程式檔、程式庫檔

和專案資源檔,編譯過程中產生的暫存檔並不需要加入 Git檔案庫。我

們可以利用單元三介紹的「.gitignore」檔案,來排除這些暫存檔。不

過 Android Studio 很貼心,它在建立 App 專案的時候,會自動幫我們

產生預設的「.gitignore」檔,節省我們自己準備這個檔案的麻煩。因

此建立新的 App 專案之後,我們可以立刻把它存入 Git 檔案庫。假設

Page 5: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

5-2

現在已經建立好一個新的 App專案,接下來就可以啟動 Git Bash程式,

利用「cd」指令切換到 App專案的資料夾,然後執行以下指令:

git init 建立 Git檔案庫,讓 Git開始管理這個資料夾中的檔案

git status 顯示目前資料夾中的檔案狀態

畫面會顯示以下訊息,表示有哪些檔案和子資料夾沒有被加入 Git檔案

庫(也就是還沒有被 Git追蹤的檔案和子資料夾):

On branch master

Initial commit

Untracked files:

(use "git add <file>..." to include in what will be committed)

.gitignore

.idea/

AndroidApp.iml

…(所有未被追蹤的檔案和子資料夾的清單)

nothing added to commit but untracked files present (use "git add" to

track)

接下來執行以下指令,把所有檔案和子資料夾(除了被「.gitignore」

檔案排除的以外)存入檔案庫:

git add .

git commit -m ‘Initial app project.’

現在我們可以執行「gitk」指令,利用圖形檢視模式觀察檔案庫的

內容。左上角的視窗中會有一個 commit 節點(如圖 5-1),它就是我

們剛剛執行「git commit」指令的結果。既然我們已經把程式專案加入

Git檔案庫,現在就來測試一下,看看 Git是不是真的幫我們把檔案儲

存起來。先關閉 Android Studio,然後把專案資料夾中的檔案全部刪除

Page 6: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

5-3

(請注意,不要刪除「.git」這個子資料夾,因為它是 Git 儲存資料的

地方)。接著再利用「git checkout HEAD .」指令,從 Git檔案庫中取

出所有的檔案。最後重新啟動 Android Studio,開啟這個 App專案,結

果應該和原來的狀態一模一樣。

圖 5-1 利用 gitk 圖形檢視模式查看新加入的程式專案

接下來我們要幫 App 加入新功能,假設我們已經加入一個新的按

鈕,並且完成相關的程式碼。現在要將這個修改後的版本加入 Git檔案

庫。先切換到 Git Bash程式,然後執行以下指令:

git add .

git status

畫面會顯示以下訊息,告訴我們有哪些檔案被修改過,並且已經準備

好要存入檔案庫:

On branch master

Changes to be committed:

Page 7: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

5-4

(use "git reset HEAD <file>..." to unstage)

modified: .idea/misc.xml

modified: app/src/main/java/com/androidapp/MainActivity.java

modified: app/src/main/res/layout/activity_main.xml

modified: app/src/main/res/values/strings.xml

最後執行以下指令,把修改後的內容存入檔案庫:

git commit -m ‘Add a button.’

以上的操作只有更動檔案內容,並沒有在程式專案中加入新的檔

案,接下來試看看有新檔案的情況。假設我們在 App 中建立一個新的

GameFragment 類別,包括它的程式檔和介面佈局檔。然後切換到 Git

Bash程式,接著同樣執行「git add .」和「git status」指令,畫面會顯

示以下訊息,告訴我們有哪些新檔案,以及有哪些檔案被修改:

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

new file: app/src/main/java/com/androidapp/GameFragment.java

new file: app/src/main/res/layout/fragment_game.xml

modified: app/src/main/res/values/strings.xml

最後執行「git commit」指令,把它們存入檔案庫。我們可以再利用「gitk」

指令檢視目前檔案庫的狀態。

現在假設我們想要反悔,要從專案中刪除這個新加入的

GameFragment。這時候除了從資料夾刪除它的相關檔案以外,還要從

Git 檔案庫刪除這些檔案的追蹤狀態。雖然前面單元學過的「git rm」

指令可以達到這個目的,但是還有一個更簡便的方法,請讀者依照以

下步驟操作:

從 App專案的資料夾中刪除不想要的檔案。

Page 8: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

5-5

切換到 Git Bash程式,執行「git add -A .」。

執行「git add .」指令時如果沒有加上「-A」選項,Git不會檢查資料夾

中是否有檔案被刪除。但是如果加上「-A」選項,Git就會檢查資料夾中

是否有檔案被刪除。這些被刪除的檔案會註記在 Git索引,當執行 commit

指令的時候,被註記刪除的檔案也會從新的 commit節點中移除。

執行「git status」指令,畫面會顯示 Git 索引中已經記錄好要刪

除的檔案。

On branch master

Changes to be committed:

(use "git reset HEAD <file>..." to unstage)

deleted:

app/src/main/java/com/androidapp/GameFragment.java

deleted: app/src/main/res/layout/fragment_game.xml

最後再利用「git commit」指令,從新的 commit節點中刪除這些

檔案。

以上操作只是取消這些檔案的追蹤狀態,其實這些檔案的內容還

是留在檔案庫的歷史版本裡頭,我們可以利用前面單元學過的「git

checkout」指令取回這些檔案。如果想要瞭解某一個檔案的修改紀錄,

也可以利用前面學過的「git difftool」指令進行檔案的比對,例如:

git difftool HEAD~1 HEAD~2 app/src/main/res/values/strings.xml

再者,如果想要讓檔案庫回復到以前某一個 commit節點的狀態,也可

以藉助「git reset」指令。總之,我們可以善用前面單元介紹的指令和

操作技巧,讓 Git幫我們保存程式專案開發的歷史紀錄,並且可以隨時

檢視,或是取回任何版本的檔案。

補充說明

Page 9: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

到目前為止,我們一直都是使用 Git Bash程式來學習 Git的用法。Git

Bash 程式是以輸入指令的方式操作 Git 檔案庫。和圖形操作介面的程

式相較之下,這種命令列模式的程式好像比較麻煩。但是其實不然,

Git Bash程式才是能夠完整發揮 Git最大功能的操作工具。初學者應該

從 Git Bash 程式開始學習,才能夠建立紮實的 Git 指令基礎,並且完

整瞭解 Git檔案庫的運作原理。等到基礎熟練之後,再來學習圖形操作

模式,自然能夠觸類旁通,而且輕而易舉。經過前面單元的學習和演

練,現在讀者已經具備完整的基礎。這個單元我們就來介紹 Git GUI

這個圖形介面操作程式的用法。

在 Git Bash程式執行「git gui」指令也可以啟動 Git GUI。

補充說明

Page 10: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-2

Git GUI是和 Git Bash一起安裝的程式,我們可以在 Windows系統的

程式集中的 Git 子資料夾找到它。將它啟動之後,會看到圖 11-1 的對

話盒。對話盒中會顯示下列 3個選項:

1. Create New Repository

點選這個項目之後,會讓我們輸入一個資料夾路徑,程式會在這

個指定的資料夾路徑建立一個 Git 檔案庫。這個功能就如同在 Git

Bash程式中執行「git init」指令。

2. Clone Existing Repository

這個項目用來複製一個已經存在的程式專案,和它的 Git檔案庫。

選擇這個項目之後,會讓我們輸入程式專案的資料夾路徑,和要

複製過去的資料夾路徑。

3. Open Existing Repository

選擇這個項目之後,會讓我們輸入一個資料夾路徑,裡頭是已經

建立好的 Git檔案庫。Git GUI程式會切換到這個資料夾,然後開

始運作。這項功能就如同在 Git Bash 程式中,利用「cd」指令,

切換到程式專案的資料夾。Git程式會自動讀取 Git檔案庫的狀態。

圖 11-1 啟動 Git GUI 程式後顯示的對話盒

Page 11: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-3

接下來我們就以單元 10 的程式專案開發模式為例,介紹如何利用 Git

GUI程式來完成 Git檔案庫的操作。

11-1 Git GUI 程式的基本操作

首先我們必須在程式專案資料夾中建立「.gitignore」檔案,排除

不需要存入 Git 檔案庫的檔案和資料夾。接下來就可以啟動 Git GUI

程式,點選 Create New Repository項目,輸入程式專案的路徑。按下

Create按鈕之後,就會顯示圖 11-2的畫面。Git GUI程式的操作畫面分

成四個部分。左上方的區域會顯示目前程式專案資料夾中,有哪些檔

案在加入 Git檔案庫之後又被修改,以及有哪些檔案是在 untracked狀

態(也就是沒有被加入檔案庫,而且又不在「.gitignore」檔案裡頭)。

另外,如果我們從程式專案資料夾中刪除檔案,該檔案也會出現在這

個區域,提醒我們要更新這個檔案在 Git檔案庫的狀態。Git GUI程式

左下方的區域是顯示目前已經加入 Git索引的檔案。我們可以利用右邊

的「Stage Changed」按鈕,把左上方區域顯示的檔案加到 Git 索引裡

頭。其實 Git GUI程式左邊二個區域顯示的資訊,就是在 Git Bash程

式中執行「git status」指令所顯示的資訊。如果資料夾中的檔案又被修

改,我們可以按下右邊的 Rescan按鈕更新這二個區域的內容。

按下「Stage Changed」按鈕是把「目前」檔案內容登錄到 Git索引。如

果之後又修改了檔案,這些新修改的內容不會自動加到 Git索引。我們必

須重新按下「Stage Changed」按鈕,才會把最新的檔案內容登錄到 Git

索引。

補充說明

Page 12: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-4

圖 11-2 Git GUI 程式的操作畫面

如果點選左邊區域顯示的檔案名稱,該檔案的相關資訊會顯示在

右上方區域。另外按下「Stage Changed」按鈕時,程式會先檢查資料

夾中是否有 untracked狀態的檔案。如果有,就會顯示對話盒,詢問是

否要把 untracked狀態的檔案登錄到 Git索引。如果我們選擇「是」,

程式會把所有 untracked的檔案、被修改的檔案和被刪除的檔案全部登

錄到 Git索引。這就等於在 Git Bash程式中執行「git add -A」指令。

這個區域顯示以下三種檔案: 1. 修改過 2. untracked 3. 被刪除

這個區域顯示點選的檔案

狀態和內容

這個區域顯示目前 Git 索引的內容 這個區域包含操作按鈕以及 執行 commit 時輸入的作業說明

Page 13: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-5

如果選擇「否」,程式只會把被修改的檔案和被刪除的檔案登錄到 Git

索引。這就等於在 Git Bash程式中執行「git add -u」指令。除了利用

「Stage Changed」按鈕把檔案的狀態或是內容登錄到 Git 索引以外,

也可以點選左邊區域的檔案名稱前面的小圖示來達到相同的功能。同

樣的操作技巧也可以把檔案從 Git索引中移除。如果想要把某些檔案加

入 Git索引,可以配合鍵盤上的 Shift鍵或是 Ctrl鍵,先選好檔案,然

後選擇主選單的 Commit > Stage To Commit。如果要從 Git索引移除某

些檔案,同樣先選好檔案,再選擇主選單的 Commit > Unstage From

Commit。

把要更新的檔案內容或是檔案狀態加到 Git索引以後,接下來就是

執行 commit。執行 commit 需要輸入操作者的資料,以及作業說明。

操作者的資料可以利用主選單的 Edit > Options進行設定,如圖 11-3。

設定值有二種有效範圍,左邊的設定只對目前這個程式專案有效,右

邊的設定則對所有 Git檔案庫都有效(提示:關於 Git設定檔的儲存位

置和影響範圍請參考單元 2的說明)。圖 11-3中除了標示使用者資料

欄位以外,另外也標示幾個常用的設定項目讓讀者參考。設定好使用

者資料之後,接著在 Git GUI程式右下方區域輸入 commit說明,然後

按下 Commit按鈕,就會把 Git索引的內容存入檔案庫。

Page 14: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-6

圖 11-3 Git GUI 程式的設定畫面

11-2 Git GUI 程式和其他程式搭配運用

現在我們已經學會 Git GUI 程式的基本操作。在進一步介紹其他

功能之前,我們先轉換一下主題,看看 Git GUI如何和 Git Bash程式,

以及其他程式搭配使用。或許讀者會覺得有點奇怪,為什麼 Git GUI

程式要和其他程式搭配呢?這是因為 Git GUI 程式只提供常用的功

能,進階的 Git檔案庫操作還是要透過 Git Bash程式來執行。使用 Git

GUI的好處是可以比較方便地查看資料夾中的檔案變動情形,以及 Git

索引的內容。在執行 commit的時候,也能夠很方便地編輯作業說明。

當需要執行 Git指令的時候,可以從主選單的 Repository > Git Bash來

Page 15: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-7

啟動 Git Bash程式(參考圖 11-4)。而且 Git Bash程式會自動切換到

和 Git GUI 程式相同的工作資料夾。當我們在其中一個程式操作 Git

檔案庫的時候,另一個程式也會看到最新的狀態。也就是說這二個程

式的狀態是同步的。

啟動 Git GUI和 Git Bash還有另一個更簡便的方法。在檔案總管裡頭用

滑鼠右鍵點選程式專案的資料夾,然後在顯示的快顯功能表中選擇「Git

GUI Here」或是「Git Bash Here」。這樣程式啟動之後,就會自動切換

到程式專案資料夾。不過如果選擇的是「Git GUI Here」,必須在這個資

料夾中已經有 Git檔案庫。否則還是會顯示圖 11-1的對話盒。

圖 11-4 Git GUI 程式的 Repository 選單

在 Git GUI 程式中也可以啟動 gitk 圖形檢視模式,只要選擇

Repository選單的「Visual (branch名稱)’s History」項目即可。這項操

作等於在 Git Bash程式執行「gitk」指令。另外也可以選擇「Visual All

Branch History」,這個項目等於在 Git Bash程式執行「gitk -all」指令。

它會顯示所有分支的 commit 節點演進圖。Repository 選單中的

補充說明

Page 16: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-8

「Database Statistics」、「Compress Database」和「Verify Databse」可

以用來檢視和管理 Git檔案庫。執行「Compress Database」就等同於在

Git Bash程式執行「git gc」指令。

Repository選單中還有二個比較特別的項目,就是「Browse (branch

名稱)’s Files」和「Browse Branch Files」。第一個項目是瀏覽目前這個

分支的檔案,第二個項目可以讓我們選擇要瀏覽哪一個分支的檔案。

執行這項功能會顯示圖 11-5的視窗。要特別提醒的是,這個視窗顯示

的是 Git檔案庫中最新 commit節點的檔案,不是資料夾中的檔案。它

的用法就像一般檔案瀏覽視窗一樣。快按二下資料夾,就可以進入該

資料夾。快按二下檔案就會開啟該檔案,然後顯示圖 11-6的視窗。這

個視窗除了列出檔案內容以外,在每一行前面都會對應到一個 commit

節點的識別碼(如果和上一行相同,就會用垂直線代替),表示該行

是在那一個 commit節點被加入。如果用滑鼠點選某一行,視窗下方會

顯示該行對應的 commit節點的詳細資料。

圖 11-5 Git GUI 程式的檔案瀏覽器

Page 17: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-9

圖 11-6 Git GUI 程式的檔案視窗

圖 11-6的檔案視窗還可以切換不同版本的檔案內容,只要用滑鼠

按一下左邊的 commit 節點識別碼,就會顯示該 commit 節點的檔案內

容。利用這個功能,我們可以很方便地檢視儲存在 Git檔案庫中的每一

個檔案版本。如果要回到最新的版本,只要用滑鼠點選上方狀態列的

箭頭,再選擇分支名稱即可。不過光從 commit節點識別碼,我們無法

判斷它們先後次序的關係,必須進一步藉助 commit節點演進圖,才能

夠得到完整的資訊。沒關係,只要用滑鼠右鍵點選檔案內容,然後選

擇「Show History Context」,就會顯示 gitk圖形檢視視窗。如果要在

檔案中尋找某一個字串,可以在按下滑鼠右鍵之後,選擇「Find Text」,

就會在下方出現一個搜尋列,讓我們輸入要搜尋的文字。

Page 18: Git 青出於藍、更勝於藍epaper.gotop.com.tw/PDFSample/ACA021200.pdfgit init Å 建立Git檔案庫,讓Git開始管理這個資料夾中的檔案 git status Å 顯示目前資料夾中的檔案狀態

11-10

現在讀者應該可以感受到 Git GUI 程式在操作上的便利性。利用

它的優點,再搭配 Git Bash程式強大的指令功能,可以讓我們更有效

率地使用 Git。下一個單元我們要繼續介紹如何利用 Git GUI程式來建

立分支和合併。