章節 ▾ 第二版

A1.1 附錄 A:其他環境中的 Git - 圖形化介面

如果您通讀了本書,您已經學到了很多關於如何在命令列中使用 Git 的知識。您可以操作本地檔案,透過網路連線您的倉庫到其他地方,並有效地與他人協作。但這並不是故事的全部;Git 通常是更大生態系統的一部分,而終端並不總是最佳的工作方式。現在,我們將看看 Git 可以被用於的一些其他環境型別,以及其他應用程式(包括您的)如何與 Git 一起工作。

圖形化介面

Git 的原生環境是終端。新功能會首先在那裡出現,並且只有在命令列中,Git 的全部功能才能完全由您掌控。但是純文字並非適合所有任務的最佳選擇;有時您需要的是視覺表示,並且一些使用者更習慣於點選式介面。

需要注意的是,不同的介面針對不同的工作流程進行了定製。一些客戶端只暴露了一部分精心挑選的 Git 功能,以支援作者認為有效的特定工作方式。從這個角度來看,這些工具都不能稱為“更好”,它們只是更適合其預期用途。另外請注意,這些圖形化客戶端能做的,命令列客戶端都能做到;在操作您的倉庫時,命令列仍然是您擁有最大力量和控制力的地方。

gitkgit-gui

當您安裝 Git 時,您也會得到它的視覺化工具 gitkgit-gui

gitk 是一個圖形化的歷史檢視器。可以將其視為 git loggit grep 的強大 GUI 外殼。當您試圖查詢過去發生的事情或視覺化專案歷史時,可以使用此工具。

從命令列呼叫 Gitk 最簡單。只需 cd 進入一個 Git 倉庫,然後輸入

$ gitk [git log options]

Gitk 接受許多命令列選項,其中大部分會傳遞給底層的 git log 操作。其中最有用的可能是 --all 標誌,它告訴 gitk 顯示所有可達引用的提交,而不僅僅是 HEAD。Gitk 的介面如下所示

The `gitk` history viewer
圖 177. gitk 歷史檢視器

頂部有點像 git log --graph 的輸出;每個點代表一個提交,線條代表父子關係,引用的顯示為彩色框。黃點代表 HEAD,紅點代表尚未成為提交的更改。底部是所選提交的檢視;左側是註釋和補丁,右側是摘要檢視。中間是用於搜尋歷史的控制元件集合。

另一方面,git-gui 主要是一個用於建立提交的工具。它同樣最容易從命令列呼叫

$ git gui

它看起來是這樣的

The `git-gui` commit tool
圖 178. git-gui 提交工具

左側是索引;未暫存的更改在上,暫存的更改在下。您可以單擊其圖示在兩者之間移動整個檔案,或者透過單擊檔名來選擇要檢視的檔案。

右上方是 diff 檢視,顯示當前選定檔案的更改。您可以透過在此區域右鍵單擊來暫存單個 hunks(或單個行)。

右下方是訊息和操作區域。在文字框中輸入您的訊息,然後單擊“Commit”以執行類似於 git commit 的操作。您還可以選擇透過選擇“Amend”單選按鈕來修改上一個提交,這將用上一個提交的內容更新“Staged Changes”區域。然後,您可以簡單地暫存或取消暫存一些更改,修改提交訊息,然後再次單擊“Commit”以替換舊的提交。

gitkgit-gui 是面向任務的工具的示例。它們各自針對特定目的(分別是檢視歷史和建立提交),並省略了該任務不需要的功能。

GitHub for macOS and Windows

GitHub 開發了兩款面向工作流的 Git 客戶端:一款用於 Windows,一款用於 macOS。這些客戶端是面向工作流工具的一個很好的例子——它們沒有暴露 Git 的所有功能,而是專注於一套經過精心策劃的常用功能,這些功能可以很好地協同工作。它們看起來是這樣的

GitHub for macOS
圖 179. GitHub for macOS
GitHub for Windows
圖 180. GitHub for Windows

它們的設計在外觀和操作上非常相似,因此在本章中我們將它們視為一個產品。我們不會對這些工具進行詳細的介紹(它們有自己的文件),但快速瀏覽一下“changes”檢視(這是您將花費大部分時間的地方)是必要的。

  • 左側是客戶端正在跟蹤的倉庫列表;您可以透過單擊此區域頂部的“+”圖示來新增一個倉庫(透過克隆或附加本地倉庫)。

  • 中間是一個提交輸入區域,允許您輸入提交訊息,並選擇要包含哪些檔案。在 Windows 上,提交歷史直接顯示在此下方;在 macOS 上,它在一個單獨的選項卡中。

  • 右側是 diff 檢視,顯示工作目錄中的更改,或者所選提交中包含的更改。

  • 最後要注意的是右上角的“Sync”按鈕,這是您透過網路進行互動的主要方式。

注意

您不需要 GitHub 帳戶即可使用這些工具。雖然它們旨在突出 GitHub 的服務和推薦的工作流,但它們也能很好地處理任何倉庫,並與任何 Git 主機進行網路操作。

安裝

可以在 https://desktop.github.com/ 下載 GitHub for Windows 和 macOS。首次執行應用程式時,它們會引導您完成所有首次 Git 設定,例如配置您的姓名和電子郵件地址,並且兩者都為許多常見配置選項設定了合理的預設值,例如憑證快取和 CRLF 行為。

兩者都是“常青”的——更新會在應用程式開啟時在後臺下載並安裝。這很方便地包含了一個捆綁的 Git 版本,這意味著您可能不必擔心手動更新它。在 Windows 上,客戶端包含一個快捷方式,可以啟動帶有 Posh-git 的 PowerShell,我們將在本章後面詳細討論。

下一步是讓該工具處理一些倉庫。該客戶端會顯示您在 GitHub 上有權訪問的倉庫列表,並可以一步克隆它們。如果您已經有一個本地倉庫,只需將其目錄從 Finder 或 Windows Explorer 拖放到 GitHub 客戶端視窗中,它就會包含在左側的倉庫列表中。

安裝和配置完成後,您可以使用 GitHub 客戶端執行許多常見的 Git 任務。該工具的預期工作流有時被稱為“GitHub Flow”。我們將在 GitHub Flow 中更詳細地介紹這一點,但總的要點是(a)您將提交到分支,以及(b)您將相當頻繁地與遠端倉庫同步。

分支管理是這兩個工具不同的領域之一。在 macOS 上,視窗頂部有一個用於建立新分支的按鈕

“Create Branch” button on macOS
圖 181. macOS 上的“Create Branch”按鈕

在 Windows 上,這可以透過在分支切換小部件中鍵入新分支的名稱來完成

Creating a branch on Windows
圖 182. 在 Windows 上建立分支

建立分支後,進行新的提交相對簡單。在工作目錄中進行一些更改,當您切換到 GitHub 客戶端視窗時,它會顯示您更改了哪些檔案。輸入提交訊息,選擇要包含的檔案,然後單擊“Commit”按鈕(Ctrl+Enter 或 ⌘+Enter)。

您透過網路與其他倉庫互動的主要方式是透過“Sync”功能。Git 內部有獨立的推送、獲取、合併和變基操作,但 GitHub 客戶端將所有這些合併為一個多步功能。當您單擊 Sync 按鈕時會發生以下情況

  1. git pull --rebase。如果由於合併衝突而失敗,則回退到 git pull --no-rebase

  2. git push.

這是在此樣式下最常見的網路命令序列,因此將其壓縮為一個命令可以節省大量時間。

總結

這些工具非常適合它們所設計的流程。開發人員和非開發人員都可以幾分鐘內協作處理一個專案,並且該類工作流程的許多最佳實踐都已內建到工具中。但是,如果您的工作流程不同,或者您希望對網路操作的執行方式和時間有更多控制,我們建議您使用其他客戶端或命令列。

其他 GUI

還有許多其他的圖形化 Git 客戶端,它們涵蓋了從專門的、單一用途的工具到試圖暴露 Git 所有功能的應用程式。官方 Git 網站在 https://git-scm.tw/downloads/guis 上列出了最受歡迎的客戶端。在 Git wiki 網站 https://archive.kernel.org/oldwiki/git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools.html#Graphical_Interfaces 上有更全面的列表。