--- lang: zh-tw tags: git, GitHub, CLI, 命令列介面, 版本控制 description: 這篇教學介紹如何使用GitHub CLI工具提高開發效率,包含從安裝到高級工作流程的詳細說明和視覺化流程圖。 --- # GitHub CLI 教學:高效的開發工作流程 [TOC] :::info 關於本教學 本教學適合想要透過命令列提升GitHub工作效率的開發者,從基礎功能到進階工作流程都有涵蓋。 ::: ## 引言 **GitHub命令列工具(GitHub CLI)** 是提升開發工作流程效率的絕佳工具。透過命令列介面操作GitHub,您可以更快、更有條理地管理專案,無需頻繁切換至瀏覽器界面。本教學將帶您了解GitHub CLI的主要功能和實用工作流程。 ## 安裝與設置 要開始使用GitHub CLI,首先需要安裝它: :::spoiler 各平台安裝命令 **macOS (使用Homebrew)**: ```bash brew install gh ``` **Windows (使用Scoop)**: ```bash scoop install gh ``` **Linux (Debian/Ubuntu)**: ```bash sudo apt install gh ``` 安裝後,您需要進行驗證: ```bash gh auth login ``` ::: 遵照螢幕上的指示,選擇通過瀏覽器或令牌(token)進行身份驗證。 ## 基本命令介紹 GitHub CLI使用`gh`作為主命令,後接不同的子命令執行各種操作: :::spoiler 常用指令類別 | 指令 | 功能 | | ---- | ---- | | `gh repo` | 倉庫管理 | | `gh issue` | 問題追蹤 | | `gh pr` | 拉取請求操作 | | `gh release` | 版本發布 | | `gh gist` | 代碼片段管理 | ::: 每個命令都有自己的子命令和選項,可以通過`gh help [command]`獲取幫助。 ## 實用使用案例 讓我們看一些實際使用案例,幫助您更好地理解GitHub CLI在日常開發中的應用: :::info 以下案例展示了GitHub CLI如何在各種場景中幫助您提高工作效率。 ::: ### 案例1:快速複製並參與開源專案 想要貢獻某個開源專案?GitHub CLI可以讓這個過程變得簡單: :::spoiler 快速參與開源專案的命令 ```bash # 複製倉庫並自動在您的帳號創建fork gh repo fork cli/cli # 自動為您設置遠端倉庫,無需手動配置 # 如果只想創建fork但不clone到本地 gh repo fork cli/cli --clone=false # 創建分支並開始工作 git checkout -b feature-branch # 完成工作後,直接從命令行提交PR gh pr create --title "實現新功能" --body "解決了#123問題" ``` ::: 這個流程讓您無需在瀏覽器和終端間切換,顯著提高效率。 ### 案例2:快速查看和管理專案狀態 需要快速了解專案中的問題和拉取請求? :::spoiler 專案狀態查詢命令 ```bash # 列出所有開放的PR gh pr list # 查看特定PR的詳細信息 gh pr view 21 # 列出分配給您的issue gh issue list --assignee @me # 查看特定issue的詳細信息和評論 gh issue view 13 --comments ``` ::: ### 案例3:團隊協作和代碼審查 :::success GitHub CLI提供強大的代碼審查功能,讓團隊協作更高效! ::: :::spoiler 代碼審查相關命令 ```bash # 檢出同事的PR到本地,進行審查 gh pr checkout 15 # 在終端中查看PR的差異 gh pr diff # 直接在命令行中批准PR gh pr review 15 --approve # 或者提出評論和修改建議 gh pr review 15 --comment -b "請考慮優化這部分的性能" ``` ::: ### 案例4:自動化工作流程整合 將GitHub CLI整合到您的自動化腳本中: :::spoiler 自動化工作流程命令 ```bash # 創建新版本發布 gh release create v1.0.0 --title "第一個穩定版本" --notes "修復了多個bug和性能優化" # 監控GitHub Actions工作流程 gh run list # 等待特定工作流程完成 gh run watch ``` ::: 這些使用案例展示了GitHub CLI如何在各種場景中幫助您提高工作效率。 ## 分支保護設置 在使用GitHub CLI之前,建議先設定分支保護規則,確保工作流程的安全性: :::warning 沒有適當的分支保護設置,可能導致團隊成員意外直接推送至主分支。 ::: 1. 在GitHub網站上導航至您的倉庫 2. 點擊「Settings」→「Branches」 3. 點擊「Add rule」為主分支(通常是`main`)添加保護規則 4. 建議的設置: - 勾選「Require a pull request before merging」 - 勾選「Require approvals」(團隊協作時) - 勾選「Require status checks to pass before merging」 - 勾選「Do not allow bypassing the above settings」 這些設置將防止直接推送到主分支,確保所有變更都經過PR流程審核。 ## 工作流程教學:從issue到PR到合併 GitHub CLI支持完整的開發工作流程,下面是一個典型範例: ### 步驟1:創建Issue 每個新功能或修復都從創建issue開始: :::spoiler Issue創建命令 ```bash gh issue create -t "添加新功能:使用者註冊" -b "實現使用者註冊功能,包括表單和驗證" ``` 或者使用交互模式: ```bash gh issue create ``` ::: 系統會提示您輸入標題、描述和其他詳細信息。 ### 步驟2:從Issue創建開發分支 這是GitHub CLI的強大功能之一,您可以直接從issue創建並切換到新分支: :::spoiler 從Issue創建分支 ```bash gh issue develop [issue編號] -c ``` ::: 這個命令會: - 創建一個基於issue標題的新分支 - 將分支與issue關聯 - 自動切換到新分支 現在您可以開始編寫代碼了! ### 步驟3:提交更改並推送 完成工作後,提交您的更改: :::spoiler 提交與推送命令 ```bash git add . git commit -m "添加使用者註冊功能" git push -u origin HEAD ``` ::: ### 步驟4:創建PR 使用GitHub CLI創建PR: :::spoiler PR創建命令 ```bash gh pr create ``` 系統會提示您輸入標題(默認使用提交信息)和描述。您也可以使用`-d`標記創建草稿PR: ```bash gh pr create -d ``` ::: 草稿PR表示工作仍在進行中,尚未準備好審核。 ### 步驟5:將草稿PR標記為準備就緒 當您的工作完成並準備好審核時: :::spoiler 將PR標記為準備就緒 ```bash gh pr ready ``` ::: ### 步驟6:審核和合併PR 查看PR的狀態: :::spoiler PR審核與合併命令 ```bash gh pr view ``` 合併PR(如果您有權限): ```bash gh pr merge ``` ::: 您可以選擇合併方式(標準合併、壓縮合併或變基合併)。 ## GitHub工作流程視覺化指南 以下使用Mermaid圖表視覺化展示GitHub完整工作流程,從初次提交到分支開發、合併與發布: ### 初始化倉庫與首次提交 ```mermaid flowchart TB A[開始專案] --> B["初始化本地倉庫<br>git init"] B --> C["建立必要檔案<br>echo '# 專案名稱' > README.md<br>echo '初始版本' > CHANGELOG.md"] C --> D["添加檔案<br>git add README.md CHANGELOG.md .gitignore"] D --> E["首次提交<br>git commit -m '初始提交: 建立專案結構'"] E --> F["創建遠端倉庫<br>gh repo create my-project --public --source=."] F --> G["推送至遠端<br>git push -u origin main"] style A fill:#f9f,stroke:#333,stroke-width:2px style G fill:#bbf,stroke:#333,stroke-width:2px ``` :::spoiler 查看詳細實現代碼 ```bash # 初始化本地倉庫 git init # 建立忽略檔案 (最佳實踐) cat > .gitignore << 'EOF' # 依語言自動生成適合的 .gitignore # 可訪問 https://gitignore.io/ 獲取適合您專案的內容 node_modules/ *.log .DS_Store .env EOF # 添加文件 echo "# 我的專案" > README.md echo "初始版本" > CHANGELOG.md git add README.md CHANGELOG.md .gitignore # 首次提交 git commit -m "初始提交: 建立專案結構" # 使用GitHub CLI創建遠端倉庫 (推薦選項) gh repo create my-project \ --public \ # 公開倉庫,使用 --private 創建私有倉庫 --description "我的新專案描述" \ # 添加描述 --homepage "https://myproject.com" \ # 可選的主頁 --source=. \ # 使用當前目錄作為源 --remote=origin \ # 設置遠端名稱 --gitignore Node # 自動添加語言特定的.gitignore (可選) # 如果需要添加授權文件 gh repo edit --add-license mit # 添加MIT授權 # 推送至遠端 git push -u origin main # 或 git push -u origin master 若使用舊版Git # 驗證倉庫創建成功 gh repo view --web # 在瀏覽器中打開倉庫 # 常見問題解決: # 如果遇到分支名稱問題 (master 與 main) git branch -M main # 將當前分支重命名為main ``` ::: **建議選項與最佳實踐:** :::info - 使用有意義的倉庫名稱和描述,方便他人理解專案目的 - 建立 `.gitignore` 文件排除不需要版本控制的檔案 - 添加 `LICENSE` 和詳細的 `README.md` 說明專案用途和使用方法 ::: 使用結構化格式獲取倉庫資訊: ```bash gh repo view --json name,description,visibility,defaultBranchRef ``` 創建私有倉庫時添加協作者: ```bash gh repo create --private my-project gh repo add-collaborator my-project username --permission admin ``` ### 開發分支與Bug修復流程 ```mermaid flowchart TB A["主分支<br>git checkout main<br>git pull"] --> B["建立問題<br>gh issue create -t '修復登入問題'"] B --> C["創建分支<br>gh issue develop issue編號 -c"] C --> D["修改代碼<br>(編輯相關檔案)"] D --> E["提交修復<br>git add .<br>git commit -m '修復登入問題'"] E --> F["推送分支<br>git push -u origin HEAD"] F --> G["創建PR<br>gh pr create --title '修復登入問題'"] G --> H{"需要修改?"} H -- 是 --> I["審查反饋<br>gh pr view --comments"] I --> J["修改代碼<br>(根據反饋修改)"] J --> K["提交修改<br>git commit -am '根據審查調整'<br>git push"] K --> H H -- 否 --> L["合併PR<br>gh pr merge --squash"] L --> M["清理分支<br>git checkout main<br>git pull<br>git branch -d bugfix-branch"] style A fill:#bbf,stroke:#333,stroke-width:2px style M fill:#bbf,stroke:#333,stroke-width:2px ``` :::spoiler 使用GitHub CLI實現完整修復流程 ```bash # 確保main分支最新 git checkout main git pull # 創建並切換到bugfix分支 gh issue create -t "修復登入問題" -b "使用者無法在Safari瀏覽器登入" gh issue develop $(gh issue list --limit 1 --json number --jq '.[0].number') -c # 設置分支追踪 (可選,方便後續操作) git branch --set-upstream-to=origin/main # 修復問題並提交 # (進行必要的代碼修改) git add . git commit -m "修復Safari登入問題" -m "詳細描述問題原因和解決方案" # 遇到衝突時如何解決 # git fetch origin main # git rebase origin/main # (解決衝突後) # git rebase --continue # 推送分支到遠端 git push -u origin HEAD # 創建PR (完整選項) gh pr create \ --title "修復Safari登入問題" \ --body "解決issue #1中描述的Safari登入問題" \ --assignee @me \ # 分配給自己 --label "bug,urgent" \ # 添加標籤 --milestone "v1.0" \ # 指定里程碑 --reviewer teammate1,teammate2 # 請求審核 # 檢查PR狀態 gh pr status # 追蹤PR評論 gh pr view --comments # 修改PR以回應審查意見 # (進行修改後) git add . git commit -m "根據審查意見調整" git push # 等待審查後合併PR (多種選項) gh pr merge \ --squash \ # 壓縮合併,或使用 --merge/--rebase --delete-branch \ # 合併後刪除分支 --body "包含所有必要修復" # 自定義合併信息 # 同步本地環境 git checkout main git pull git branch -d bugfix-login-issue # 如果忘記刪除遠端分支 # gh pr list -s merged # 列出已合併的PR # gh pr view <number> # 查看特定PR # git push origin --delete <branch-name> # 手動刪除遠端分支 ``` ::: **重要提示與最佳實踐:** - 使用有意義的分支名稱,推薦格式: `<類型>/<描述>`,例如 `bugfix/safari-login` - 提交詳細的PR描述,使用模板: :::spoiler PR描述模板 ```markdown ## 問題描述 簡要說明問題 ## 解決方案 如何解決 ## 測試方法 如何驗證修復 Fixes #1 ``` ::: - 定期從主分支同步變更,避免大型合併衝突 - 使用 `gh pr ready` 標記草稿PR為可審核狀態 - 利用GitHub CLI監控CI/CD狀態: `gh run list --workflow=ci.yml` ### 版本發布流程 ```mermaid flowchart TB A["同步最新代碼<br>git checkout main<br>git pull"] --> B["確保測試通過<br>npm test"] B --> C["更新版本號<br>npm version patch<br>或手動更新package.json"] C --> D["更新變更日誌<br>更新CHANGELOG.md"] D --> E["提交版本更新<br>git add .<br>git commit -m '版本提升至 v1.0.0'<br>git push"] E --> F["創建標籤<br>git tag -a v1.0.0 -m '穩定版發布'<br>git push origin v1.0.0"] F --> G["發布版本<br>gh release create v1.0.0<br>--title 'v1.0.0 穩定版發布'<br>--notes-file CHANGELOG.md"] G --> H["添加發布資產<br>gh release upload v1.0.0 ./dist/app.zip"] style A fill:#f9f,stroke:#333,stroke-width:2px style H fill:#bbf,stroke:#333,stroke-width:2px ``` :::spoiler 使用GitHub CLI實現發布流程 ```bash # 確保在main分支上並同步最新變更 git checkout main git pull # 建立版本標籤的不同方式 # 方式1: 使用語義化版本標籤 VERSION="1.0.0" echo "當前版本: $VERSION" # 更新版本號(示例:在package.json中) # 方式1: 手動編輯 # 方式2: 使用npm工具 (Node.js項目) npm version patch --no-git-tag-version # 小版本更新 # 方式3: 使用jq工具 (通用方法) jq '.version = "1.0.0"' package.json > tmp && mv tmp package.json # 更新CHANGELOG.md (最佳實踐) cat > CHANGELOG.md << 'EOF' # 更新日誌 ## [1.0.0] - $(date +%Y-%m-%d) ### 新功能 - 實現使用者註冊 - 新增發布通知功能 ### 修復 - 修復Safari登入問題 - 解決移動裝置顯示錯誤 EOF # 提交版本更新 git add package.json CHANGELOG.md git commit -m "版本提升至 v1.0.0" git push # 創建發布標籤 git tag -a v1.0.0 -m "v1.0.0 穩定版發布" git push origin v1.0.0 # 使用GitHub CLI創建完整發布 (多樣選項) gh release create v1.0.0 \ --title "v1.0.0 穩定版發布" \ --notes-file CHANGELOG.md \ # 使用CHANGELOG作為發布說明 --discussion-category "公告" \ # 創建討論主題 --target main \ # 指定目標分支 --verify-tag # 驗證標籤存在 # 可選: 添加發布資產 gh release upload v1.0.0 ./dist/app.zip ./docs/user-guide.pdf # 可選: 發布後的維護操作 # 更新專案依賴 # npm update --save # git add package.json package-lock.json # git commit -m "更新專案依賴" # git push # 檢視並驗證發布 gh release view v1.0.0 gh release view v1.0.0 --web # 在瀏覽器中查看發布頁面 ``` ::: **版本發布最佳實踐建議:** :::success - 使用[語義化版本控制](https://semver.org/lang/zh-TW/)規範(MAJOR.MINOR.PATCH) - MAJOR: 不兼容的API變更 - MINOR: 向下兼容的功能新增 - PATCH: 向下兼容的問題修復 - 維護詳細的CHANGELOG文件,記錄每個版本的更改 - 發布前進行完整測試,確保所有CI流程通過 ::: 為發布添加詳細文檔和使用示例: - 使用預發布版本進行測試: ```bash gh release create v1.0.0-beta.1 --prerelease --title "v1.0.0 Beta 1" ``` - 設置自動化發布流程,利用GitHub Actions: :::spoiler GitHub Actions發布工作流程 ```yaml name: Release on: push: tags: ['v*'] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npm ci - run: npm test - uses: softprops/action-gh-release@v1 ``` ::: 這個視覺化工作流程展示了使用GitHub CLI管理整個軟體開發生命週期的方式,從初始化專案到功能開發、bug修復,再到版本發布。通過遵循這些步驟和使用GitHub CLI,您可以顯著提高團隊協作效率和代碼質量。 ## 進階技巧:draft PR和PR驅動開發 ### 使用草稿PR進行迭代開發 草稿PR非常適合用於長期持續開發的任務: :::info 草稿PR工作流程 1. 創建草稿PR以早期獲取反饋 2. 持續在分支上工作並推送更新 3. 團隊成員可以實時跟踪和評論您的工作 4. 當準備就緒時,將PR標記為可審核 ::: 這種方法的優點: - 保持工作透明度 - 提早發現潛在問題 - 避免大型PR帶來的審核困難 - 為長期工作保留開發記錄 ### 多分支平行開發 當您同時處理多個功能時: :::info 平行開發策略 1. 為每個功能創建單獨的issue 2. 從每個issue創建開發分支 3. 使用草稿PR跟踪每個功能的開發進度 4. 在不同分支間切換:`gh pr checkout [PR編號]` ::: 當某個功能開發完成時,將其PR標記為可審核並合併,而不影響其他正在進行的工作。 ## 總結與建議 GitHub CLI是一個強大的工具,能夠顯著提升您的開發工作流程效率: :::success - 使用issue追踪任務和功能開發 - 遵循分支保護和PR流程,維護代碼質量 - 利用草稿PR進行透明的迭代開發 - 熟練使用GitHub CLI命令,減少上下文切換 ::: 最佳實踐: - 為每個任務創建issue - 保持PR規模小且集中 - 定期提交和推送更改 - 使用有意義的提交信息和PR描述 - 鼓勵團隊成員進行早期和持續的代碼審核 通過熟練運用GitHub CLI和這些工作流程,您可以建立更有組織、更高效的開發過程,無論是個人專案還是團隊協作。 ## 常用命令參考 :::spoiler 常用命令速查表 ```bash # 倉庫操作 gh repo create # 創建新倉庫 gh repo clone [倉庫] # 克隆倉庫 gh repo view # 查看當前倉庫信息 # Issue操作 gh issue list # 列出issue gh issue create # 創建issue gh issue view [編號] # 查看issue詳情 gh issue develop [編號] # 從issue創建開發分支 # PR操作 gh pr create # 創建PR gh pr list # 列出PR gh pr view [編號] # 查看PR詳情 gh pr checkout [編號] # 檢出PR分支 gh pr ready # 將草稿PR標記為準備就緒 gh pr merge # 合併PR # 瀏覽器整合 gh browse # 在瀏覽器中打開當前倉庫 gh pr view --web # 在瀏覽器中查看PR # 其他實用命令 gh run list # 列出工作流程運行 gh release create # 創建發布 gh gist create # 創建代碼片段 ``` ::: ## 參考資料 1. [GitHub CLI官方文檔 - Examples](https://cli.github.com/manual/examples) 2. [GitHub CLI官方快速入門](https://docs.github.com/zh/github-cli/github-cli/quickstart) 3. [GitHub CLI - 將GitHub帶入命令行](https://developer.aliyun.com/article/1627855) 4. [GitHub CLI命令行工具(gh) - 知乎專欄](https://zhuanlan.zhihu.com/p/601200139) --- 希望本教學能幫助您提升GitHub工作流程效率!