GitHub 易於使用的命令列工具:「gh」!

如果您一直在使用GitHub,並且像我一樣更喜歡使用命令列來完成所有工作,而不會在GUI 上出現任何復雜情況,那麼您可能已經註意到GitHub 如何開始利用他們的不太新的工具“ gh」。我決定嘗試一下,因為它看起來畢竟很有前途。我個人非常喜歡它——以至於我想寫一篇關於它的文章!

在開始之前,我需要解釋一下我將在本文中使用的幾個術語。

“GH”代表“GitHub」。這也是該工具名稱的由來,因此它不能與 Git 本身混淆。為了解釋它的一般用途,您可以建立、分叉、刪除、瀏覽儲存庫;建立拉取請求;還有很多。如果你找不到某個功能但又不想離開終端,它還提供了一個基於文字的瀏覽器供你瀏覽 GitHub 中的頁面。

“CLI”代表“C指令 LINE I介面".該終端機(或 Windows 中的命令提示字元)就是其中之一。如果應用程式名稱旁邊附加了「CLI」(本文中為「Git CLI」),則表示該應用程式僅透過終端運行。在這種情況下,「Git CLI」就是我們所知道的 Git。就像我們進行提交或變基的命令。

GUI 代表“G粗話 UI介面”,它是我們“導航”的介面。更好的說法是,桌面環境通常是 GUI。

「API 金鑰」是某種用於對服務進行身份驗證的秘密字串/檔案。請注意,當您使用它進行身份驗證時,它會繞過兩因素身份驗證等。因此,請確保將它們保存在其他方式無法觸及的地方。

首先,這個工具是什麼?它如何處理我們透過 Git CLI 執行的操作?

「gh」可以被認為是一個開源(源代碼)包裝器利用 Git CLI 本身和 GitHub API 來完成工作。事實上,您甚至可以將參數傳遞給它使用的 Git 命令!我稍後會詳細介紹這些內容。

安裝和設置

請記住,我將使用以下命令完成安裝 終端。但該過程應該與基於 Debian 的發行版幾乎相同 - 例如,Ubuntu 在其官方存儲庫上有它。對於 Windows,我想您需要 CygWin 或 WSL。 ˙\_(ツ)_/˙

# 讓我們先安裝該工具。也要安裝 Git,因為它是 gh 的後端。 $ pkg install git gh -y # 然後在一切之前,我們需要進行身份驗證。這將在工具的資料庫中保存 # 新的 API 金鑰,因此您無需再次進行身份驗證。如果你已經設定了 GITHUB_TOKEN,這將不起作用,所以首先取消設定它。 :) $ gh 驗證登入

現在,在我們繼續之前,我需要指出幾件事。

  • 首先, 不要選擇“GitHub Enterprise Server” 如果您沒有某種自架的 GitHub。
  • 其次, 如果您在 GitHub 帳戶上新增了公鑰,請使用 SSH 而不是 HTTPS。 如果您遺失了 API 金鑰,您至少不會遺失 SSH 金鑰,因此它也是一個很好的後備方法。
  • 三、選擇使用瀏覽器登入 僅當您手邊沒有 API 金鑰時! 確實,當你已經擁有一把鑰匙時,再擁有另一把鑰匙是沒有意義的。

完成設定後,讓我們告訴 Git CLI 相關資訊。

$ gh auth setup-git

這將進行必要的 Git CLI 配置,以防萬一您的反應突然介入並讓您使用 Git 而不是 GH。

一些基本命令

現在您已經設定了 GH,讓我以故事為基礎教您幾個基本指令。

首先,假設您想要建立對我的本機清單儲存庫的拉取請求。你想先分叉它。

$ gh repo fork windowz414/platform_manifest ! windowz414/platform_manifest 已經存在?您想克隆叉子嗎?是克隆到“platform_manifest”...遠端:枚舉物件:136,完成。遠端:計數物件:100% (136/136),完成。遠端:壓縮物件:100% (81/81),完成。遠端:總計 136 個(增量 46),重複使用 89 個(增量 12),包重用 0 接收物件:100% (136/136),30.70 KiB | 166.00 KiB/s,完成。解增量:100% (46/46),完成。更新上游 來自 github.com:windowz414/platform_manifest * [新分支] amyrom/rosie ->上游/amyrom/rosie * [新分支] aosp-11.0 ->上游/aosp-11.0 * [新分支] aosp-14.1 ->上游/aosp-14.1 * [新分支] arrow-11 -> 上游/arrow-11 * [新分支] cm-1 -> 上游/cm-1 * [新分支] dot11 -> 上游/dot11 * [新分支] ] e/os/v7.1-nougat ->upstream/e/os/v7.1-nougat * [新分支]fluid-15.1 ->upstream/fluid-15.1 *[新分支]fox_17.1 ->upstream/fox_17.1 * [新分支] hentai-rika -> 上游/hentai-rika * [新分支] ion-pie -> 上游/ion-pie * [新分支] lineage-18.1 -> 上游/lineage-18.1 * [新分支] lineage -18.1 -> 上游/lineage-18.1 * [新分支] lineage-19.0 -> 上游/lineage-19.0 * [新分支] lineage-1_teos -> 上游/lineage-1_teos * [新分支] lineage-11.0 - > 上游/lineage-11.0 * [新分支] main -> 上游/主* [新分支] mkn-mr1 -> 上游/mkn-mr1 * [新分支]vengeos-r11 -> 上游/revengeos-r11 。XNUMX * [新分支] stellar-SXNUMX ->upstream/stellar-SXNUMX * [新分支] teos-n ->upstream/teos-n * [新分支] weebprojekt-XNUMX ->upstream/weebprojekt-XNUMX ✓ 克隆分叉

然後,假設您有一個名為“wz414-labs”的獨立實驗組織,您還沒有分叉您的個人資料,並希望克隆到那裡,然後通過那裡打開拉取請求。您還想克隆“cm-14.1”分支,這樣您就不需要再次對其執行 git-checkout 。

$ gh repo fork windowz414/platform_manifest --org="wz414-labs" -- --branch="cm-14.1" ✓ 創建了 fork wz414-labs/platform_manifest ?您想克隆叉子嗎?是克隆到“platform_manifest”...遠端:枚舉物件:136,完成。遠端:計數物件:100% (136/136),完成。遠端:壓縮物件:100% (81/81),完成。遠端:總計 136 個(增量 46),重複使用 89 個(增量 12),包重用 0 接收物件:100% (136/136),30.70 KiB | 120.00 KiB/s,完成。解增量:100% (46/46),完成。更新上游 來自 github.com:windowz414/platform_manifest * [新分支] amyrom/rosie ->上游/amyrom/rosie * [新分支] aosp-11.0 ->上游/aosp-11.0 * [新分支] aosp-14.1 ->上游/aosp-14.1 * [新分支] arrow-11 -> 上游/arrow-11 * [新分支] cm-1 -> 上游/cm-1 * [新分支] dot11 -> 上游/dot11 * [新分支] ] e/os/v7.1-nougat ->upstream/e/os/v7.1-nougat * [新分支]fluid-15.1 ->upstream/fluid-15.1 *[新分支]fox_17.1 ->upstream/fox_17.1 * [新分支] hentai-rika -> 上游/hentai-rika * [新分支] ion-pie -> 上游/ion-pie * [新分支] lineage-18.1 -> 上游/lineage-18.1 * [新分支] lineage -18.1 -> 上游/lineage-18.1 * [新分支] lineage-19.0 -> 上游/lineage-19.0 * [新分支] lineage-1_teos -> 上游/lineage-1_teos * [新分支] lineage-11.0 - > 上游/lineage-11.0 * [新分支] main -> 上游/主* [新分支] mkn-mr1 -> 上游/mkn-mr1 * [新分支]vengeos-r11 -> 上游/revengeos-r11 。XNUMX * [新分支] stellar-SXNUMX ->upstream/stellar-SXNUMX * [新分支] teos-n ->upstream/teos-n * [新分支] weebprojekt-XNUMX ->upstream/weebprojekt-XNUMX ✓ 克隆分叉

你看,我沒有使用“-b cm-14.1”,而是進行了長論證。截至本文撰寫之日(16 年 2022 月 XNUMX 日),GH 有一個錯誤,即它無法正確地將短參數傳遞給 Git CLI,因此需要將其作為長參數來完成。

完成後,您會定期進入該資料夾,進行更改,提交然後推送它,並準備好執行拉取請求。為此,您只需要一個簡單的

$ gh pr create --branch="cm-14.1" 在 windowz414/platform_manifest 中建立 wz14.1-labs:cm-14.1 到 cm-414 的拉取請求?標題 teos:改為 Git-Polycule?身體?下一步是什麼?提交 https://github.com/windowz414/platform_manifest/pull/1

如果您不附加“–branch=cm-14.1”,您將創建針對“主”分支的 PR,如果處理不當,這當然會導致問題。

現在,我需要合併這個 PR,對嗎?因此,我首先克隆存儲庫,簽出分配的分支,並首先列出 PR。

# 首先克隆。 $ git clone https://github.com/windowz414/platform_manifest 複製到「platform_manifest」...遠端:枚舉物件:136,完成。遠端:計數物件:100% (136/136),完成。遠端:壓縮物件:100% (81/81),完成。遠端:總計 136 個(增量 46),重複使用 89 個(增量 12),包重用 0 接收物件:100% (136/136),30.70 KiB | 137.00 KiB/s,完成。解增量:100% (46/46),完成。 # 然後去分行結帳。 $ git checkout cm-14.1 分支 'cm-14.1' 設定為追蹤 'origin/cm-14.1'。切換到新分支 'cm-14.1' # 現在列出 PR。 $ gh pr list 在 windowz1/platform_manifest #1 teos 中顯示 414 個開放拉取請求中的 1 個:更改為 Git-Polycule wz414-labs:cm-14.1

現在我們看到有一個 PR 將遠端更改為“Git-Polycule”,讓我們看看它發生了什麼變化。

$ gh pr diff 1 diff --git a/teos.xml b/teos.xml 索引 b145fc0..3aadeb6 100644 --- a/teos.xml +++ b/teos.xml @@ -2,7 +2,7, 414@@ 

看起來很有希望!是時候合併了!

$ gh pr 合併 1 ?您想使用什麼合併方法?變基並合併?下一步是什麼?提交 ✓ 重新定位並合併拉取請求#1(teos:更改為 Git-Polycule)

現在我已經合併了它,您可以刪除您的分叉。

$ gh repo delete --confirm wz414-labs/platform_manifest ✓ 刪除儲存庫 wz414-labs/platform_manifest

您會看到直接刪除了儲存庫,沒有確認請求,因為我在那裡傳遞了“–confirm”參數。如果你不通過它,你會得到這個:

$ gh repo 刪除 windowz414/systemd 嗎?輸入 windowz414/systemd 確認刪除:

您需要輸入整個儲存庫名稱。浪費時間…

總結

簡而言之,「gh」是一個相當簡化的 Git CLI/Curl 包裝器,將簡單的 Git 操作和 GitHub API 統一在同一屋簷下。你如何利用它?你覺得它跟我一樣充滿希望嗎?期待聽到您的意見!

相關文章