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.
Qu’est-ce que GitHub CLI ?
Section intitulée « Qu’est-ce que GitHub CLI ? »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 :
- Pull requests
- Issues
- GitHub Actions (workflows, runs)
- Releases
- Gists
- Repositories (création, fork, clone)
- Code Spaces
- Et bien plus
Pourquoi utiliser GitHub CLI ?
Section intitulée « Pourquoi utiliser GitHub CLI ? »| 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 :
- Rapidité : pas de changement de contexte
- Scriptable : automatisez avec des scripts shell
- Cohérence : même workflow sur tous vos projets
- Intégration CI : utilisable dans les workflows GitHub Actions
Installation
Section intitulée « Installation »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).
Authentification
Section intitulée « Authentification »Avant d’utiliser gh, vous devez vous authentifier auprès de GitHub :
gh auth loginUn assistant interactif vous guide :
-
Où voulez-vous vous authentifier ?
- GitHub.com (option par défaut)
- GitHub Enterprise Server
-
Quel protocole préférez-vous pour Git ?
- HTTPS (recommandé)
- SSH
-
Comment voulez-vous vous authentifier ?
- Via navigateur (le plus simple)
- Avec un token d’accès personnel
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, workflowAuthentification dans les scripts
Section intitulée « Authentification dans les scripts »Pour 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 }}Gestion des Pull Requests
Section intitulée « Gestion des Pull Requests »Créer une PR
Section intitulée « Créer une PR »# 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"Lister les PRs
Section intitulée « Lister les PRs »# 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éeVoir une PR
Section intitulée « Voir une PR »# 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,reviewsCheckout une PR
Section intitulée « Checkout une PR »Pratique pour tester le code d’une PR localement :
gh pr checkout 42Cela crée une branche locale avec le code de la PR.
Merger une PR
Section intitulée « Merger une 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-branchReview une PR
Section intitulée « Review une PR »# 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 !"GitHub Actions avec gh
Section intitulée « GitHub Actions avec gh »gh est particulièrement utile pour gérer les workflows GitHub Actions.
Lister les workflows
Section intitulée « Lister les workflows »# Voir les workflows du repogh workflow list
# Exemple de sortie :# NAME STATE ID# CI active 12345678# Deploy active 12345679# Security Scan active 12345680Déclencher un workflow
Section intitulée « Déclencher un workflow »# 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-branchVoir les runs
Section intitulée « Voir les runs »# 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 failureDétails d’un run
Section intitulée « Détails d’un run »# 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 12345678Re-exécuter un run
Section intitulée « Re-exécuter un run »# 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 --debugAnnuler un run
Section intitulée « Annuler un run »gh run cancel 12345678Télécharger les artifacts
Section intitulée « Télécharger les artifacts »# 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-outputGestion des Issues
Section intitulée « Gestion des Issues »Créer une issue
Section intitulée « Créer une issue »# 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"Lister et filtrer
Section intitulée « Lister et filtrer »# 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"Gérer une issue
Section intitulée « Gérer une issue »# 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"Gestion des repositories
Section intitulée « Gestion des repositories »Créer un repo
Section intitulée « Créer un repo »# 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 --cloneVoir un repo
Section intitulée « Voir un repo »# Infos sur le repo courantgh repo view
# Infos sur un autre repogh repo view owner/repo
# Dans le navigateurgh repo view --webL’API GitHub avec gh
Section intitulée « L’API GitHub avec gh »gh peut appeler n’importe quel endpoint de l’API GitHub :
Requêtes simples
Section intitulée « Requêtes simples »# Votre profilgh api user
# Un repo spécifiquegh api repos/owner/repo
# Les PRs d'un repogh api repos/owner/repo/pullsAvec jq pour filtrer
Section intitulée « Avec jq pour filtrer »# 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.
Requêtes POST
Section intitulée « Requêtes POST »# 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"Pagination
Section intitulée « Pagination »# Toutes les pages de résultatsgh api repos/owner/repo/issues --paginate --jq '.[].title'Utilisation dans GitHub Actions
Section intitulée « Utilisation dans GitHub Actions »gh est préinstallé sur les runners GitHub. Utilisez-le pour des tâches automatisées.
Commenter une PR automatiquement
Section intitulée « Commenter une PR automatiquement »name: Comment on PR
on: pull_request: types: [opened]
permissions: pull-requests: write
jobs: comment: runs-on: ubuntu-24.04 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 }}Créer une release automatique
Section intitulée « Créer une release automatique »name: Release
on: push: tags: ['v*']
permissions: contents: write
jobs: release: runs-on: ubuntu-24.04 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 }}Déclencher un workflow de déploiement
Section intitulée « Déclencher un workflow de déploiement »- name: Trigger deploy workflow run: | gh workflow run deploy.yml \ -f environment=production \ -f version=${{ github.sha }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}Attendre la fin d’un run
Section intitulée « Attendre la fin d’un run »- 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 }}Extensions gh
Section intitulée « Extensions gh »gh supporte des extensions pour étendre ses fonctionnalités :
Lister les extensions disponibles
Section intitulée « Lister les extensions disponibles »gh extension browseInstaller une extension
Section intitulée « Installer une extension »# Extension pour les copilotesgh extension install github/gh-copilot
# Extension pour les dashboardsgh extension install dlvhdr/gh-dashExtensions populaires
Section intitulée « Extensions populaires »| 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 |
Configuration
Section intitulée « Configuration »Fichier de configuration
Section intitulée « Fichier de configuration »La configuration est stockée dans ~/.config/gh/config.yml :
git_protocol: httpseditor: vimprompt: enabledpager: lessaliases: co: pr checkout prl: pr list prv: pr viewAlias personnalisés
Section intitulée « Alias personnalisés »Cré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 42Modifier l’éditeur par défaut
Section intitulée « Modifier l’éditeur par défaut »gh config set editor "code --wait"Dépannage
Section intitulée « Dépannage »”permission denied” ou “resource not accessible”
Section intitulée « ”permission denied” ou “resource not accessible” »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:org“not logged in”
Section intitulée « “not logged in” »Symptôme : gh demande une authentification.
Solution :
gh auth loginProblèmes de proxy
Section intitulée « Problèmes de proxy »# Configurer le proxyexport HTTPS_PROXY=http://proxy.example.com:8080gh auth loginÀ retenir
Section intitulée « À retenir »Efficacité
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 loginpour vous authentifier (une seule fois)gh prpour tout ce qui concerne les Pull Requestsgh runetgh workflowpour GitHub Actionsgh apipour accéder à n’importe quel endpoint- Utilisez des alias pour vos commandes fréquentes
Liens utiles
Section intitulée « Liens utiles »- Documentation officielle GitHub CLI — Référence complète
- GitHub CLI sur GitHub — Code source et issues
- act — Exécuter les workflows localement
- Debug des workflows — Techniques de dépannage
- jq — Filtrer les sorties JSON