Nativer Client für Terminal-Aufgaben Arbeiten mit GitHub CLI

Autor / Redakteur: Mirco Lang / Stephan Augsten

Vorbei ist der Spagat zwischen Git auf der Kommandozeile und der GitHub-Weboberfläche: GitHub hat sich selbst einen nativen Client für den Terminal spendiert – und der Umgang ist erfreulich einfach.

Firmen zum Thema

Das native GitHub CLI bietet die Möglichkeit, wichtige Aktionen per Kommandozeile auszuführen, ohne die Weboberfläche bemühen zu mssen.
Das native GitHub CLI bietet die Möglichkeit, wichtige Aktionen per Kommandozeile auszuführen, ohne die Weboberfläche bemühen zu mssen.
(Bild: Lang / GitHub)

Wer mit GitHub arbeitet, hat viele Möglichkeiten, einen persönlichen Workflow aufzubauen. Viele Entwicklertools bieten eine entsprechende Anbindung für Issues, Pull Requests und dergleichen. Die eigentliche Arbeit am Code findet meist ganz simpel mit Git direkt im Terminal statt.

Statt komplexer Entwicklungshelfer wie das stetig wachsende Jira-Portfolio wird für das Management drum herum oft doch nur GitHubs Weboberfläche eingesetzt. Schließlich ist sie einfach, bietet – natürlich – alle GitHub-Funktionen und wenn man mal ehrlich ist: Sie ist einfach da.

So bequem und intuitiv die Arbeit im Browser auch sein mag, so lästig ist der ständige Wechsel zwischen Terminal und Web, Tastatur und Maus. Denken Sie einfach mal an Notebooks, die nur für die Entwicklung gedacht sind – muss dort wirklich eine grafische Desktop-Umgebung laufen, nur um ein paar GitHub-Issues zu bestätigen?

Nun, das musste auch in der Vergangenheit schon nicht sein: Mit dem im GitHub-Repository gelisteten hub gibt es schon länger einen CLI-Zugang für GitHub – und Git. Hub fungiert als Git-Wrapper und liefert darüber hinaus direkte Interaktion mit GitHub. Man könnte es wohl eine GitHub-spezifische Git-Version nennen. Hub ist zwar kein offizielles GitHub-Projekt, wird jedoch von einem GitHub-Mitarbeiter privat betreut.

Hub bringt also Git und GitHub-Workflows unter einen Hut bringt, das offizielle GitHub-Projekt GitHub CLI (kurz: gh) setzt derweil rein auf letztere. Sie können sich im Grunde also aussuchen, ob Sie Git und GitHub gemeinsam per Hub oder getrennt mit Git und GitHub CLI nutzen.

Bei GitHub gab es durchaus Überlegungen, Hub zu einem offiziellen Projekt zu machen. Man hat sich aber dagegen und für gh entschieden, um Hub-Nutzer nicht vor den Kopf zu stoßen und einen einfacheren CLI-Zugang für GitHub-Workflows zu schaffen.

Funktionsumfang

GitHub CLI ermöglicht den Zugriff auf den kompletten Workflow über eine übersichtliche Reihe von Kommandos (etwa „gist“), Subkommandos (wie „create“) und Flags (etwa „--public“). Hier die Kommandos mit einer Auswahl der Subkommandos:

  • alias (delete, list, set)
  • api
  • auth (login)
  • config (get, set)
  • gist (create, list)
  • issue (reopen, status)
  • pr (checkout, merge, review)
  • release (download, upload)
  • repo (clone, fork, view)

Über das api-Kommando können Sie dabei direkte HTTP-Anfragen an die GitHub-API absetzen, deren Ausgabe dann lokal erfolgt.

GitHub CLI einrichten

Für die Installation von GitHub CLI werden alle relevanten Betriebssysteme unterstützt, teils über Paketmanager, alternativ über Binary-Downloads oder natürlich die Quelle selbst. Darunter befinden sich auch regelrecht exotische Plattformen wie Android und NixOS. Für Debian und Ubuntu ist der Vorgang ziemlich straight forward:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0sudo apt-add-repository https://cli.github.com/packagessudo apt updatesudo apt install gh

Für Windows steht freilich eine MSI-Datei der GitHub CLI zur Verfügung, eleganter geht es über den freien Paketmanager Chocolatey – dessen Paketierung wir übrigens in Kürze hier vorstellen:

choco install gh

Auch wenn die gh-Befehle recht übersichtlich sind, möchte man als ersten Schritt vielleicht Autovervollständigung einrichten, sofern dies nicht über den Paketmanager geschehen ist. Dafür ist es notwendig, folgenden Befehl idealerweise in die persönliche Bash-Konfiguration (~/.bashrc) einzutragen oder zum Testen einfach auszuführen:

eval "$(gh completion -s bash)"

Anschließend stellt man eine Verbindung zu dem gewünschten GitHub-Account her, beispielsweise auf GitHub.com. Grundsätzlich genügt ein simples “gh auth login”, um die interaktive Anmeldung zu starten.

Da dies allerdings zum Beispiel in der Git Bash for Windows nicht funktioniert, können Sie auch gleich über ein entsprechendes Token gehen. Erstellen Sie dazu zunächst in Ihren GitHub-Account-Einstellungen (nicht Repo-Einstellungen!) unter „Developer settings/Personal access tokens“ einen Token mit mindestens den beiden aktivierten Bereichen „repo“ und „read:org“ und speichern Sie den String in einer Datei (hier etwa meintoken.txt).

Nun können Sie sich auch in der Windows-Bash wie folgt authentifizieren:

gh auth login --with-token < meintoken.txt

Sobald die Verbindung steht, können Sie zum Testen beispielsweise ein vorhandenes Repository klonen und die auch in der Weboberfläche zu sehende Readme anzeigen – hier am Beispiel des Repos „cli-help“:

gh repo clone cli-helpcd cli-helpgh repo view

Damit steht gh für die Arbeit bereit – allerdings gibt es optional auch ein wenig zum Konfigurieren über „gh config“, das über die Subkommandos „get“ und „set“ folgende vier Einstellungen setzen/anzeigen kann:

  • git_protocol: HTTPS (Standard) oder SSH
  • editor: Texteditor festlegen
  • prompt enable/disable: Interaktive Eingabe ein-/ausschalten
  • pager: Terminal Pager festlegen (etwa more oder less)

Generell bekommen Sie in gh über „gh KOMMANDO –help“ Hilfe zu den einzelnen Kommandos.

Arbeiten mit gh

Die eigentliche Arbeit mit gh ist im Grunde ziemlich simpel, sofern man Git und GitHub versteht. Um das Ganze mal am Beispiel eines Pull Requests durchzuspielen, zunächst die nötigen Vorbereitungen, sprich ein neuer Branch, eine Änderung und ein Commit:

git branch testing1git checkout testing1git push --set-upstream origin testing1vi readme.md → Änderungengit commit -am "gh testing"

Nun können Sie Ihre Änderungen der Readme.md im Branch testing1 als Pull Request für den Branch master absenden. Auch hier gilt wieder: Die interaktive Variante funktioniert nicht in der Windows-Bash, daher hier ein alleinstehender Befehl:

gh pr create --title "gh testing pr" --body "just testing ..." --head testing1

Hier werden also schlicht Titel, Nachrichten-Body und vor allem der Branch mit dem Commit für den Pull Request angegeben. Im Master-Branch können Sie anschließend mit dem Pull Request arbeiten und zum Beispiel folgenden simplifizierten Workflow durchlaufen:

gh pr list (nummerierte Liste von PRs)gh pr view 4gh pr diff 4gh merge -m 4

Mit dem letzten Befehl wird dabei der eigentliche Merge durchgeführt und zwar per „-m“-Flag mit der Methode „merge commit“ (statt rebase oder sqash). Der Branch testing1 wird dabei automatisch lokal und auf GitHub.com gelöscht.

Alle anderen Befehle folgen immer wieder diesem Muster. Für die genaue Syntax ist eigentlich nur wichtig sich zu merken, dass es sowohl zu Kommandos als auch Subkommandos Hilfestellung gibt, sprich über „gh KOMMANDO –help“ oder „gh KOMMANDO SUBKOMMANDO –help“.

Einige Dinge werden aber immer wieder auftauchen, da lohnt es sich, gh-interne Aliasse anzulegen. Wer beispielsweise regelmäßig Pull Requests diverser Mitarbeiter bekommt, könnte sich deren PRs ganz einfach via „gh prlist peter“, „gh prlist jochen“ etc. anzeigen lassen, wenn Sie einen entsprechenden Alias setzen:

gh alias set prlist 'gh pr list --assignee "$1"'

Selbstverständlich arbeitet gh auch mit GitHub Enterprise Server, so dass es die Weboberfläche auch wirklich überall umgehend ersetzen kann. Und das wird es wohl auch vielerorts, denn das noch recht junge Projekt geht einfach von der Hand und die Möglichkeit, GitHub-Workflows einfach ins Scripting zu übernehmen, ist schon verlockend.

Sicherlich lohnt es sich ab und an einen Blick auf die GitHub-CLI-Homepage zu werfen. Schließlich ist es als quelloffenes Tool für Entwickler und zum Entwickeln prädestiniert für Erweiterungen, Abwandlungen und neue Spielereien.

(ID:46964453)

Über den Autor

 Mirco Lang

Mirco Lang

Freier Journalist & BSIler