The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

GitHub CLI 常用命令筆記

最近 GitHub CLI 用的很開心,因為用了 GitHub Copilot Coding Agent, OpenAI Codex CLI, Gemini CLIClaude Code 之後,有越來越多專案都開始移往 GitHub 平台,而我在寫 GitHub Actions workflows 的時候,也非常愛用 GitHub CLI 幫我操作 GitHub Issues 與 PRs,超級方便。這篇文章我打算記錄一些比較常用的參數與命令,以備日後快速查找參考。

安裝 GitHub CLI

GitHub CLI 支援 macOS, Linux, BSD 與 Windows 平台,安裝方式參見: https://github.com/cli/cli#installation

以下是 Windows 的安裝方法:

  • WinGet

    # 安裝
    winget install --id GitHub.cli
    
    # 升級
    winget upgrade --id GitHub.cli
    
  • scoop

    # 安裝
    scoop install gh
    
    # 升級
    scoop update gh
    
  • Chocolatey

    # 安裝
    choco install gh
    
    # 升級
    choco upgrade gh
    

初始化登入

GitHub CLI 有兩種認證方式:

  1. 使用 gh auth login 登入,用你的 GitHub 身份進行操作

    這是最常見的使用方式,可以用你的 GitHub 身份執行完整的 GitHub CLI 功能,包含 GitHub Copilot CLI

  2. 直接讀取 GH_TOKENGITHUB_TOKEN 環境變數 (免走登入程序)

    你要事先建立 GitHub PAT (personal access tokens) 並將其設定到 GH_TOKENGITHUB_TOKEN 環境變數中 (二選一即可)。

    💡 注意: 透過環境變數認證是無法使用 GitHub Copilot CLI 的,但是可以在建立 PAT 金鑰時設定較為精細的權限,對於自動化任務來說,是比較適合的授權方式。

    詳見: Managing your personal access tokens

設定好之後,可以用以下命令查看登入狀態:

gh auth status

設定慣用編輯器

由於我們可能會需要在命令列直接建立 Issue,所以偶爾會需要編輯器來編寫文字。

  • 設定 Visual Studio Code 做為預設的文字編輯器

    gh config set editor "code --wait"
    
  • 設定 vim 做為預設的文字編輯器

    gh config set editor "vim"
    

你可以用以下命令測試開啟編輯器編輯內容:

gh issue create

或是透過以下命令在 Feature Branch 建立 PR 時,也需要文字編輯器撰寫一些內容:

gh pr create --draft --assignee @me

常見命令整理

💡 提醒: 大部分的 gh 命令都只要在 git 工作目錄執行,就會自動從 git remote 找到 GitHub Repo 的網址。

  • Repos

    查看目前 Repo 的相關資訊

    gh repo view
    

    查看任意 Repo 的相關資訊

    gh repo view doggy8088/TampermonkeyUserscripts
    

    直接 Fork 某個 Repo 並直接將這份 Fork 過的 Repo 給 Clone 到本地

    gh repo fork cli/cli
    

    直接將目前已經 Clone 的 Repo 建立一個 Fork repo 並將 origin 更名為 upstream,然後 origin 會換成 forked remote

    gh repo fork
    
  • Clone

    # Method 1
    gh repo clone cli/cli
    
    # Method 2
    gh repo clone https://github.com/cli/cli
    

    Method 2 就是把 git 換成 gh repo 而已,但可以簡寫 cli/cli

  • Checkout / PR

    自動取出 PR #12 的分支內容

    gh pr checkout 12
    

    也可以直接輸入網址來取出 PR 的分支

    gh pr checkout https://github.com/doggy8088/duotify-form-autofill/pull/6
    

    顯示目前 PR 的狀態

    gh pr status
    
  • Issues / PRs

    基本上 Issues 與 PRs 用法大多相同,許多命令 gh issue 換成 gh pr 就可以用,不過 PR 會綁定一個分支,通常要 gh pr checkout NN 之後才能查看狀態。

    快速列出跟自己有關的 Issues

    gh issue status
    

    列出 Issues

    # 列出所有 Open 的 Issues (預設只會傳回 30 筆)
    gh issue list
    # 列出所有 Closed 的 Issues
    gh issue list -s closed
    # 列出所有 Issues
    gh issue list -s all
    # 列出我建立的 Issues
    gh issue list --author '@me'
    # 列出我建立的 Issues
    gh issue list --assignee 'user'
    # 列出所有 kind/bug 標籤的 Issues 且要回傳最多 100 筆
    gh issue list -l 'kind/bug' -L 100
    

    查看單一個 Issue 的明細

    # 查看 Issue 主要內容
    gh pr view 21
    # 查看 Issue 主要內容並列出所有留言
    gh pr view 21 --comments
    # 直接開啟瀏覽器查看 Issue 內容
    gh pr view 21 --web
    

    建立 Issue

    # 互動式建立 Issue
    gh issue create
    
    # 透過瀏覽器建立 Issue
    gh issue create --web
    
    # 非互動方式建立 Issue
    gh issue create --title "Issue title" --body "Issue body"
    

    替 Issue 加上表情符號 (需透過 gh api 呼叫)

    # 直接在某個 Issue 的主文 `+1` 按讚
    gh api -X POST /repos/doggy8088/plaud-web-uploader/issues/43/reactions -f content='+1'
    
    # 取得某個 Issue 的主文的所有表情符號清單
    gh api -X GET /repos/doggy8088/plaud-web-uploader/issues/43/reactions
    
    # 刪除表情符號(Reaction),這裡 209967036 是當初按讚時的 Reaction ID
    gh api -X DELETE /repos/doggy8088/plaud-web-uploader/issues/43/reactions/209967036
    

    詳細參考: REST API endpoints for reactions

  • 設定 gh 的 alias 命令

    假設你經常需要列出自己的工作

    # 定義名為 mywork 的別名
    gh alias set my 'issue list --assignee @me'
    
    # 未來直接執行 gh my 就等於 gh issue list --assignee @me
    gh my
    

    假設你經常需要列出提到自己的 Issues

    # 你可以定義更有語意的 alias 別名
    gh alias set 'issue mine' 'issue list --mention @me'
    
    # 未來直接執行 gh issue mine 就等於 gh issue list --mention @me
    gh issue mine
    

    假設你經常需要列出標籤為 bugs 的 Issues

    # 定義名為 bugs 的別名
    gh alias set bugs 'issue list --label=kind/bug'
    # 定義名為 bugs 的別名並直接覆蓋現有的別名
    gh alias set bugs 'issue list --label=kind/bug' --clobber
    
    # 未來直接執行 gh bugs 就等於 gh issue list --label=kind/bug
    gh bugs
    

    列出所有的 gh aliases

    gh alias list
    

GitHub CLI 的擴充功能

  1. GitHub Copilot in the CLI

    # 一定要用 GitHub CLI OAuth 登入
    gh auth login --web
    
    # 安裝或升級 GitHub Copilot CLI
    gh extension install github/gh-copilot --force
    
    # 使用 GitHub Copilot 建議一個命令
    gh copilot suggest "Install and configure git lfs"
    
    # 使用 GitHub Copilot 解釋一個命令 (僅限英文回應)
    gh copilot explain 'git lfs migrate import --everything --include="*.gz,*.png,*.jar"'
    
  2. gh-dash

    用 TUI 視覺化的方式呈現 Issues 與 PRs,非常美觀,少大很多命令!👍

    gh extension install dlvhdr/gh-dash
    
    gh dash
    
  3. GitHub Actions Importer

    GitHub Actions Importer 可協助您規劃、測試及自動化從 Azure DevOps、Bamboo、Bitbucket、CircleCI、GitLab、Jenkins、Travis CI 平台遷移至 GitHub Actions!👍

    GitHub Actions Importer 以 Docker 容器形式散佈,並且此擴充功能可與官方 GitHub CLI 互動以操作 Docker 容器。

    # 安裝
    gh extension install github/gh-actions-importer
    
    # 更新
    gh actions-importer update
    
    # 設定
    gh actions-importer configure
    
  4. GitHub Enterprise Importer CLI

    GitHub Enterprise Importer (GEI,前身為 Octoshift) 是一個高度可自訂的 API 優先遷移方案,旨在協助您將企業遷移至 GitHub Enterprise Cloud。GEI-CLI 將 GEI API 包裝成跨平台的命令列應用程式,以簡化您的遷移體驗自訂。

    # 安裝 Azure DevOps to GitHub 擴充功能
    gh extension install github/gh-ado2gh
    
    # 查看用法
    gh ado2gh --help
    
    # 詳見 Azure DevOps to GitHub Usage
    # https://github.com/github/gh-gei?tab=readme-ov-file#azure-devops-to-github-usage
    
  5. GitHub Skyline

    可以自動產生你在 GitHub 貢獻圖,會自動輸出 3D 列印專用的 STL 檔案。

    # 安裝
    gh extension install github/gh-skyline
    
    # 產生
    gh skyline
    gh skyline --output my-skyline.stl
    gh skyline --full
    gh skyline --year 2024
    gh skyline --year 2024 --user doggy8088
    gh skyline --year 2014-2024 --user doggy8088
    

相關連結

留言評論