Huidige Git-branch en -status in je prompt tonen
Tagged:  •    •    •  

Wie veelvuldig git gebruikt, zal vaak de commando's git status en/of git branch uitvoeren om te kijken in welke branch momenteel actief is en of er nog wijzigingen rondhangen die nog niet gecommit zijn.

Gelukkig komt er bij git een script mee voor Bash waarmee je dat automatisch in je prompt kan laten zien in wat voor toestand je repository zich begeeft.

Om te beginnen dient men het pakket bash-completion te installeren, voor Arch Linux gaat dat simpelweg met:

pacman -S bash-completion

Vervolgens moet het persoonlijke startscript voor Bash aangepast worden zodat deze zogenaamde completion scripts in gebruik genomen zullen worden. Open het bestand ~/.bashrc en voeg de volgende regels toe:

# Bash completion
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

Het is nu zaak om de prompt aan te passen. Voeg de volgende regel toe aan het bestand:

export PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[01;33m\]$(__git_ps1)\[\033[01;34m\] \$\[\033[00m\] '

Dit laat gebruikersnaam + hostnaam in het groen zien en de huidige werkdirectory in het blauw. Alleen wanneer je je in een Git-repository bevindt, zal er tussen haakjes in het geel de huidige branch-naam bij zien. Wanneer je al een flitsende prompt hebt is het een kwestie van de functieaanroep __git_ps1 in te bouwen.

Standaard laat __git_ps1 niet zien of een repository nog losliggende wijzingen heeft. Dit kan je inschakelen door de volgende regel voor de PS1-regel te plaatsen:

export GIT_PS1_SHOWDIRTYSTATE=1

Dit laat een sterretje * zien als er wijzigingen zijn die nog niet gecommit zijn. Ook laat het een plusje + zien als er wijzigingen zijn die nog niet gecommit zijn maar zich wel in de zogenaamde staging area bevinden (na een git add). Wel moet opgemerkt worden dat het inschakelen van deze variable het ingaan van een Git-repository een stuk trager zal maken. De repository wordt namelijk gecontroleerd op wijzigingen en dit kost (eenmalig) wat tijd.

Wanneer de PS1-variabele is aangepast, moet ~/.bashrc nog opnieuw geladen worden:

source ~/.bashrc

En zie daar het resultaat:

bram@s000000 ~/tmp/nobackup/checkouts/git/contrib/completion (master) $