Handig dat je in je prompt kunt zien in welke directory je je bevindt, of zelfs als wie je op welke server bent ingelogd. Maar helemaal feestelijk wordt het pas met bash-git-prompt.

Zijn er nog nieuwe of gewijzigde bestanden die nog niet ge-commit zijn? Zijn er nog commits die nog niet gepusht zijn naar centraal? In welke branch zit ik eigenlijk?

Vragen, vragen, vragen, die roepen om een antwoord. Wat zou het toch handig zijn als je in een oogopslag kunt zien wat de status is van de git-repository waarin je staat. Toch?

Goed nieuws: het kan. Zelfs met fancy kleurtjes.

Er zijn meerdere manieren, onder meer met zsh en bash. Ik licht hier de bash-variant eruit, omdat bash de default shell is van veel Linux-distributies.

Installatie

Clone de bash-git-prompt repo naar je homedirectory.

git clone https://github.com/magicmonty/bash-git-prompt.git ~/.bash-git-prompt --depth=1

Zet de volgende configuratie in je ~/.bashrc configuratiefile:
if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then
GIT_PROMPT_ONLY_IN_REPO=1
source $HOME/.bash-git-prompt/gitprompt.sh
fi

Maak deze settings actief (uit/inloggen of nieuwe bash starten).

En wat zie je dan?

Als je in een gitrepository zit, zie je zoiets als het onderstaande:

Gitsie

In die lokale repository testrepo heb ik een aantal wijzigen gedaan, waardoor de prompt er als bovenstaand uit komt te zien:

~/testrepo  in welke directory zit je?

Tussen de [blokhaken] staat de status van de repository. Als achter de branchenaam een groen vinkje staat, is hij helemaal up to date. Maar dat is in het voorbeeld niet het geval:

master – branchnaam
↑·1      – hoeveel commits zijn er, die nog niet gepushed zijn? (1)
●3       – hoeveel staged files zijn er, die nog niet in een commit zitten? (3)
✚ 1     – hoeveel gewijzigde bestanden zijn er, die nog niet staged zijn voor een commit? (1)
…2     – hoeveel nieuwe bestanden zijn er (untracked files)? (2)

En als ik dit voor alle gebruikers wil doen?

Appeltje eitje. In plaats van het clonen van de repository naar je homedirectory doe je dit naar een plek waar iedereen bij kan. En via een centrale bash-profile-aanpassing wordt het actief voor iedere bash-gebruiker. Bijvoorbeeld:

# git clone https://github.com/magicmonty/bash-git-prompt.git \
/usr/local/etc/bash-git-prompt --depth=1
# echo 'export GIT_PROMPT_ONLY_IN_REPO=1' \
>/etc/profile.d/gitprompt.sh
# echo 'source /usr/local/etc/bash-git-prompt/gitprompt.sh' \
>>/etc/profile.d/gitprompt.sh

In dit voorbeeld wordt een instelling gedaan (GIT_PROMPT_ONLY_IN_REPO=1) die ervoor zorgt dat je alleen de git-prompt ziet wanneer je huidige directory zich in een git-repository bevindt. Op die manier zijn nog veel meer instellingen te doen, waarmee je o.a. de kleuren kunt beïnvloeden. Zie https://github.com/magicmonty/bash-git-prompt.

Tada!

Voor een encore zie de ZSH-variant op https://github.com/olivierverdier/zsh-git-prompt. Veel plezier.