ADMIN
2021
04
2021-04-01T12:00:00
Backup und Recovery
PRAXIS
056
Open-Source-Tipp
Tools
GitHub
Versionsverwaltung mit Kommandozeilen-Tool gh
Auf zum Terminal!
von Thorsten Scherf
Veröffentlicht in Ausgabe 04/2021 - PRAXIS
Für die Versionsverwaltung von Softwareprojekten oder auch Konfigurationsdateien kommt häufig die Software git in Kombination mit dem Webdienst GitHub zum Einsatz. Seit einiger Zeit existiert mit gh ein Kommandozeilen-Tool, mit dem Sie gewohnte Arbeitsabläufe komplett auf das Terminal verlagern können.

Im Open-Source-Bereich sind die Werkzeuge git und GitHub weitverbreitet und die meisten Leser werden bereits Bekanntschaft mit diesen gemacht haben. Sollten Sie noch nicht vertraut mit den Begriffen sein, finden Sie unter [1] und [2] eine ausführliche Beschreibung. Wir möchten zu Beginn einen Blick darauf werfen, wie sich Änderungsvorschläge an Projekten auf GitHub einreichen lassen: der als "Fork & Pull" bekannte git-Workflow.
Funktionsweise von Fork & Pull
Stellen Sie sich vor, Sie sind an einem auf GitHub gehosteten Projekt interessiert und möchten in diesem Projekt eigene Änderungen einfließen lassen. Hierzu erzeugen Sie einen Fork, also eine Kopie des Projekts. Die Änderungen nehmen Sie entweder direkt im Master-Branch der Kopie oder in einem eigenen Branch vor. Damit die Änderungen auch wieder in das Originalprojekt zurückfließen, erzeugen Sie einen Pull-Request. Sobald dieser akzeptiert wurde, gehören Ihre Änderungen zum offiziellen Projekt. Teil dieses Prozesses ist zumeist ein Wechsel zwischen der Kommandozeile, auf der Sie mit git arbeiten, und der GitHub-Webseite, auf der die Interaktion mit den dort gehosteten Repositories stattfindet. Das Git-Online-Buch [1] beschreibt den kompletten Workflow im Detail.
Doch dieser Workflow lässt sich mithilfe des GitHub-Tools gh [3] komplett auf die Kommandozeile übertragen und somit ist der Wechsel zwischen dieser und dem Webbrowser nicht mehr notwendig. Unter [4] sind die Installationsmöglichkeiten für unterschiedliche Betriebssysteme dokumentiert. In unserem Beispiel richten wir das offizielle dnf-Repository auf einem Fedora-System ein, aus dem die Installation des RPM-Pakets im Anschluss erfolgt:
Im Open-Source-Bereich sind die Werkzeuge git und GitHub weitverbreitet und die meisten Leser werden bereits Bekanntschaft mit diesen gemacht haben. Sollten Sie noch nicht vertraut mit den Begriffen sein, finden Sie unter [1] und [2] eine ausführliche Beschreibung. Wir möchten zu Beginn einen Blick darauf werfen, wie sich Änderungsvorschläge an Projekten auf GitHub einreichen lassen: der als "Fork & Pull" bekannte git-Workflow.
Funktionsweise von Fork & Pull
Stellen Sie sich vor, Sie sind an einem auf GitHub gehosteten Projekt interessiert und möchten in diesem Projekt eigene Änderungen einfließen lassen. Hierzu erzeugen Sie einen Fork, also eine Kopie des Projekts. Die Änderungen nehmen Sie entweder direkt im Master-Branch der Kopie oder in einem eigenen Branch vor. Damit die Änderungen auch wieder in das Originalprojekt zurückfließen, erzeugen Sie einen Pull-Request. Sobald dieser akzeptiert wurde, gehören Ihre Änderungen zum offiziellen Projekt. Teil dieses Prozesses ist zumeist ein Wechsel zwischen der Kommandozeile, auf der Sie mit git arbeiten, und der GitHub-Webseite, auf der die Interaktion mit den dort gehosteten Repositories stattfindet. Das Git-Online-Buch [1] beschreibt den kompletten Workflow im Detail.
Doch dieser Workflow lässt sich mithilfe des GitHub-Tools gh [3] komplett auf die Kommandozeile übertragen und somit ist der Wechsel zwischen dieser und dem Webbrowser nicht mehr notwendig. Unter [4] sind die Installationsmöglichkeiten für unterschiedliche Betriebssysteme dokumentiert. In unserem Beispiel richten wir das offizielle dnf-Repository auf einem Fedora-System ein, aus dem die Installation des RPM-Pakets im Anschluss erfolgt:
dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
dnf install gh
gh --version
gh version 1.4.0 (2020-12-15) https://github.com/cli/cli/releases/latest
Fork mittels gh erstellen
Als Nächstes müssen Sie sich mit Ihrem Account authentifizieren. Hierfür verwenden Sie entweder Ihren Benutzernamen und Passwort oder erzeugen besser unter [5] ein Zugangstoken:
gh auth login
GitHub hat den passwortbasierten Zugang bereits als deprecated eingestuft und es ist davon auszugehen, dass diese Methode für die Authentifizierung gegenüber dem Webdienst bald nicht mehr funktionieren wird.
Mithilfe von git oder gh können Sie nun eine Kopie eines auf GitHub gepeicherten Projekts lokal auf Ihrem System anlegen. Das folgende Beispiel verwendet das Tool gh, um das Repository des NSS-Projekts zu klonen:
gh repo clone https://github.com/nss-dev/nss.git
Um einen Fork des Projekts zu erstellen, wechseln Sie in das soeben erzeugte Projektverzeichnis und nutzen dort:
cd nss
gh repo fork --remote
Neben einer Kopie des Repositories innerhalb Ihres eigenen Namespace auf GitHub wird das Ursprungs-Repository auch direkt als "remote" definiert. Das Repository können Sie dann unter dem Namen "upstream" ansprechen. Der Aufruf von git remote -v
bestätigt dies:
origin https://github.com/tscherf/ nss.git (fetch)
origin https://github.com/tscherf/ nss.git (push)
upstream https://github.com/nss-dev/nss.git (fetch)
upstream https://github.com/ nss-dev/nss.git (push)
Issues via Terminal beheben
Bevor Sie nun eine Änderung vorschlagen, sollten Sie einen Blick auf die bereits eingereichten Bug-Reports werfen. Möglicherweise wurde die geplante Änderung bereits vorgeschlagen und ist über ein Ticket nachverfolgbar. Diese heißen auf GitHub "Issues" und sind durch den Aufruf von gh issue
list einsehbar. Das folgende Beispiel beschränkt die Suche auf aktive Issues, die noch nicht geschlossen wurden:
gh issue list --state open
Der Befehl gh issue
view zeigt den Inhalt eines bestimmten Issue auf der Kommandozeile an. Fügen Sie die Option "--web" hinzu, erfolgt die Ausgabe innerhalb des Webbrowsers, dessen Einsatz wir aber für unsere Zwecke vermeiden möchten. Um nun eine Änderung an dem Repository vorzunehmen, müssen Sie einen eigenen Branch anlegen. In unserem Beispiel wollen wir einen Tippfehler innerhalb der NSS-Dokumentation korrigieren. Erzeugen Sie hierfür mittels git den neuen Zweig "fix_typo":
git co -b fix_typo
Switched to a new branch 'fix_typo'
Nun können Sie innerhalb des neuen Zweigs die gewünschte Änderung an einer oder mehreren Dateien vornehmen. Im Anschluss zeigt git diff
wie gewohnt die Differenz zum Master-Branch an und git st
listet alle Dateien auf, die sich mit einem Commit in das eigene Repository übertragen lassen.
Im folgenden Beispiel findet das Hinzufügen der geänderten Dateien zur Staging-Area automatisch statt, indem wir beim Commit die Angabe von "-a" (für "all") verwenden:
git ci -am "Fixed typo in docs"
[fix_typo 02700491b]
Fixed typo in docs
1 file changed, 1 insertion(+), 1 deletion(-)
Mithilfe von git lg
sehen Sie nun auch, dass ein Logeintrag für den letzten Commit erzeugt wurde:
git lg -1
* 02700491b - (2021-01-21 16:09:03 +0100) (HEAD -> fix_typo, origin/fix_typo) Fixed typo in docs <Thorsten Scherf>
Lokale Änderungen an GitHub übertragen
Schließlich senden Sie Ihre lokalen Änderungen, inklusive des neu erzeugten Branches, an den GitHub-Webdienst:
git push -u origin fix_typo
An dieser Stelle würden Sie im Normalfall innerhalb Ihres Webbrowsers weiterarbeiten, um auf Basis der soeben vorgenommenen Änderung einen Pull-Request zu erzeugen. Hierfür kann nun aber natürlich ebenfalls das gh-Tool zum Einsatz kommen.
Pull-Request im Terminal erzeugen
Der Pull-Request lässt sich nun mithilfe von gh pr create
erzeugen. Hierbei können Sie sowohl den Titel als auch die Beschreibung mit den beiden Optionen "--title" und "--body" angeben oder aber hierfür einfach die Informationen aus dem Commit verwenden:
gh pr create --fill
Creating pull request for tscherf:fix_typo into master in nss-dev/nss
https://github.com/nss-dev/nss/pull/25
Somit wurde der Pull-Request erfolgreich erzeugt und wartet nun darauf, dass der Projekt-Maintainer die Änderungen absegnet. Wollen Sie noch einmal einen Blick in den fertigen Request werfen, rufen Sie hierfür gh pr view
auf:
gh pr view 25
Fixed typo in docs
Open - tscherf wants to merge 1 commit into master from fix_typo
Die Ausgabe erfolgt, wie auch bei den Issues, auf der Kommandozeile. Wollen Sie die Daten stattdessen lieber im Webbrowser aufrufen, verwenden Sie, wie bereits erwähnt, die zusätzliche Option "--web".
Fazit
Mit dem Kommandozeilen-Tool gh können Sie nahezu sämtliche git- und GitHub-Workflows bequem innerhalb Ihres Terminals ausführen. Dies gilt übrigens auch für den Pastebin-Service gist [6], der als Teil von GitHub angeboten wird und erlaubt, Code mit Kollegen zu teilen. Ein kompletter Überblick der Möglichkeiten, die das Werkzeug gh bietet, ist im gh-Handbuch [3] dokumentiert.
(jm)
Link-Codes
[6] Pastebin-Service gist:
https://gist.github.com/