Ich habe zwei Varianten gemacht, basierend auf VonCs Antwort .
Meine erste Variante:
for k in `git branch -a | sed -e s/^..// -e 's/(detached from .*)/HEAD/'`; do echo -e `git log -1 --pretty=format:"%Cgreen%ci |%Cblue%cr |%Creset$k |%s" $k --`;done | sort | column -t -s "|"
Dies behandelt lokale und entfernte Zweige ( -a
), behandelt den Status des getrennten Kopfes (der längere Befehl sed, obwohl die Lösung etwas grob ist - er ersetzt nur die Informationen des getrennten Zweigs durch das Schlüsselwort HEAD), fügt das Festschreibungssubjekt hinzu (% s ) und fügt Dinge über Literal-Pipe-Zeichen in der Formatzeichenfolge in Spalten ein und übergibt das Endergebnis an column -t -s "|"
. (Sie können alles als Trennzeichen verwenden, solange Sie dies im Rest der Ausgabe nicht erwarten.)
Meine zweite Variante ist ziemlich hackig, aber ich wollte wirklich etwas, das immer noch einen Indikator für "Dies ist der Zweig, in dem Sie sich gerade befinden" hat, wie es der Befehl branch tut.
CURRENT_BRANCH=0
for k in `git branch -a | sed -e 's/\*/CURRENT_BRANCH_MARKER/' -e 's/(detached from .*)/HEAD/'`
do
if [ "$k" == 'CURRENT_BRANCH_MARKER' ]; then
# Set flag, skip output
CURRENT_BRANCH=1
elif [ $CURRENT_BRANCH == 0 ]; then
echo -e `git log -1 --pretty=format:"%Cgreen%ci |%Cblue%cr |%Creset$k |%s" $k --`
else
echo -e `git log -1 --pretty=format:"%Cgreen%ci |%Cblue%cr |%Creset* %Cgreen$k%Creset |%s" $k --`
CURRENT_BRANCH=0
fi
done | sort | column -t -s "|"
Dadurch wird der *
, der den aktuellen Zweig markiert, in ein Schlüsselwort umgewandelt. Wenn der Schleifenkörper das Schlüsselwort sieht, setzt er stattdessen ein Flag und gibt nichts aus. Das Flag gibt an, dass für die nächste Zeile eine alternative Formatierung verwendet werden soll. Wie ich schon sagte, es ist total hacky, aber es funktioniert! (Meistens. Aus irgendeinem Grund wird meine letzte Spalte in der aktuellen Zweigleitung veraltet.)