GitHub CLI 教學:高效的開發工作流程
GitHub CLI 教學:高效的開發工作流程
關於本教學
本教學適合想要透過命令列提升GitHub工作效率的開發者,從基礎功能到進階工作流程都有涵蓋。
GitHub命令列工具(GitHub CLI) 是提升開發工作流程效率的絕佳工具。透過命令列介面操作GitHub,您可以更快、更有條理地管理專案,無需頻繁切換至瀏覽器界面。本教學將帶您了解GitHub CLI的主要功能和實用工作流程。
安裝與設置
要開始使用GitHub CLI,首先需要安裝它:
各平台安裝命令
macOS (使用Homebrew):
brew install gh
Windows (使用Scoop):
scoop install gh
Linux (Debian/Ubuntu):
sudo apt install gh
安裝後,您需要進行驗證:
gh auth login
基本命令介紹
GitHub CLI使用gh作為主命令,後接不同的子命令執行各種操作:
常用指令類別
| 指令 | 功能 |
| ---- | ---- |
| gh repo | 倉庫管理 |
| gh issue | 問題追蹤 |
| gh pr | 拉取請求操作 |
| gh release | 版本發布 |
| gh gist | 代碼片段管理 |
實用使用案例
讓我們看一些實際使用案例,幫助您更好地理解GitHub CLI在日常開發中的應用:
以下案例展示了GitHub CLI如何在各種場景中幫助您提高工作效率。
想要貢獻某個開源專案?GitHub CLI可以讓這個過程變得簡單:
快速參與開源專案的命令
```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問題"
</div>
這個流程讓您無需在瀏覽器和終端間切換,顯著提高效率。
### 案例2:快速查看和管理專案狀態
需要快速了解專案中的問題和拉取請求?
<div style="background:#f5f5f5;border-left:4px solid #777;color:#333;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>專案狀態查詢命令</strong><br>```bash
# 列出所有開放的PR
gh pr list
# 查看特定PR的詳細信息
gh pr view 21
# 列出分配給您的issue
gh issue list --assignee @me
# 查看特定issue的詳細信息和評論
gh issue view 13 --comments
GitHub CLI提供強大的代碼審查功能,讓團隊協作更高效!
代碼審查相關命令
```bash
檢出同事的PR到本地,進行審查
gh pr checkout 15
在終端中查看PR的差異
gh pr diff
直接在命令行中批准PR
gh pr review 15 --approve
或者提出評論和修改建議
gh pr review 15 --comment -b "請考慮優化這部分的性能"
</div>
### 案例4:自動化工作流程整合
將GitHub CLI整合到您的自動化腳本中:
<div style="background:#f5f5f5;border-left:4px solid #777;color:#333;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>自動化工作流程命令</strong><br>```bash
# 創建新版本發布
gh release create v1.0.0 --title "第一個穩定版本" --notes "修復了多個bug和性能優化"
# 監控GitHub Actions工作流程
gh run list
# 等待特定工作流程完成
gh run watch
分支保護設置
在使用GitHub CLI之前,建議先設定分支保護規則,確保工作流程的安全性:
沒有適當的分支保護設置,可能導致團隊成員意外直接推送至主分支。
這些設置將防止直接推送到主分支,確保所有變更都經過PR流程審核。
工作流程教學:從issue到PR到合併
GitHub CLI支持完整的開發工作流程,下面是一個典型範例:
步驟1:創建Issue
每個新功能或修復都從創建issue開始:
Issue創建命令
```bash
gh issue create -t "添加新功能:使用者註冊" -b "實現使用者註冊功能,包括表單和驗證"
或者使用交互模式:
```bash
gh issue create
步驟2:從Issue創建開發分支
這是GitHub CLI的強大功能之一,您可以直接從issue創建並切換到新分支:
從Issue創建分支
```bash
gh issue develop [issue編號] -c
</div>
這個命令會:
- 創建一個基於issue標題的新分支
- 將分支與issue關聯
- 自動切換到新分支
現在您可以開始編寫代碼了!
### 步驟3:提交更改並推送
完成工作後,提交您的更改:
<div style="background:#f5f5f5;border-left:4px solid #777;color:#333;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>提交與推送命令</strong><br>```bash
git add .
git commit -m "添加使用者註冊功能"
git push -u origin HEAD
使用GitHub CLI創建PR:
PR創建命令
```bash
gh pr create
系統會提示您輸入標題(默認使用提交信息)和描述。您也可以使用`-d`標記創建草稿PR:
```bash
gh pr create -d
步驟5:將草稿PR標記為準備就緒
當您的工作完成並準備好審核時:
將PR標記為準備就緒
```bash
gh pr ready
</div>
### 步驟6:審核和合併PR
查看PR的狀態:
<div style="background:#f5f5f5;border-left:4px solid #777;color:#333;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>PR審核與合併命令</strong><br>```bash
gh pr view
合併PR(如果您有權限):
gh pr merge
GitHub工作流程視覺化指南
以下使用Mermaid圖表視覺化展示GitHub完整工作流程,從初次提交到分支開發、合併與發布:
初始化倉庫與首次提交
flowchart TB
A[開始專案] --> B["初始化本地倉庫
git init"]
B --> C["建立必要檔案
echo '# 專案名稱' > README.md
echo '初始版本' > CHANGELOG.md"]
C --> D["添加檔案
git add README.md CHANGELOG.md .gitignore"]
D --> E["首次提交
git commit -m '初始提交: 建立專案結構'"]
E --> F["創建遠端倉庫
gh repo create my-project --public --source=."]
F --> G["推送至遠端
git push -u origin main"]
style A fill:#f9f,stroke:#333,stroke-width:2px
style G fill:#bbf,stroke:#333,stroke-width:2px</div>
查看詳細實現代碼
```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
</div>
**建議選項與最佳實踐:**
<div style="background:#d9edf7;border-left:4px solid #31708f;color:#31708f;padding:12px 16px;margin:12px 0;border-radius:4px">
- 使用有意義的倉庫名稱和描述,方便他人理解專案目的
- 建立 `.gitignore` 文件排除不需要版本控制的檔案
- 添加 `LICENSE` 和詳細的 `README.md` 說明專案用途和使用方法
</div>
使用結構化格式獲取倉庫資訊:
```bash
gh repo view --json name,description,visibility,defaultBranchRef
創建私有倉庫時添加協作者:
gh repo create --private my-project
gh repo add-collaborator my-project username --permission admin
開發分支與Bug修復流程
flowchart TB
A["主分支
git checkout main
git pull"] --> B["建立問題
gh issue create -t '修復登入問題'"]
B --> C["創建分支
gh issue develop issue編號 -c"]
C --> D["修改代碼
(編輯相關檔案)"]
D --> E["提交修復
git add .
git commit -m '修復登入問題'"]
E --> F["推送分支
git push -u origin HEAD"]
F --> G["創建PR
gh pr create --title '修復登入問題'"]
G --> H{"需要修改?"}
H -- 是 --> I["審查反饋
gh pr view --comments"]
I --> J["修改代碼
(根據反饋修改)"]
J --> K["提交修改
git commit -am '根據審查調整'
git push"]
K --> H
H -- 否 --> L["合併PR
gh pr merge --squash"]
L --> M["清理分支
git checkout main
git pull
git branch -d bugfix-branch"]
style A fill:#bbf,stroke:#333,stroke-width:2px
style M fill:#bbf,stroke:#333,stroke-width:2px</div>
使用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 # 查看特定PR
git push origin --delete # 手動刪除遠端分支
</div>
**重要提示與最佳實踐:**
- 使用有意義的分支名稱,推薦格式: `<類型>/<描述>`,例如 `bugfix/safari-login`
- 提交詳細的PR描述,使用模板:
<div style="background:#f5f5f5;border-left:4px solid #777;color:#333;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>PR描述模板</strong><br>```markdown
## 問題描述
簡要說明問題
## 解決方案
如何解決
## 測試方法
如何驗證修復
Fixes #1
版本發布流程
flowchart TB
A["同步最新代碼
git checkout main
git pull"] --> B["確保測試通過
npm test"]
B --> C["更新版本號
npm version patch
或手動更新package.json"]
C --> D["更新變更日誌
更新CHANGELOG.md"]
D --> E["提交版本更新
git add .
git commit -m '版本提升至 v1.0.0'
git push"]
E --> F["創建標籤
git tag -a v1.0.0 -m '穩定版發布'
git push origin v1.0.0"]
F --> G["發布版本
gh release create v1.0.0
--title 'v1.0.0 穩定版發布'
--notes-file CHANGELOG.md"]
G --> H["添加發布資產
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</div>
使用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 # 在瀏覽器中查看發布頁面
</div>
**版本發布最佳實踐建議:**
<div style="background:#dff0d8;border-left:4px solid #3c763d;color:#3c763d;padding:12px 16px;margin:12px 0;border-radius:4px">
- 使用[語義化版本控制](https://semver.org/lang/zh-TW/)規範(MAJOR.MINOR.PATCH)
- MAJOR: 不兼容的API變更
- MINOR: 向下兼容的功能新增
- PATCH: 向下兼容的問題修復
- 維護詳細的CHANGELOG文件,記錄每個版本的更改
- 發布前進行完整測試,確保所有CI流程通過
</div>
為發布添加詳細文檔和使用示例:
- 使用預發布版本進行測試:
```bash
gh release create v1.0.0-beta.1 --prerelease --title "v1.0.0 Beta 1"
- 設置自動化發布流程,利用GitHub Actions:
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
</div>
這個視覺化工作流程展示了使用GitHub CLI管理整個軟體開發生命週期的方式,從初始化專案到功能開發、bug修復,再到版本發布。通過遵循這些步驟和使用GitHub CLI,您可以顯著提高團隊協作效率和代碼質量。
## 進階技巧:draft PR和PR驅動開發
### 使用草稿PR進行迭代開發
草稿PR非常適合用於長期持續開發的任務:
<div style="background:#d9edf7;border-left:4px solid #31708f;color:#31708f;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>草稿PR工作流程</strong><br>1. 創建草稿PR以早期獲取反饋
2. 持續在分支上工作並推送更新
3. 團隊成員可以實時跟踪和評論您的工作
4. 當準備就緒時,將PR標記為可審核
</div>
這種方法的優點:
- 保持工作透明度
- 提早發現潛在問題
- 避免大型PR帶來的審核困難
- 為長期工作保留開發記錄
### 多分支平行開發
當您同時處理多個功能時:
<div style="background:#d9edf7;border-left:4px solid #31708f;color:#31708f;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>平行開發策略</strong><br>1. 為每個功能創建單獨的issue
2. 從每個issue創建開發分支
3. 使用草稿PR跟踪每個功能的開發進度
4. 在不同分支間切換:`gh pr checkout [PR編號]`
</div>
當某個功能開發完成時,將其PR標記為可審核並合併,而不影響其他正在進行的工作。
## 總結與建議
GitHub CLI是一個強大的工具,能夠顯著提升您的開發工作流程效率:
<div style="background:#dff0d8;border-left:4px solid #3c763d;color:#3c763d;padding:12px 16px;margin:12px 0;border-radius:4px">
- 使用issue追踪任務和功能開發
- 遵循分支保護和PR流程,維護代碼質量
- 利用草稿PR進行透明的迭代開發
- 熟練使用GitHub CLI命令,減少上下文切換
</div>
最佳實踐:
- 為每個任務創建issue
- 保持PR規模小且集中
- 定期提交和推送更改
- 使用有意義的提交信息和PR描述
- 鼓勵團隊成員進行早期和持續的代碼審核
通過熟練運用GitHub CLI和這些工作流程,您可以建立更有組織、更高效的開發過程,無論是個人專案還是團隊協作。
## 常用命令參考
<div style="background:#f5f5f5;border-left:4px solid #777;color:#333;padding:12px 16px;margin:12px 0;border-radius:4px">
<strong>常用命令速查表</strong><br>```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 # 創建代碼片段
希望本教學能幫助您提升GitHub工作流程效率!
本文最初發布於 HackMD @BASHCAT。
留言
張貼留言