Efficacité
Gérez GitHub sans quitter le terminal — PRs, issues, workflows.
Mise à jour :
Vous êtes en train de coder, vous voulez créer une PR, vérifier le statut d’un workflow ou lire les commentaires d’une issue. Traditionnellement, vous devez quitter votre terminal, ouvrir le navigateur, naviguer jusqu’au bon endroit…
GitHub CLI (gh) vous permet de faire tout cela sans quitter le
terminal. Créer des PRs, déclencher des workflows, gérer les issues — tout
est accessible en ligne de commande.
GitHub CLI est l’outil officiel de GitHub pour interagir avec la plateforme depuis le terminal. Il ne remplace pas Git (qui gère le code), mais complète votre workflow avec les fonctionnalités spécifiques à GitHub :
| Tâche | Sans gh | Avec gh |
|---|---|---|
| Créer une PR | Navigateur → New PR → Remplir formulaire | gh pr create |
| Voir le statut CI | Onglet Actions → Cliquer sur le run | gh run list |
| Merger une PR | Navigateur → Bouton Merge | gh pr merge |
| Déclencher un workflow | Actions → Run workflow → Cliquer | gh workflow run |
Avantages clés :
Avec Homebrew :
brew install ghDebian/Ubuntu :
# Ajouter le repository GitHubcurl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpgsudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpgecho "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
# Installersudo apt updatesudo apt install ghFedora/RHEL :
sudo dnf install ghAvec Homebrew :
brew install ghAvec winget :
winget install GitHub.cliAvec Chocolatey :
choco install ghAvec Scoop :
scoop install ghVérification de l’installation :
gh --versionLa commande doit afficher la version installée (ex: gh version 2.67.0).
Avant d’utiliser gh, vous devez vous authentifier auprès de GitHub :
gh auth loginUn assistant interactif vous guide :
Où voulez-vous vous authentifier ?
Quel protocole préférez-vous pour Git ?
Comment voulez-vous vous authentifier ?
Si vous choisissez “navigateur”, gh ouvre une page où vous autorisez l’accès.
Vérification de l’authentification :
gh auth statusExemple de sortie :
github.com ✓ Logged in to github.com account your-username ✓ Git operations configured with https protocol ✓ Token: gho_************************************ ✓ Token scopes: gist, read:org, repo, workflowPour les scripts ou la CI, utilisez un token :
# Via variable d'environnementexport GH_TOKEN=ghp_xxxxxxxxxxxxgh api user
# Ou en passant le tokengh auth login --with-token < token.txtDans GitHub Actions, le GITHUB_TOKEN est automatiquement disponible :
- name: Liste des PRs run: gh pr list env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}# Interactif : gh pose des questionsgh pr create
# En une lignegh pr create --title "Add feature X" --body "Description de la PR"
# Avec labels et reviewersgh pr create --title "Fix bug" --label "bug" --reviewer "alice,bob"
# PR en draftgh pr create --draft --title "WIP: New feature"# PRs ouvertesgh pr list
# PRs avec filtresgh pr list --state all # Toutes (open, closed, merged)gh pr list --author "@me" # Mes PRsgh pr list --label "bug" # Par labelgh pr list --search "is:open draft:false" # Recherche avancée# Afficher les détailsgh pr view 42
# Dans le navigateurgh pr view 42 --web
# Au format JSON (pour scripts)gh pr view 42 --json title,state,reviewsPratique pour tester le code d’une PR localement :
gh pr checkout 42Cela crée une branche locale avec le code de la PR.
# Merge standardgh pr merge 42
# Squash mergegh pr merge 42 --squash
# Rebase mergegh pr merge 42 --rebase
# Supprimer la branche après mergegh pr merge 42 --delete-branch# Approuvergh pr review 42 --approve
# Demander des changementsgh pr review 42 --request-changes --body "Il faudrait corriger X"
# Commenter sans approuvergh pr review 42 --comment --body "Bonne approche !"gh est particulièrement utile pour gérer les workflows GitHub Actions.
# Voir les workflows du repogh workflow list
# Exemple de sortie :# NAME STATE ID# CI active 12345678# Deploy active 12345679# Security Scan active 12345680# Déclencher un workflow manuel (workflow_dispatch)gh workflow run ci.yml
# Avec des inputsgh workflow run deploy.yml -f environment=staging -f version=1.2.3
# Sur une branche spécifiquegh workflow run ci.yml --ref feature-branch# Derniers runsgh run list
# Runs d'un workflow spécifiquegh run list --workflow ci.yml
# Runs en coursgh run list --status in_progress
# Runs échouésgh run list --status failure# Voir un run spécifiquegh run view 12345678
# Voir les logsgh run view 12345678 --log
# Logs d'un job spécifiquegh run view 12345678 --log --job 98765432
# Suivre en temps réelgh run watch 12345678# Re-run completgh run rerun 12345678
# Re-run uniquement les jobs échouésgh run rerun 12345678 --failed
# Re-run avec debug activégh run rerun 12345678 --debuggh run cancel 12345678# Lister les artifacts d'un rungh run view 12345678 --json artifacts
# Télécharger tous les artifactsgh run download 12345678
# Télécharger un artifact spécifiquegh run download 12345678 -n build-output# Interactifgh issue create
# En une lignegh issue create --title "Bug: crash on login" --body "Description..."
# Avec labels et assigneegh issue create --title "Feature request" --label "enhancement" --assignee "@me"# Issues ouvertesgh issue list
# Mes issuesgh issue list --assignee "@me"
# Par labelgh issue list --label "bug" --label "priority:high"
# Recherchegh issue list --search "is:open label:bug created:>2024-01-01"# Voirgh issue view 123
# Commentergh issue comment 123 --body "Je prends ce bug !"
# Fermergh issue close 123
# Rouvrirgh issue reopen 123
# Éditergh issue edit 123 --add-label "in-progress" --add-assignee "alice"# Interactifgh repo create
# Nouveau repo publicgh repo create my-project --public
# Nouveau repo privé avec descriptiongh repo create my-project --private --description "Mon super projet"
# Créer depuis le répertoire courantgh repo create --source=. --public --push# Clone standardgh repo clone owner/repo
# Clone dans un dossier spécifiquegh repo clone owner/repo ./my-folder# Fork dans votre comptegh repo fork owner/repo
# Fork et clonegh repo fork owner/repo --clone# Infos sur le repo courantgh repo view
# Infos sur un autre repogh repo view owner/repo
# Dans le navigateurgh repo view --webgh peut appeler n’importe quel endpoint de l’API GitHub :
# Votre profilgh api user
# Un repo spécifiquegh api repos/owner/repo
# Les PRs d'un repogh api repos/owner/repo/pulls# Noms des branchesgh api repos/owner/repo/branches --jq '.[].name'
# Titre et état des PRsgh api repos/owner/repo/pulls --jq '.[] | {title, state}'Voir le guide jq pour le filtrage JSON.
# Créer un commentaire sur une issuegh api repos/owner/repo/issues/123/comments \ -f body="Commentaire via API"
# Créer un labelgh api repos/owner/repo/labels \ -f name="priority:critical" \ -f color="FF0000"# Toutes les pages de résultatsgh api repos/owner/repo/issues --paginate --jq '.[].title'gh est préinstallé sur les runners GitHub. Utilisez-le pour des tâches automatisées.
name: Comment on PR
on: pull_request: types: [opened]
permissions: pull-requests: write
jobs: comment: runs-on: ubuntu-latest steps: - name: Add welcome comment run: | gh pr comment ${{ github.event.pull_request.number }} \ --body "Merci pour cette PR ! L'équipe va la reviewer sous 48h." env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}name: Release
on: push: tags: ['v*']
permissions: contents: write
jobs: release: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Create GitHub Release run: | gh release create ${{ github.ref_name }} \ --title "Release ${{ github.ref_name }}" \ --generate-notes env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}- name: Trigger deploy workflow run: | gh workflow run deploy.yml \ -f environment=production \ -f version=${{ github.sha }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}- name: Wait for checks to pass run: | gh run watch $(gh run list --workflow ci.yml --json databaseId --jq '.[0].databaseId') env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}gh supporte des extensions pour étendre ses fonctionnalités :
gh extension browse# Extension pour les copilotesgh extension install github/gh-copilot
# Extension pour les dashboardsgh extension install dlvhdr/gh-dash| Extension | Description |
|---|---|
gh-dash | Dashboard interactif pour PRs et issues |
gh-copilot | Assistant IA dans le terminal |
gh-poi | Nettoyer les branches mergées |
gh-changelog | Générer des changelogs |
La configuration est stockée dans ~/.config/gh/config.yml :
git_protocol: httpseditor: vimprompt: enabledpager: lessaliases: co: pr checkout prl: pr list prv: pr viewCréez des raccourcis pour les commandes fréquentes :
# Créer un aliasgh alias set prl 'pr list'gh alias set co 'pr checkout'
# Alias avec argumentsgh alias set prw 'pr view --web'
# Utiliser l'aliasgh prlgh co 42gh config set editor "code --wait"Symptôme : gh ne peut pas effectuer une action.
Solutions :
# Vérifier les scopes du tokengh auth status
# Se réauthentifier avec plus de permissionsgh auth refresh -s workflow,repo,admin:orgSymptôme : gh demande une authentification.
Solution :
gh auth login# Configurer le proxyexport HTTPS_PROXY=http://proxy.example.com:8080gh auth loginEfficacité
Gérez GitHub sans quitter le terminal — PRs, issues, workflows.
Scriptable
Automatisez avec des scripts shell ou dans vos workflows CI.
API complète
Accédez à toute l’API GitHub avec gh api.
Extensible
Ajoutez des extensions pour des fonctionnalités avancées.
Points clés :
gh auth login pour vous authentifier (une seule fois)gh pr pour tout ce qui concerne les Pull Requestsgh run et gh workflow pour GitHub Actionsgh api pour accéder à n’importe quel endpoint