Toon Git-vertakking & status in Bash-prompt
Aanpassen van de Bash-prompt voor directe Git-context
Een goed geconfigureerde bash prompt die git repository informatie toont kan het ontwikkelingswerkflow aanzienlijk verbeteren.
In plaats van constant git status en git branch commando’s uit te voeren, kun je deze essentiële informatie altijd zichtbaar houden in je terminal prompt.

Oh-my-push prompt voorbeeld.
Waarom Git informatie toevoegen aan je Bash Prompt?
Wanneer je meerdere git repositories en branches gebruikt gedurende de dag, wordt contextswitchen een aanzienlijke productiviteitsverlies. Een git-bewuste prompt lost meerdere algemene problemen op:
- Voorkomt branch verwarring: Je weet altijd welke branch je op is voordat je commit
- Vermindert commando overhead: Geen behoefte om constant
git statusengit branchuit te voeren - Directe visuele feedback: Zie ongecommiteerde wijzigingen, ongevolgde bestanden en upstream status op een blik
- Minder fouten: Vermijd onbedoelde commits op de verkeerde branch of het pushen van vuil code
Begrijpen van de Bash PS1 Variabele
De bash prompt wordt beheerd door de PS1 omgevingsvariabele. Deze variabele kan bevatten:
- Letterlijke tekst: Elke karakter die je wilt tonen
- Escape sequences: Speciale codes die beginnen met
\die dynamische informatie tonen - Commando substitutie: Commando’s in
$(...)die uitgevoerd en hun uitvoer tonen - ANSI kleur codes: Escape sequences die de tekstkleuren veranderen
Algemene PS1 escape sequences zijn:
\u- huidige gebruikersnaam\h- hostnaam\w- huidige werkmap\$-#voor root,$voor normale gebruiker\t- huidige tijd in 24-uur formaat
Een basis prompt zou er zo uitzien: PS1='\u@\h:\w\$ ' en produceert uitvoer zoals user@hostname:/path/to/dir$ . Voor meer bash fundamentele informatie en escape sequences, zie onze uitgebreide Bash Cheat Sheet.
Methode 1: Gebruik van Git’s ingebouwde git-prompt.sh Script
Git distributies bevatten een helper script genaamd git-prompt.sh dat de __git_ps1 functie biedt. Dit is de meest betrouwbare en functierijke aanpak.
Locatie van git-prompt.sh
Eerst, vind waar het script zich bevindt op je systeem:
# Algemene locaties op Linux
/usr/share/git-core/contrib/completion/git-prompt.sh
/etc/bash_completion.d/git-prompt
/usr/lib/git-core/git-sh-prompt
# Algemene locaties op macOS (met Homebrew)
/usr/local/etc/bash_completion.d/git-prompt.sh
/Library/Developer/CommandLineTools/usr/share/git-core/git-prompt.sh
# Zoek het als het nodig is
find /usr -name git-prompt.sh 2>/dev/null
Basisconfiguratie
Voeg het volgende toe aan je ~/.bashrc of ~/.bash_profile:
# Source de git-prompt script
source /usr/lib/git-core/git-sh-prompt
# Stel je prompt in om git informatie te bevatten
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[01;31m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
De $(__git_ps1 " (%s)") deel roept de functie aan, en %s wordt vervangen door de huidige branchnaam. De omringende spaties en haakjes vormen het mooi.
Na het bewerken, herlaad je configuratie:
source ~/.bashrc
Geavanceerde git-prompt.sh Opties
Git-prompt.sh wordt krachtig wanneer je zijn optionele functies inschakelt via omgevingsvariabelen:
# Toon ongecommiteerde (*) en gecommitteerde (+) wijzigingen
export GIT_PS1_SHOWDIRTYSTATE=1
# Toon als er gearchiveerde wijzigingen ($)
export GIT_PS1_SHOWSTASHSTATE=1
# Toon als er ongevolgde bestanden (%)
export GIT_PS1_SHOWUNTRACKEDFILES=1
# Toon het verschil tussen HEAD en upstream
# Opties: auto, verbose, name, legacy, git, svn
export GIT_PS1_SHOWUPSTREAM="auto"
# Schakel gekleurde hints in (vereist bash 4.0+)
export GIT_PS1_SHOWCOLORHINTS=1
# Toon repository status tijdens operaties
# (MERGING, REBASING, BISECTING, etc.)
export GIT_PS1_DESCRIBE_STYLE="default"
Hier is wat de indicatoren betekenen:
*- Ongecommitteerde wijzigingen (gewijzigde bestanden niet toegevoegd)+- Gecommitteerde wijzigingen (bestanden toegevoegd maar niet gecommit)$- Er zijn gearchiveerde wijzigingen%- Er zijn ongevolgde bestanden aanwezig<- Achterstand op de upstream branch>- Vooruit op de upstream branch<>- Afgedwaald van de upstream=- Gelijk aan de upstream
Compleet Voorbeeld van Configuratie
Hier is een uitgebreide ~/.bashrc configuratie:
# Source 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
# Configure git-prompt opties
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
# Kleur definities
COLOR_RESET='\[\033[00m\]'
COLOR_USER='\[\033[01;32m\]' # Groen
COLOR_PATH='\[\033[01;34m\]' # Blauw
COLOR_GIT='\[\033[01;33m\]' # Geel
# Stel de prompt in
PS1="${COLOR_USER}\u@\h${COLOR_RESET}:${COLOR_PATH}\w${COLOR_GIT}"'$(__git_ps1 " (%s)")'"${COLOR_RESET}\$ "
Methode 2: Handmatige Git Commando Substitutie
Als je geen toegang hebt tot git-prompt.sh of een minimale oplossing wilt, kun je direct git commando’s uitvoeren in je prompt:
# Alleen branch naam
PS1='\u@\h:\w$(git branch 2>/dev/null | grep "^*" | colrm 1 2 | sed "s/^/ (/;s/$/)/")\$ '
# Branch naam met status indicator
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\]\$ '
Deze aanpak is meer draagbaar maar mist de sofistiek van git-prompt.sh en kan langzamer zijn in grote repositories.
Methode 3: Moderne Prompt Tools
Voor een rijkere ervaring met minimale configuratie, overweeg deze moderne alternatieven:
Starship Prompt
Starship is een snelle, aanpasbare prompt geschreven in Rust die werkt over meerdere shells (bash, zsh, fish, PowerShell).
# Installeer Starship
curl -sS https://starship.rs/install.sh | sh
# Voeg toe aan ~/.bashrc
eval "$(starship init bash)"
Starship detecteert automatisch git repositories en toont:
- Branchnaam
- Commit hash wanneer losgekoppeld
- Repository status (samenvoegen, rebase, etc.)
- Aantal gewijzigde bestanden
- Vooruit/achterstand status op upstream
- En veel meer met aanpasbare iconen
Configureer het via ~/.config/starship.toml:
[git_branch]
symbol = "🌱 "
format = "op [$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 is een kader voor het beheren van bash configuratie met thema’s en plugins:
# Installeer Oh My Bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
# Bewerk ~/.bashrc om thema in te stellen
OSH_THEME="powerline"
Veel Oh My Bash thema’s bevatten standaard git integratie.
Oh My Posh
Oh My Posh is een moderne, cross-platform prompt engine die werkt met bash, zsh, PowerShell en andere shells. Het biedt mooie, aanpasbare prompts met uitstekende git integratie en gebruikt Nerd Fonts voor icon ondersteuning.
Installatie op Linux
Installeer Oh My Posh met één commando:
# Installeer naar ~/bin of ~/.local/bin (standaard)
curl -s https://ohmyposh.dev/install.sh | bash -s
# Of specifieke installatie map
curl -s https://ohmyposh.dev/install.sh | bash -s -- -d ~/bin
Basisinstelling
Voeg Oh My Posh toe aan je ~/.bashrc:
# Initialiseer Oh My Posh met een thema
eval "$(oh-my-posh init bash --config ~/.poshthemes/jandedobbeleer.omp.json)"
Installeren en Gebruiken van Themen
Oh My Posh bevat veel vooraf gemaakte thema’s. Download ze eerst:
# Maak thema map aan
mkdir ~/.poshthemes
# Download alle thema's
curl -s https://ohmyposh.dev/themes.json | \
jq -r '.[] | .url' | \
xargs -I {} sh -c 'curl -s {} -o ~/.poshthemes/$(basename {})'
Populaire thema’s zijn:
jandedobbeleer.omp.json- Het persoonlijke thema van de maker met volledige git integratiepowerline.omp.json- Classic powerline stijlatomic.omp.json- Minimalistisch met essentiële informatienight-owl.omp.json- Kleurrijke thema met uitgebreide git details
Wissel thema’s door de config pad te veranderen:
eval "$(oh-my-posh init bash --config ~/.poshthemes/atomic.omp.json)"
Git Functies
Oh My Posh toont automatisch uitgebreide git informatie:
- Huidige branchnaam
- Aantal commits vooruit/achterstand op remote
- Werktuig status (schone/vuile)
- Aantal gearchiveerde wijzigingen
- Samenvoeging/rebase status
- Tag informatie
- Commit hash in losgekoppeld HEAD staat
Aangepaste Configuratie
Maak een aangepast thema door een bestaand te kopiëren:
# Kopieer een thema als startpunt
cp ~/.poshthemes/jandedobbeleer.omp.json ~/.mytheme.omp.json
# Bewerk je thema
nano ~/.mytheme.omp.json
# Gebruik je aangepaste thema
eval "$(oh-my-posh init bash --config ~/.mytheme.omp.json)"
Voorbeeld git segment configuratie 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": "…"
}
}
Font Vereisten
Oh My Posh werkt het beste met Nerd Fonts voor icon ondersteuning:
# Download en installeer een Nerd Font (voorbeeld: 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
Vervolgens configureer je je terminal om de Nerd Font te gebruiken.
Voordelen van Oh My Posh
- Cross-platform: Dezelfde configuratie werkt op Linux, macOS en Windows
- Snel: Geschreven in Go voor prestaties
- Uitbreidbaar: Modulaire segmenten voor git, tijd, pad, talen, cloudproviders, etc.
- Rijke thema’s: Grote verzameling vooraf gemaakte thema’s
- Actieve ontwikkeling: Regelmatige updates en verbeteringen
- Terminal onafhankelijk: Werkt in elke ANSI-compatibele terminal
Bash-git-prompt
Een toegewijde bash prompt tool gericht op git informatie:
# Clone de repository
git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1
# Voeg toe aan ~/.bashrc
if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then
GIT_PROMPT_ONLY_IN_REPO=1
source $HOME/.bash-git-prompt/gitprompt.sh
fi
Prestatieoverwegingen in grote repositories
Git status operaties kunnen traag zijn in grote repositories. Hier zijn optimalisatiestrategieën:
Selectief uitschakelen van duurzame functies
# In .bashrc, conditioneel uitschakelen van functies voor grote repos
if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
repo_size=$(du -sh .git 2>/dev/null | cut -f1)
# Uitschakelen van dirty state check voor repos boven 100MB
if [[ "$repo_size" =~ ^[0-9]+M$ ]] && [ "${repo_size%M}" -gt 100 ]; then
export GIT_PS1_SHOWDIRTYSTATE=0
fi
fi
Gebruik van Git configuratieopties
Configureer git om statuscontroles te optimaliseren:
# Schakel bestandssysteem monitor in voor snellere statuscontroles
git config core.fsmonitor true
git config core.untrackedCache true
# Voor zeer grote repos, overweeg gedeeltelijke clones
git config core.commitGraph true
git config gc.writeCommitGraph true
Alternatief: Asynchrone prompts
Tools zoals Starship gebruiken asynchrone operaties om promptvertraging te voorkomen. De prompt wordt bijgewerkt na het ophalen van de git informatie, in plaats van te blokkeren.
Probleemoplossing van algemene problemen
Prompt toont geen git informatie
- Controleer of git-prompt.sh is ingeladen: Voer
type __git_ps1uit in je terminal. Als het zegt “niet gevonden”, is het script niet geladen. - Controleer bestandsrechten: Zorg dat git-prompt.sh leesbaar is:
ls -l /pad/naar/git-prompt.sh - Controleer of je in een git repository bent: Voer
git statusuit om te bevestigen - Controleer PS1 syntaxis: Zorg dat
$(__git_ps1)is opgenomen en correct aangehaald
Kleuren tonen niet
- Escape sequence problemen: Kleuren in PS1 moeten worden omringd door
\[ \]om line wrap problemen te voorkomen - Terminal ondersteuning: Controleer of je terminal ANSI kleuren ondersteunt:
echo -e "\033[31mRode tekst\033[0m" - Reset codes: Eindig altijd kleurreeksen met reset code
\033[00m
Prompt breekt line wrap
Wanneer je kleuren gebruikt, moeten niet-afdrukbare escape sequences worden omringd door \[ en \]:
# Fout - veroorzaakt line wrap problemen
PS1="\033[32m\u\033[00m\$ "
# Correct
PS1="\[\033[32m\]\u\[\033[00m\]\$ "
Traag prompt in WSL of netwerk drives
Git operaties op Windows netwerk shares of WSL kunnen traag zijn:
# Uitschakelen van duurzame git-prompt functies op traag bestandssysteem
export GIT_PS1_SHOWDIRTYSTATE=0
export GIT_PS1_SHOWUNTRACKEDFILES=0
Overweeg het gebruik van native Windows Git bash in plaats van WSL voor repositories op Windows drives.
Integratie met ontwikkelingswerkstromen
Een git-bewuste prompt wordt nog krachtiger wanneer gecombineerd met andere shell verbeteringen:
Git alias voor snelle navigatie
Combineer je verbeterde prompt met nuttige git alias om efficiëntie te maximaliseren. Voor een uitgebreide lijst van git commando’s en snelkoppelingen, zie onze GIT commando’s cheat sheet.
# Voeg toe aan ~/.gitconfig of ~/.bashrc
alias gs='git status'
alias gb='git branch'
alias gc='git checkout'
alias gp='git pull'
alias gpu='git push'
Voorwaardelijke prompt gedrag
# Verschillende prompt kleuren voor verschillende statussen
__git_ps1_colorize() {
local git_status="$(git status 2>/dev/null)"
if [[ $git_status =~ "nothing to commit" ]]; then
echo -e "\[\033[32m\]" # Groen voor schone
else
echo -e "\[\03段\]" # Rood voor vuil
fi
}
PS1='\u@\h:\w$(__git_ps1_colorize)$(__git_ps1 " (%s)")\[\033[00m\]\$ '
Terminal titelbalk integratie
Update de terminal titel met repository informatie:
PROMPT_COMMAND='echo -ne "\033]0;${PWD##*/}$(__git_ps1 " [%s]")\007"'
Beste praktijken en aanbevelingen
- Houd het leesbaar: Overlaad je prompt niet met te veel informatie
- Gebruik kleuren strategisch: Verschillende kleuren voor verschillende statussen (schone vs vuil)
- Test in meerdere scenario’s: Controleer of de prompt werkt in reguliere mappen, git repos en tijdens git operaties
- Documenteer je configuratie: Voeg opmerkingen toe aan je .bashrc zodat je weet wat elk deel doet
- Back-up je configuratie: Version controleer je dotfiles in een git repository. Als je je eigen git server draait, wil je mogelijk Gitea server installeren als lichte zelfgehoste optie
- Overweeg je werkstroom: Schakel alleen de functies in die je daadwerkelijk nodig hebt
- Gebruik moderne tools wanneer mogelijk: Starship en vergelijkbare tools zijn goed getest en prestatiekrachtig
Voor zelfgehoste git oplossingen, lees over Gitea Backup en Restore om ervoor te zorgen dat je repositories beschermd zijn. Als je geïnteresseerd bent in het automatiseren van je git werkstromen, verkennen we onze GitHub Actions cheat sheet voor uitgebreide CI/CD automatisering.
Nuttige links
- Git officiële documentatie over git-prompt.sh
- Starship Prompt Officiële Site
- Oh My Posh Officiële Documentatie
- Oh My Posh Themen Galerie
- Bash Hackers Wiki - PS1 Configuratie
- Oh My Bash GitHub Repository
- Bash-git-prompt GitHub Repository
- Nerd Fonts Officiële Site
- ANSI Escape Code Referentie
- Git Prestatietips voor grote repositories