GitHub CLI
Anfangs habe ich die GitHub CLI gh
nur für die Authentifizierung genutzt. Ich habe mich mit gh auth login
angemeldet und konnte danach gh
-Kommandos nutzen, ohne mich jedesmal neu anmelden zu müssen.
Nach einer Weile habe ich sie aber als Tool im Umgang mit Pull-Requests zu schätzen gelernt. Ich kann damit auf meinem Branch ganz leicht einen Pull-Request erstellen (gh pr create
) und erhalte auch gleich eine URL ausgegeben, die ich an meine Kollegen weiterleiten oder selbst nutzen kann, um mir die Änderungen noch mal genauer anzusehen.
... ein nettes grafisches Tool (mit Mausbedienung) ist für gelegentliche Nutzung und den Einstieg wichtig - es ersetzt allerdings nicht die Kommandozeile für Power-User.
Login und PATs
PAT = Personal Access Token
Bei einem gh auth login
erfolgt eine Authentifizierung interaktiv über den Webbrowser - die richtige Url wird automatisch im Browser geöffnet. Bei Headless Umgebungen muss man die Url https://github.com/login/device manuell im Browser öffnen und dann den ausgegebenen Code eingeben.
Die interaktiv eingegebenen Authentifizierungseinstellungen werden in ~/.config/gh/config.yml
gespeichert. Nach erfolgter Authentifizierung wird ein PAT (Personal Access Token) erzeugt und lokal gespeichert (~/.config/gh/hosts.yml
) - mit gh auth logout
kann man ihn löschen. Dieser Token wird für alle weiteren gh
-Kommandos verwendet. Ich kann mir den Token auch per gh auth token
ausgeben lassen und ihn beispielsweise explzit in aufrufen in dieser Form verwenden:
GITHUB_TOKEN=`gh auth token`
gh api https://does_not_matter:$\{GITHUB_TOKEN\}@api.github.com/repos/....
Meine wichtigesten Use-Cases
GitHub Überblick
gh status
- Zeigt den Status des GitHub-Accounts ansehr praktisch, wenn man schauen will wie der Status der PRs ist (welche muss ich reviewen, welche sind noch offen, etc.)
Shell Completion
gh completion --shell zsh
- Shell Completion für zsh
Arbeit mit Pull Requests
gh pr create
- Erstellt einen Pull-Request in den Default Branchgh pr create --base my_target_branch
- Erstellt einen Pull-Request in den angegeben Target-Branchgh pr list
- Zeigt alle Pull-Requests angh pr status
- Zeigt den Status des aktuellen Pull-Requests angh pr checkout 119
- Wechselt auf den Branch des Pull-Requests mit der Nummer 119gh pr diff
- Zeigt die Änderungen des aktuellen Pull-Requests an
Arbeit mit Gists
gh gist create gists/gh-cli-install.yml
- Erstellt ein Gist aus einer Datei
Konfiguration von Git
Verwendet man die git
-CLI, so kann gh
als Credential Helper per
gh auth setup-git
konfigurieren. Dabei wird die ~/.gitconfig
um Zeilen dieser Art erweitert:
[credential "https://github.com"]
helper =
helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper =
helper = !/usr/bin/gh auth git-credential
Bei jedem git
-Kommando wird dann automatisch der Personal-Access-Token (PAT) von gh auth login
wiederverwendet.
gh api
wenn die Response kein JSON liefert, dann einfach mal mit den Headers probieren:
--header Accept:application/vnd.github+json --header X-GitHub-Api-Version:2022-11-28
GitHub bietet schon recht gute Tools und erweitert diese ständig, doch manche Dinge muss ich dann doch noch selbst über die REST oder GraphQL coden. Hierzu ist gh api
das mittel der Wahl.
Der für einen Workflow automatisch generierte GITHUB_TOKEN
hat nur sehr eingeschränkte Rechte, die evtl. für die Verwendung der REST-API nicht ausreichend ist. Hier sollte man sich bei Bedarf über eine GitHub App einen passenden Token generieren lassen.
Mit jq lässt dich die JSON Response sehr gut parsen.
Konfiguration von gh
gh
Auf meinem Ubuntu befindet sich die Konfiguration in ~/.config/gh/config.yml
. Dort kann ich beispielsweise die Alias-Kommandos konfigurieren:
aliases:
co: pr checkout
Last updated
Was this helpful?