Bash-git-prompt zeigt Informationen über das aktuelle Git-Repository, den Branch-Namen, Unterschiede zum Remote Branch und lokale Ãnderungen. Davon profitieren Einsteiger wie Experten.
Wer häufiger mit Git arbeitet, hat so seine kleinen Helferlein, die ihm die Arbeit erleichtern. Admins, die nur hier und da mal mit der Torvaldsschen Versionskontrolle umgehen müssen, profitieren von einer Bash-Prompt-Erweiterung, die den aktuellen Stand des bearbeiteten Repos schnell und intuitiv darstellt: Bash-git-prompt [1]. Das winzige Werkzeug steht exemplarisch für gelungene Tools, die sowohl Anfängern als auch Experten bei zahlreichen Problemstellungen unter die Arme greifen, informativ aber nicht überladen sind und keine großen Einstiegshürden mitbringen.
Der Effekt von Bash-git-prompt ist simpel und überzeugend: Wenn Sie es installieren, sich ein Git-Repository auf die Platte holen und in das Verzeichnis mit dem Repo wechseln, dann sehen Sie, wie sich der spartanische Shell-Prompt zu einem farbigen Informationspaket wandelt (Listing 1).
Listing 1
Bash-git-prompt
mfeilner@majorana:~> cd .bash-git-prompt/ ✔ ~/.bash-git-prompt [master|✚ 1] 07:23 $
Der neue Prompt erscheint nicht nur mehrzeilig und bunt, er setzt zudem diverse Unicode-Zeichen ein, die Informationen über das Verzeichnis und den Status des Repositorys ausgeben. Im Beispiel aus Listing 1 liegen keine Fehler vor. Der Haken am Anfang der zweiten Zeile besagt: Das aktuelle Verzeichnis ist das Repository von Bash-git-prompt selbst, Sie befinden sich im Master-Branch, und es gibt eine noch nicht im Status staged befindliche Änderung (das Pluszeichen und die »1« in den eckigen Klammern).
Mit Bash-git-prompt lassen sich so einfach alle wartenden, geänderten, staged (geänderte Datei in ihrem gegenwärtigen Zustand für den nächsten Commit vorgemerkt) oder stashed (zeitweise zurückgestellte Änderungen an einer Arbeitskopie) Dateien sowie Konflikte anzeigen. Außerdem sehen Sie, wie viele Commits Sie vor oder nach dem Upstream liegen. Die Struktur des Prompts folgt dabei der einfachen Syntax »Branch – Upstream Branch – Tracking – Lokaler Status« (siehe auch Tabelle “Bash-git-prompt: Symbole”).
|
Symbol |
Erklärung |
|---|---|
|
✔ |
Das Repo ist sauber. |
|
â— n |
Es gibt n Dateien im Status staged. |
|
✖ n |
Es bestehen n Merge-Konflikte. |
|
✖- n |
Es warten n Dateien im Status staged. |
|
✚ n |
Es gibt n veränderte Dateien im Status unstaged. |
|
…n |
Es liegen n Dateien im Status untracked vor. |
|
⚑n |
Es gibt n Einträge im Stash. |
Einrichten
Bash-git-prompt ist ein Port des Informative Git Prompt für die Z-Shell, der speziell für die Bash und die Fish-Shell entwickelt wurde. Er findet sich in den Repositories aller gängigen Distributionen und landet bei Suse beispielsweise mit dem einfachen Kommando »zypper in bash-git-prompt« auf der Platte (Abbildung 1).

Abbildung 1: Unter OpenSuse Tumbleweed kommt mit einem simplen Befehl der Bash-git-prompt 2.7.1 von 2020 auf die Platte.
Lassen Sie sich nicht davon abschrecken, dass dabei eine vier Jahre alte Version des Tools auf die Platte wandert (Listing 2): Das Projekt hat zwar den Maintainer gewechselt, verfügt aber immer noch über ein recht aktiv gepflegtes Github-Repository. Allerdings dürften die meisten Anwender das Bash-git-prompt wohl ohnehin gleich über Git selbst installieren (Abbildung 2).

Abbildung 2: Wer Bash-git-prompt über »git clone« installiert, bekommt vermeintlich betagte Software, die aber ohne Probleme funktioniert. Testen lässt sich das gleich in der Befehlszeile mit dem »bash-git-prompt«-Verzeichnis.
Im Interview mit dem ursprünglichen Bash-git-prompt-Initiator Martin MagicMonty Gondermann zeigte der sich überrascht und hocherfreut: “Dass jemand das überhaupt mal gepackaged hat, das ist ja toll!” Heute entwickeln Günter Grill [3] und Rakoto Mandimby [4] das Werkzeug federführend weiter. Das Repo verzeichnet über 100 Beitragende, nur sieben Pull Requests waren bei Redaktionsschluss offen. Das Projekt ist zwar nicht eingeschlafen, aber auch nicht besonders aktiv; es scheint sich eher der Feature Completeness zu nähern.
Listing 2
Inhalt von Bash-git-prompt
majorana:/home # rpm -qli bash-git-prompt
Name : bash-git-prompt
Version : 2.7.1
Release : 2.12
Architecture: noarch
Install Date: Mo 29 Apr 2024 13:59:37 BST
Group : Development/Tools/Version Control
Size : 117549
License : BSD-2-Clause
Signature : RSA/SHA512, Fr 29 Mär 2024 13:35:48 GMT, Key ID 35a2f86e29b700a4
Source RPM : bash-git-prompt-2.7.1-2.12.src.rpm
Build Date : So 10 Mai 2020 09:51:18 BST
Build Host : reproducible
Packager : https://bugs.opensuse.org
Vendor : openSUSE
URL : https://github.com/magicmonty/bash-git-prompt
Summary : Informative git prompt for bash and fish
Description :
A bash prompt that displays information about the current git repository. In particular the branch name, difference with remote branch, number of files staged, changed, etc.
This package will automatically enable the git prompt for bash after
install. It will disable the prompt accordingly after uninstall.
Distribution: openSUSE Tumbleweed
/etc/profile.d/bash-git-prompt.sh
/usr/share/bash-git-prompt
/usr/share/bash-git-prompt/README.md
/usr/share/bash-git-prompt/git-prompt-help.sh
/usr/share/bash-git-prompt/gitprompt.fish
/usr/share/bash-git-prompt/gitprompt.sh
/usr/share/bash-git-prompt/gitstatus.sh
/usr/share/bash-git-prompt/gitstatus_pre-1.7.10.sh
/usr/share/bash-git-prompt/prompt-colors.sh
/usr/share/bash-git-prompt/themes
/usr/share/bash-git-prompt/themes/Chmike.bgptheme
/usr/share/bash-git-prompt/themes/Crunch.bgptheme
/usr/share/bash-git-prompt/themes/Custom.bgptemplate
/usr/share/bash-git-prompt/themes/Default.bgptheme
/usr/share/bash-git-prompt/themes/Default_NoExitState.bgptheme
/usr/share/bash-git-prompt/themes/Default_NoExitState_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/Default_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/Evermeet.bgptheme
/usr/share/bash-git-prompt/themes/Evermeet_Lowres.bgptheme
/usr/share/bash-git-prompt/themes/Evermeet_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/Minimal.bgptheme
/usr/share/bash-git-prompt/themes/Minimal_UserHost.bgptheme
/usr/share/bash-git-prompt/themes/Plague_Doctor.bgptheme
/usr/share/bash-git-prompt/themes/Single_line.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_Dark.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_Minimalist.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_NoExitState.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_NoExitState_Gentoo.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_NoExitState_openSUSE.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_Solarized.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_Solarized_Lamda.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/Single_line_openSUSE.bgptheme
/usr/share/bash-git-prompt/themes/Solarized.bgptheme
/usr/share/bash-git-prompt/themes/Solarized_Extravagant.bgptheme
/usr/share/bash-git-prompt/themes/Solarized_NoExitState.bgptheme
/usr/share/bash-git-prompt/themes/Solarized_NoExitState_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/Solarized_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/Solarized_UserHost.bgptheme
/usr/share/bash-git-prompt/themes/TruncatedPwd_WindowTitle.bgptheme
/usr/share/bash-git-prompt/themes/TruncatedPwd_WindowTitle_NoExitState.bgptheme
/usr/share/bash-git-prompt/themes/TruncatedPwd_WindowTitle_NoExitState_Ubuntu.bgptheme
/usr/share/bash-git-prompt/themes/TruncatedPwd_WindowTitle_Ubuntu.bgptheme
/usr/share/doc/packages/bash-git-prompt
/usr/share/doc/packages/bash-git-prompt/README.md
/usr/share/fillup-templates/sysconfig.bash-git-prompt
/usr/share/licenses/bash-git-prompt
/usr/share/licenses/bash-git-prompt/LICENSE.txt
Installation mit Git
Bash-git-prompt mit Git selbst zu installieren (Listing 3) bringt für Einsteiger den Vorteil, dass sofort ein Git-Repository auf die Platte kommt, mit dem man sich das Tool anschauen kann. Das Kommando aus der ersten Zeile von Listing 3 holt das Werkzeug auf den Rechner.
Listing 3
Installation mit Git
mfeilner@majorana:~> git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
Klone nach '/home/mfeilner/.bash-git-prompt'...
remote: Enumerating objects: 63, done.
remote: Counting objects: 100% (63/63), done.
remote: Compressing objects: 100% (55/55), done.
remote: Total 63 (delta 21), reused 23 (delta 7), pack-reused 0
Empfange Objekte: 100% (63/63), 67.63 KiB | 4.23 MiB/s, fertig.
Löse Unterschiede auf: 100% (21/21), fertig.
Der Befehl »cd .bash-git-prompt« in der ersten Zeile von Listing 1 wechselt in das Arbeitsverzeichnis von Bash-git-prompt selbst. Wenn Sie die Software über die Paketverwaltung der verwendeten Distribution installiert haben, ändert sich der Prompt automatisch, sobald Sie ein Git-Verzeichnis aufsuchen.
Haben Sie das Tool dagegen via Git heruntergeladen, müssen Sie vorab noch einige Änderungen an der Bash-Konfiguration vornehmen. Listing 4 zeigt einen Ausschnitt der »~/.bashrc«, nachdem Suse das Paket eingebunden hat. Über die Variablen in der ».bashrc« lässt sich Bash-git-prompt in den meisten Fällen ausreichend konfigurieren. Gewöhnlich genügt schon das Kommando »source /usr/share/bash-git-prompt/gitprompt.sh« völlig (vorletzte Zeile).
Die Entwickler empfehlen ferner, »GIT_PROMPT_ONLY_IN_REPO=1« (Zeile 5) einzutragen, damit der Prompt nur in Repository-Verzeichnissen aktiv wird. Stellt Sie all das nicht zufrieden, sehen Sie sich die Datei »gitprompt.sh« genauer an: Dort sind die Variablen definiert und lassen sich mit ein wenig Bash-Know-how einfach anzupassen.
Listing 4
Bash-Konfigurationsänderungen
# Sample .bashrc for SUSE Linux # Copyright (c) SUSE Software Solutions Germany GmbH [...] # Set config variables first GIT_PROMPT_ONLY_IN_REPO=1 # GIT_PROMPT_FETCH_REMOTE_STATUS=0 # uncomment to avoid fetching remote status # GIT_PROMPT_IGNORE_SUBMODULES=1 # uncomment to avoid searching for changed files in submodules # GIT_PROMPT_WITH_VIRTUAL_ENV=0 # uncomment to avoid setting virtual environment infos for node/python/conda environments # GIT_PROMPT_SHOW_UPSTREAM=1 # uncomment to show upstream tracking branch # GIT_PROMPT_SHOW_UNTRACKED_FILES=normal # can be no, normal or all; determines counting of untracked files # GIT_PROMPT_SHOW_CHANGED_FILES_COUNT=0 # uncomment to avoid printing the number of changed files # GIT_PROMPT_STATUS_COMMAND=gitstatus_pre-1.7.10.sh # uncomment to support Git older than 1.7.10 # GIT_PROMPT_START=... # uncomment for custom prompt start sequence # GIT_PROMPT_END=... # uncomment for custom prompt end sequence # as last entry source the gitprompt script # GIT_PROMPT_THEME=Custom # use custom theme specified in file GIT_PROMPT_THEME_FILE (default ~/.git-prompt-colors.sh) # GIT_PROMPT_THEME_FILE=~/.git-prompt-colors.sh # GIT_PROMPT_THEME=Solarized # use theme optimized for solarized color scheme source /usr/share/bash-git-prompt/gitprompt.sh test -s ~/.alias && . ~/.alias || true [...]
Auf dem Mac
Unter MacOS hilft Ihnen Homebrew weiter: Nach einem »brew update« erledigt der Befehl »brew install bash-git-prompt« die Installation. Das Kommando »brew install –HEAD bash-git-prompt« zieht die neueste Version aus dem Repo. Für MacOS raten die Bash-git-prompt-Entwickler außerdem dazu, die Zeilen aus Listing 5 in die Datei »~/.bash_profile« einzubinden.
Listing 5
MacOS-Konfiguration
if [ -f "$(brew --prefix)/opt/bash-git-prompt/share/gitprompt.sh" ]; then __GIT_PROMPT_DIR=$(brew --prefix)/opt/bash-git-prompt/share GIT_PROMPT_ONLY_IN_REPO=1 source "$(brew --prefix)/opt/bash-git-prompt/share/gitprompt.sh" fi
Der neue Prompt
Ab sofort erhalten Sie dank Bash-git-prompt in der Bash zahlreiche Zusatzinformationen, sobald Sie ein Git-Verzeichnis betreten (Tabelle “Prompt-Beispiele”). Im Bereich des »Upstream branch« am Prompt kann das Tool den entfernten Tracking Branch anzeigen. Das müssen Sie allerdings noch aktivieren, da die Variable »GIT_PROMPT_SHOW_UPSTREAM« standardmäßig auf »0« gesetzt ist. Der Befehl »GIT_PROMPT_SHOW_UPSTREAM=1« ändert das.
|
Prompt |
Branch |
Bedeutung |
|---|---|---|
|
»master↑3|✚1« |
»master« |
Sie sind dem Repo drei Commits voraus. Eine Datei wurde verändert, aber nicht staged. |
|
»status|â—2« |
»status« |
Zwei Dateien sind staged. |
|
»master|✚7…« |
»master« |
Sieben Dateien sind verändert, einige werden nicht verfolgt. |
|
»master|✖2✚3« |
»master« |
Es gibt zwei Konflikte und drei veränderte Dateien. |
|
»master|âš‘2« |
»master« |
Zwei Einträge parken im Stash. |
|
»experimental↓2↑3|✔« |
»experimental« |
Sie sind dem Repo drei Commits voraus, »remote« hat zwei neue Commits. Das Repo ist sauber. |
|
»:70c2952|✔« |
keines |
Der Parent-Commit trägt den Hash »70c2952«, das Repo ist sauber. |
Die Symbole für das Branch Tracking erkennen Sie an den kleinen Pfeilen. So steht »â†‘n« für “Sie sind dem Remote Branch um n Commits voraus”, während der Abwärtspfeil »â†“« anzeigt, dass Remote die Nase vorn hat.
Wenn die beiden Repos auseinanderlaufen, weil andere Programmierer Änderungen vorgenommen haben und gleichzeitig lokale Changes vorliegen, dann treten Auf- und Abwärtspfeile nebeneinander auf. Beispielsweise bedeutet »â†“m↑n«, dass andere m Änderungen eingepflegt haben, lokal lassen sich n Commits verzeichnen.
Beginnt der Branch-Name mit einem Doppelpunkt, steckt dahinter ein Hash, kein Branch – außer, ein findiger Entwickler hat einen Branch angelegt, dessen Name mit einem Doppelpunkt beginnt, was generell keine gute Idee ist.
Fazit
Der Autor lernte Bash-git-prompt bei seiner Arbeit im Doku-Team von Suse kennen und schätzen. Das Werkzeug zeigt dem Anfänger und Git-Neuling schnell, was in seinem Repository geschieht und wo Probleme liegen. Aber auch alte Hasen sparen sich zahlreiche Kommandos und sehen auf einen Blick, was Sache ist.
Haben Sie Interesse an weiteren Tipps rund um Git in der Bash, dann sollten Sie den Appendix des Git-Handbuchs [5] studieren oder in einem älteren Linux-Magazine-Artikel schmökern [6] – das meiste davon gilt heute unverändert. Für Z-Shell-Anwender finden sich auf Github [7] ein paar hilfreiche Tricks für den Git-Prompt in der Zsh. (csi)
Der Autor
Der Regensburger Markus Feilner ist Berater für Open-Source-Strategien. Er arbeitet seit 1994 mit Linux, war stellvertretender Chefredakteur des Linux-Magazins und hat sich mit seiner Firma Feilner IT auf die OSI-Layer 8 bis 11 spezialisiert. Die Arbeit mit Git erlernte er als Leiter des Suse-Doku-Teams.
Infos
- Bash-git-prompt: https://github.com/magicmonty/bash-git-prompt
- Zsh-git-prompt: https://github.com/olivierverdier/zsh-git-prompt
- Günther Grill: https://github.com/guenhter
- Rakoto Mandimby: https://github.com/rakotomandimby
- “Git in Other Environments – Git in Bash”: https://git-scm.com/book/en/v2/Appendix-A%3A-Git-in-Other-Environments-Git-in-Bash
- Getting started with Git: Markus Feilner, Thomas Schraitle, “Git Going”, Linux-Magazine 176/2015: https://www.linux-magazine.com/Issues/2015/176/Git
- Git Prompt für die Z-Shell: https://github.com/starcraftman/zsh-git-prompt






