Dienstag, 12. Februar 2013

Git Status in der Bash, Teil 2

Vor ein paar Jahren hatte habe ich unter Git Status in der Bash meine PS1-Definition abgetippert. Das war eine Kombination aus Bash-Funktionen und einem Prompt-String, die auch lange Zeit ganz gut funktioniert hat. Mit einem der aktuellen Git-Updates (aus der 1.8x-Reihe, wenn ich mich nicht irre) ist das dann umgefallen: Weil Git eine Ausgabezeile geringfügig geändert hat, zeigte das Skript grundsätzlich alle Working Directories als "modified" an. Ärgerlich.

Aber ein Grund, etwas zu verbessern. Die Skripte, die den Status des aktuellen Working Directory anzeigen, gibt's nämlich im Rahmen der normalen Git-Installation unter contrib. (Wer das in seinem Ubuntu nicht findet: In den Git-Sourcen ist das vollständige contrib-Verzeichnis enthalten, einfach einmal clonen und dann contrib/completion/git-prompt.sh einbinden).

Jetzt kommen die folgenden Zeilen in die .profile/.bashrc:

. /contrib/completion/git-prompt.sh
PS1='\[\e]0;\w $(__git_ps1 " %s")\a\]\n\[\e[32m\]\u@\h \
    \[\e[33m\]\w $(__git_ps1 " %s")\[\e[0m\]\n\$ '

Noch ein wenig an den eigenen Geschmack anpassen, und schon ist es fertig. Wer es ein wenig hübscher will, findet in git-prompt.sh noch Hinweise, was man noch so alles tweaken kann.

Das Beste zum Schluss: Da das contrib-Verzeichnis von den Git-Contributors gepflegt wird, bekommt man immer funktionierende für die gerade verwendete Git-Version.

2 Kommentare:

Unknown hat gesagt…

Ich bin ja sehr glücklich seit ich die ZSH nutze. Vorkonfiguriert für den Mac (https://github.com/robbyrussell/oh-my-zsh) eine Freude damit zu arbeiten. Alle möglichen completions drin - u.a. auch für Unterkommandos und git branches. Und natürlich mit der Möglichkeit den Promt anhand des Git Status zu setzen. Sehr schick.

Gruß
Sebastian

ketchup hat gesagt…

Ja, die ZSH hat bei mir auch einen guten Eindruck hinterlassen. Muss Deinen Link mal auf meinem Mac ausprobieren, danke!

Auf Arbeit ist meine Kiste etwas... überlastet, und da hatte ich den Eindruck, dass Bash weniger träge war als ZSH. Kann auch an den completions liegen. Zudem ist die ZSH nicht überall installiert.

Aber vielleicht versuche ich's diese Woche nochmal mit der ZSH. :)

Grüße,
/ketchup/