Git-Verzweigung & Status in der Bash-Eingabeaufforderung anzeigen
Anpassung der Bash-Prompt für den sofortigen Git-Kontext
Ein gut konfigurierter Bash-Prompt, der Git-Repository-Informationen anzeigt kann Ihren Entwicklungsworkflow erheblich verbessern.
Statt ständig die Befehle git status und git branch auszuführen, können Sie diese kritischen Informationen immer in Ihrer Terminal-Eingabeaufforderung sichtbar haben.

Beispiel für einen Oh-my-push-Prompt.
Warum Git-Informationen zu Ihrem Bash-Prompt hinzufügen?
Wenn Sie den ganzen Tag mit mehreren Git-Repositories und -Zweigen arbeiten, wird das Kontextwechseln zu einer erheblichen Produktivitätsbelastung. Ein git-aware-Prompt löst mehrere häufige Probleme:
- Verhindert Zweigverwirrung: Sie wissen immer, auf welchem Zweig Sie sich befinden, bevor Sie commiten
- Reduziert Befehlsaufwand: Keine Notwendigkeit, ständig
git statusundgit branchauszuführen - Unmittelbare visuelle Rückmeldung: Sehen Sie unveränderte Änderungen, nicht verfolgte Dateien und Upstream-Status auf einen Blick
- Weniger Fehler: Vermeiden Sie versehentliches Committieren auf den falschen Zweig oder das Pushen von schmutzigem Code
Verständnis der Bash-PS1-Variablen
Die Bash-Eingabeaufforderung wird durch die PS1-Umgebungsvariable gesteuert. Diese Variable kann enthalten:
- Literale Texte: Jede Zeichen, die Sie anzeigen möchten
- Escape-Sequenzen: Spezielle Codes, die mit
\beginnen und dynamische Informationen anzeigen - Befehlssubstitution: Befehle in
$(...), die ausgeführt werden und ihre Ausgabe anzeigen - ANSI-Farbcodes: Escape-Sequenzen, die den Text farblich ändern
Häufige PS1-Escape-Sequenzen sind:
\u- aktueller Benutzername\h- Hostname\w- aktuelles Arbeitsverzeichnis\$-#für root,$für normalen Benutzer\t- aktuelle Zeit im 24-Stunden-Format
Eine grundlegende Eingabeaufforderung könnte so aussehen: PS1='\u@\h:\w\$ ' und die Ausgabe wäre z.B. benutzer@hostname:/pfad/zum/verzeichnis$. Für mehr Bash-Grundlagen und Escape-Sequenzen besuchen Sie unseren umfassenden Bash Cheat Sheet.
Methode 1: Verwendung des eingebauten Git-Skripts git-prompt.sh
Git-Distributionen enthalten ein Hilfsskript namens git-prompt.sh, das die Funktion __git_ps1 bereitstellt. Dies ist der zuverlässigste und funktionsreichste Ansatz.
Auffinden von git-prompt.sh
Zuerst finden Sie heraus, wo sich das Skript auf Ihrem System befindet:
# Häufige Orte auf Linux
/usr/share/git-core/contrib/completion/git-prompt.sh
/etc/bash_completion.d/git-prompt
/usr/lib/git-core/git-sh-prompt
# Häufige Orte auf macOS (mit Homebrew)
/usr/local/etc/bash_completion.d/git-prompt.sh
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
# Suchen Sie danach, falls nötig
find /usr -name git-prompt.sh 2>/dev/null
Grundlegende Konfiguration
Fügen Sie Folgendes zu Ihrer ~/.bashrc oder ~/.bash_profile hinzu:
# Laden Sie das git-prompt-Skript
source /usr/lib/git-core/git-sh-prompt
# Setzen Sie Ihre Eingabeaufforderung, um Git-Informationen zu enthalten
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;31m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
Der Teil $(__git_ps1 " (%s)") ruft die Funktion auf, und %s wird durch den Namen des aktuellen Zweigs ersetzt. Die umgebenden Leerzeichen und Klammern formatieren es schön.
Nach der Bearbeitung laden Sie Ihre Konfiguration neu:
source ~/.bashrc
Erweitere git-prompt.sh-Optionen
Git-prompt.sh wird leistungsfähig, wenn Sie seine optionalen Funktionen über Umgebungsvariablen aktivieren:
# Zeigt nicht gestagte (*) und gestagte (+) Änderungen an
export GIT_PS1_SHOWDIRTYSTATE=1
# Zeigt an, ob es gestapelte Änderungen ($) gibt
export GIT_PS1_SHOWSTASHSTATE=1
# Zeigt an, ob es nicht verfolgte Dateien (%) gibt
export GIT_PS1_SHOWUNTRACKEDFILES=1
# Zeigt die Differenz zwischen HEAD und Upstream an
# Optionen: auto, verbose, name, legacy, git, svn
export GIT_PS1_SHOWUPSTREAM="auto"
# Aktiviert farbige Hinweise (erfordert bash 4.0+)
export GIT_PS1_SHOWCOLORHINTS=1
# Zeigt den Repository-Status während der Operationen an
# (MERGING, REBASING, BISECTING, etc.)
export GIT_PS1_DESCRIBE_STYLE="default"
Hier ist die Bedeutung der Indikatoren:
*- Nicht gestagte Änderungen (geänderte Dateien, die nicht hinzugefügt wurden)+- Gestagte Änderungen (Dateien, die hinzugefügt, aber nicht commited wurden)$- Gestapelte Änderungen existieren%- Nicht verfolgte Dateien vorhanden<- Hinter dem Upstream-Zweig>- Vor dem Upstream-Zweig<>- Divergiert vom Upstream=- Gleich wie Upstream
Vollständige Beispielkonfiguration
Hier ist eine umfassende ~/.bashrc-Konfiguration:
# Laden Sie git-prompt
if [ -f /usr/share/git-core/contrib/completion/git-prompt.sh ]; then
source /usr/share/git-core/contrib/completion/git-prompt.sh
fi
# Konfigurieren Sie die git-prompt-Optionen
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export GIT_PS1_SHOWUNTRACKEDFILES=1
export GIT_PS1_SHOWUPSTREAM="auto"
export GIT_PS1_SHOWCOLORHINTS=1
# Farbdefinitionen
COLOR_RESET='\[\033[00m\]'
COLOR_USER='\[\033[01;32m\]' # Grün
COLOR_PATH='\[\033[01;34m\]' # Blau
COLOR_GIT='\[\033[01;33m\]' # Gelb
# Setzen Sie die Eingabeaufforderung
PS1="${COLOR_USER}\u@\h${COLOR_RESET}:${COLOR_PATH}\w${COLOR_GIT}"'$(__git_ps1 " (%s)")'"${COLOR_RESET}\$ "
Methode 2: Manuelle Git-Befehlssubstitution
Wenn Sie keinen Zugriff auf git-prompt.sh haben oder eine minimale Lösung wünschen, können Sie Git-Befehle direkt in Ihrer Eingabeaufforderung ausführen:
# Einfacher Zweigname nur
PS1='\u@\h:\w$(git branch 2>/dev/null | grep "^*" | colrm 1 2 | sed "s/^/ (/;s/$/)/")\$ '
# Zweigname mit Statusindikator
parse_git_dirty() {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working tree clean" ]] && echo "*"
}
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/ (\1$(parse_git_dirty))/"
}
PS1='\u@\h:\w\[\033[01;33m\]$(parse_git_branch)\[\033[00m\]\$ '
Dieser Ansatz ist portabler, aber er fehlt an der Eleganz von git-prompt.sh und kann in großen Repositories langsamer sein.
Methode 3: Moderne Prompt-Tools
Für ein reichhaltigeres Erlebnis mit minimaler Konfiguration sollten Sie diese modernen Alternativen in Betracht ziehen:
Starship Prompt
Starship ist ein schneller, anpassbarer Prompt, der in Rust geschrieben ist und mit mehreren Shells (bash, zsh, fish, PowerShell) funktioniert.
# Installieren Sie Starship
curl -sS https://starship.rs/install.sh | sh
# Fügen Sie es zu ~/.bashrc hinzu
eval "$(starship init bash)"
Starship erkennt automatisch Git-Repositorys und zeigt an:
- Branch-Name
- Commit-Hash bei abgetrenntem Zustand
- Repository-Status (Merge, Rebase usw.)
- Anzahl der geänderten Dateien
- Status vor/nach dem Upstream
- Und vieles mehr mit anpassbaren Symbolen
Konfigurieren Sie es über ~/.config/starship.toml:
[git_branch]
symbol = "🌱 "
format = "on [$symbol$branch]($style) "
[git_status]
conflicted = "🏳"
ahead = "⇡${count}"
behind = "⇣${count}"
diverged = "⇕⇡${ahead_count}⇣${behind_count}"
untracked = "🤷"
stashed = "📦"
modified = "📝"
staged = '[++\($count\)](green)'
renamed = "👅"
deleted = "🗑"
Oh My Bash
Oh My Bash ist ein Framework zur Verwaltung der Bash-Konfiguration mit Themen und Plugins:
# Installieren Sie Oh My Bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
# Bearbeiten Sie ~/.bashrc, um das Thema zu setzen
OSH_THEME="powerline"
Viele Oh My Bash-Themen enthalten standardmäßig Git-Integration.
Oh My Posh
Oh My Posh ist ein modernes, plattformübergreifendes Prompt-Engine, das mit bash, zsh, PowerShell und anderen Shells funktioniert. Es bietet schöne, anpassbare Prompts mit hervorragender Git-Integration und verwendet Nerd Fonts für die Symbolunterstützung.
Installation auf Linux
Installieren Sie Oh My Posh mit einem einzigen Befehl:
# Installieren Sie in ~/bin oder ~/.local/bin (Standard)
curl -s https://ohmyposh.dev/install.sh | bash -s
# Oder geben Sie ein benutzerdefiniertes Installationsverzeichnis an
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/bin
Grundlegende Einrichtung
Fügen Sie Oh My Posh zu Ihrer ~/.bashrc hinzu:
# Initialisieren Sie Oh My Posh mit einem Thema
eval "$(oh-my-posh init bash --config ~/.poshthemes/jandedobbeleer.omp.json)"
Installieren und Verwenden von Themen
Oh My Posh enthält zahlreiche vorgefertigte Themen. Laden Sie sie zuerst herunter:
# Erstellen Sie ein Themenverzeichnis
mkdir ~/.poshthemes
# Laden Sie alle Themen herunter
curl -s https://ohmyposh.dev/themes.json | \
jq -r '.[] | .url' | \
xargs -I {} sh -c 'curl -s {} -o ~/.poshthemes/$(basename {})'
Beliebte Themen sind:
jandedobbeleer.omp.json- Das persönliche Thema des Erstellers mit voller Git-Integrationpowerline.omp.json- Klassischer Powerline-Stilatomic.omp.json- Minimalistisch mit wesentlichen Informationennight-owl.omp.json- Farbreiches Thema mit umfangreichen Git-Details
Wechseln Sie die Themen, indem Sie den Konfigurationspfad ändern:
eval "$(oh-my-posh init bash --config ~/.poshthemes/atomic.omp.json)"
Git-Funktionen
Oh My Posh zeigt automatisch umfassende Git-Informationen an:
- Aktueller Branch-Name
- Commit-Zählungen vor/nach dem Remote
- Arbeitsverzeichnis-Status (sauber/schmutzig)
- Stash-Zählung
- Merge/Rebase-Status
- Tag-Informationen
- Commit-Hash im abgetrennten HEAD-Zustand
Benutzerdefinierte Konfiguration
Erstellen Sie ein benutzerdefiniertes Thema, indem Sie ein vorhandenes kopieren:
# Kopieren Sie ein Thema als Ausgangspunkt
cp ~/.poshthemes/jandedobbeleer.omp.json ~/.mytheme.omp.json
# Bearbeiten Sie Ihr Thema
nano ~/.mytheme.omp.json
# Verwenden Sie Ihr benutzerdefiniertes Thema
eval "$(oh-my-posh init bash --config ~/.mytheme.omp.json)"
Beispiel für die Git-Segment-Konfiguration in JSON:
{
"type": "git",
"style": "powerline",
"powerline_symbol": "",
"foreground": "#193549",
"background": "#fffb38",
"background_templates": [
"{{ if or (.Working.Changed) (.Staging.Changed) }}#FF9248{{ end }}",
"{{ if and (gt .Ahead 0) (gt .Behind 0) }}#ff4500{{ end }}",
"{{ if gt .Ahead 0 }}#B388FF{{ end }}",
"{{ if gt .Behind 0 }}#B388FF{{ end }}"
],
"properties": {
"fetch_status": true,
"fetch_upstream_icon": true,
"branch_icon": " ",
"branch_max_length": 25,
"truncate_symbol": "…"
}
}
Schriftartanforderungen
Oh My Posh funktioniert am besten mit Nerd Fonts für die Symbolunterstützung:
# Laden und installieren Sie eine Nerd Font (Beispiel: FiraCode)
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
curl -fLo "FiraCode Nerd Font.ttf" \
https://github.com/ryanoasis/nerd-fonts/raw/HEAD/patched-fonts/FiraCode/Regular/FiraCodeNerdFont-Regular.ttf
fc-cache -fv
Konfigurieren Sie dann Ihr Terminal, um die Nerd Font zu verwenden.
Vorteile von Oh My Posh
- Plattformübergreifend: Gleiche Konfiguration funktioniert auf Linux, macOS und Windows
- Schnell: In Go für Leistung geschrieben
- Erweiterbar: Modulare Segmente für Git, Zeit, Pfad, Sprachen, Cloud-Anbieter usw.
- Reiche Themen: Große Sammlung von vorgefertigten Themen
- Aktive Entwicklung: Regelmäßige Updates und Verbesserungen
- Terminal-unabhängig: Funktioniert in jedem ANSI-kompatiblen Terminal
Bash-git-prompt
Ein dediziertes Bash-Prompt-Tool, das sich auf Git-Informationen konzentriert:
# Klonen Sie das Repository
git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
# Fügen Sie es zu ~/.bashrc hinzu
if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then
GIT_PROMPT_ONLY_IN_REPO=1
source $HOME/.bash-git-prompt/gitprompt.sh
fi
Leistungsüberlegungen in großen Repositorys
Git-Status-Operationen können in großen Repositorys langsam sein. Hier sind Optimierungsstrategien:
Deaktivieren Sie teure Funktionen selektiv
# In .bashrc, deaktivieren Sie Funktionen bedingt für große Repos
if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
repo_size=$(du -sh .git 2>/dev/null | cut -f1)
# Deaktivieren Sie die Dirty-State-Prüfung für Repos über 100MB
if [[ "$repo_size" =~ ^[0-9]+M$ ]] && [ "${repo_size%M}" -gt 100 ]; then
export GIT_PS1_SHOWDIRTYSTATE=0
fi
fi
Verwenden Sie Git-Konfigurationsoptionen
Konfigurieren Sie Git, um Statusprüfungen zu optimieren:
# Aktivieren Sie den Dateisystem-Monitor für schnellere Statusprüfungen
git config core.fsmonitor true
git config core.untrackedCache true
# Für sehr große Repos, überlegen Sie sich partielle Klone
git config core.commitGraph true
git config gc.writeCommitGraph true
Alternative: Asynchrone Prompts
Tools wie Starship verwenden asynchrone Operationen, um Verzögerungen im Prompt zu verhindern. Der Prompt wird aktualisiert, nachdem die Git-Informationen abgerufen wurden, anstatt zu blockieren.
Fehlerbehebung bei häufigen Problemen
Prompt zeigt keine Git-Informationen an
- Überprüfen Sie, ob git-prompt.sh geladen ist: Führen Sie
type __git_ps1in Ihrem Terminal aus. Wenn es “not found” sagt, ist das Skript nicht geladen. - Überprüfen Sie die Dateiberechtigungen: Stellen Sie sicher, dass git-prompt.sh lesbar ist:
ls -l /path/to/git-prompt.sh - Überprüfen Sie, ob Sie sich in einem Git-Repository befinden: Führen Sie
git statusaus, um dies zu bestätigen - Überprüfen Sie die PS1-Syntax: Stellen Sie sicher, dass
$(__git_ps1)enthalten und richtig in Anführungszeichen gesetzt ist
Farben werden nicht angezeigt
- Escape-Sequenz-Probleme: Farben in PS1 müssen in
\[ \]eingekapselt werden, um Probleme mit der Zeilenumbrüche zu verhindern - Terminal-Unterstützung: Überprüfen Sie, ob Ihr Terminal ANSI-Farben unterstützt:
echo -e "\033[31mRed Text\033[0m" - Reset-Codes: Beenden Sie immer Farbsequenzen mit dem Reset-Code
\033[00m
Prompt bricht die Zeilenumbrüche
Wenn Farben verwendet werden, müssen nicht druckbare Escape-Sequenzen in \[ und \] eingekapselt werden:
# Falsch - verursacht Zeilenumbrüche-Probleme
PS1="\033[32m\u\033[00m\$ "
# Richtig
PS1="\[\033[32m\]\u\[\033[00m\]\$ "
Langsamer Prompt in WSL oder Netzwerk-Laufwerken
Git-Operationen auf Windows-Netzwerkfreigaben oder WSL können langsam sein:
# Deaktivieren Sie teure git-prompt-Funktionen auf langsamen Dateisystemen
export GIT_PS1_SHOWDIRTYSTATE=0
export GIT_PS1_SHOWUNTRACKEDFILES=0
Überlegen Sie, ob Sie die native Windows Git Bash anstelle von WSL für Repositorys auf Windows-Laufwerken verwenden.
Integration in Entwicklungsworkflows
Ein git-bewusster Prompt wird noch mächtiger, wenn er mit anderen Shell-Erweiterungen kombiniert wird:
Git-Aliase für schnelle Navigation
Kombinieren Sie Ihren verbesserten Prompt mit nützlichen Git-Aliasen, um die Effizienz zu maximieren. Für eine umfassende Liste von Git-Befehlen und Shortcuts sehen Sie unseren GIT-Befehle-Cheatsheet.
# Fügen Sie es zu ~/.gitconfig oder ~/.bashrc hinzu
alias gs='git status'
alias gb='git branch'
alias gc='git checkout'
alias gp='git pull'
alias gpu='git push'
Bedingtes Prompt-Verhalten
# Unterschiedliche Prompt-Farben für unterschiedliche Zustände
__git_ps1_colorize() {
local git_status="$(git status 2>/dev/null)"
if [[ $git_status =~ "nothing to commit" ]]; then
echo -e "\[\033[32m\]" # Grün für sauber
else
echo -e "\[\033[31m\]" # Rot für schmutzig
fi
}
PS1='\u@\h:\w$(__git_ps1_colorize)$(__git_ps1 " (%s)")\[\033[00m\]\$ '
Integration des Terminal-Titelbalkens
Aktualisieren Sie den Terminal-Titel mit Repository-Informationen:
PROMPT_COMMAND='echo -ne "\033]0;${PWD##*/}$(__git_ps1 " [%s]")\007"'
Best Practices und Empfehlungen
- Halten Sie es lesbar: Überladen Sie Ihren Prompt nicht mit zu vielen Informationen
- Verwenden Sie Farben strategisch: Unterschiedliche Farben für unterschiedliche Zustände (sauber vs. schmutzig)
- Testen Sie in verschiedenen Szenarien: Überprüfen Sie, ob der Prompt in regulären Verzeichnissen, Git-Repositorys und während Git-Operationen funktioniert
- Dokumentieren Sie Ihre Konfiguration: Kommentieren Sie Ihre .bashrc, damit Sie wissen, was jeder Teil tut
- Sichern Sie Ihre Konfiguration: Versionskontrolle Ihrer Dotfiles in einem Git-Repository. Wenn Sie Ihren eigenen Git-Server betreiben, möchten Sie möglicherweise Gitea Server Installation als eine leichtgewichtige selbstgehostete Option erkunden
- Berücksichtigen Sie Ihren Workflow: Aktivieren Sie nur die Funktionen, die Sie tatsächlich benötigen
- Verwenden Sie moderne Tools, wenn möglich: Starship und ähnliche Tools sind gut getestet und leistungsfähig
Für selbstgehostete Git-Lösungen erfahren Sie mehr über Gitea Backup und Wiederherstellung, um sicherzustellen, dass Ihre Repositorys geschützt sind. Wenn Sie an der Automatisierung Ihrer Git-Workflows interessiert sind, erkunden Sie unseren GitHub Actions Cheatsheet.
Nützliche Links
- Git offizielle Dokumentation zu git-prompt.sh
- Starship Prompt Offizielle Seite
- Oh My Posh Offizielle Dokumentation
- Oh My Posh Themes Galerie
- Bash Hackers Wiki - PS1 Konfiguration
- Oh My Bash GitHub Repository
- Bash-git-prompt GitHub Repository
- Nerd Fonts Offizielle Seite
- ANSI Escape Code Referenz
- Git Performance-Tipps für große Repositories