Zrobiłem dwa warianty w oparciu o odpowiedź VonC .
Mój pierwszy wariant:
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 "|"
Obsługuje lokalne i zdalne gałęzie ( -a
), obsługuje stan odłączonej głowy (dłuższe polecenie sed, chociaż rozwiązanie jest trochę prymitywne - po prostu zastępuje informacje o odłączonej gałęzi słowem kluczowym HEAD), dodaje w zatwierdzeniu temat (% s ), i umieszcza rzeczy w kolumnach za pomocą znaków potoku dosłownego w ciągu formatu i przekazuje wynik końcowy do column -t -s "|"
. (Możesz użyć dowolnego separatora, o ile jest to coś, czego nie oczekujesz w pozostałej części wyniku).
Mój drugi wariant jest dość hakerski, ale naprawdę chciałem czegoś, co nadal ma wskaźnik „to jest gałąź, na której aktualnie jesteś”, tak jak robi to polecenie gałęzi.
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 "|"
Powoduje to, *
że that oznacza bieżącą gałąź w słowo kluczowe, a gdy treść pętli widzi słowo kluczowe, zamiast tego ustawia flagę i nic nie wyświetla. Flaga jest używana do wskazania, że dla następnego wiersza należy zastosować inne formatowanie. Jak powiedziałem, jest to totalnie hacky, ale działa! (Przeważnie. Z jakiegoś powodu moja ostatnia kolumna staje się nieaktualna w bieżącej linii gałęzi).