Jak pokolorować wyjście statusu git?

93

Chcę pokolorować wyjście statusu git, tak aby:

untracked files = magenta
new files = green
modified files = blue
deleted files = red

Zamiast tego widzę pliki przemieszczane na zielono, a pliki niestacjonarne na niebiesko: zrzut ekranu statusu git

Mój plik .gitconfig jest konfigurowany z następującymi elementami na podstawie wyszukiwania:

[color]
status = auto

[color "status"]
added = green
changed = blue
untracked = magenta
deleted = red
Andy
źródło
2
Uwaga: git 2.9.1 obsługuje atrybuty kursywą i strajkiem. Zobacz moją edycję poniżej.
VonC,

Odpowiedzi:

132

Z dokumentu konfiguracji git :

color.status.<slot>

Użyj niestandardowego koloru do kolorowania statusu. <slot>jest jednym z:

  • header (tekst nagłówka komunikatu statusowego),
  • addedlub updated(pliki, które zostały dodane, ale nie zostały zatwierdzone),
  • changed (pliki, które zostały zmienione, ale nie zostały dodane do indeksu),
  • untracked (pliki, które nie są śledzone przez git),
  • branch (obecna branża),
  • nobranch (kolor, w którym wyświetlane jest ostrzeżenie o braku gałęzi, domyślnie czerwony),
  • localBranchlub remoteBranch(odpowiednio nazwy lokalnych i zdalnych oddziałów, gdy informacje o oddziale i śledzeniu są wyświetlane w skróconym formacie statusu),
  • unmerged (pliki, które mają niescalone zmiany).

Wartości tych zmiennych można określić jak w color.branch.<slot>.

Więc to zadziała:

git config color.status.changed blue
git config color.status.untracked magenta

Jednak:

new files = green
deleted files = red

Nie jest możliwe: musisz wybrać jeden kolor:

  • jeśli zostaną dodane do indeksu, wybiorą kolor color.status.added.
  • jeśli nie zostaną dodane do indeksu, wybiorą kolor lub color.status.modified.

Oczywiście, jak skomentował przez elboletaire :

Pamiętaj, aby włączyć wyjście kolorowania, jeśli nie zostało włączone wcześniej:

git config --global color.ui true

Shaun Luttin dodaje:

Polecenie może również przyjmować wiele parametrów w cudzysłowie. Obejmuje to dwa kolory (tło pierwszego planu) z tej listy:

normalny, czarny, czerwony, zielony, żółty, niebieski, magenta, cyjan i biały;

i zawiera również jeden atrybut (styl) z tej listy:

bold, dim, ul, blink and reverse.

Więc to zadziała:

git config color.status.changed "blue normal bold"
git config color.status.header "white normal dim"

Uwaga: z git 2.9.1 (lipiec 2016), schemat kolorowania wyjścia nauczył się dwóch nowych atrybutów, kursywy istrajk, oprócz istniejącego pogrubienia, rewersu itp

Zobacz zatwierdzenie 9dc3515 , zatwierdzenie 54590a0 , zatwierdzenie 5621068 , zatwierdzenie df8e472 , zatwierdzenie ae989a6 , zatwierdzenie adb3356 , zatwierdzenie 0111681 (23 czerwca 2016) autorstwa Jeffa Kinga ( peff) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu 3c5de5c , 11 lipca 2016 r.)

Pozwala także no-na negowanie atrybutów

Używanie „ no-bold” zamiast „ nobold” jest łatwiejsze do odczytania i bardziej naturalne w pisaniu (zresztą dla mnie, mimo że to ja byłem osobą, która wprowadziła „nobold” w pierwszej kolejności). Łatwo jest zezwolić na jedno i drugie.

VonC
źródło
31
Pamiętaj, aby włączyć wyświetlanie kolorowania, jeśli nie zostało włączone wcześniej:git config --global color.ui true
elboletaire
1
@elboletaire dobra uwaga. Zawarłem to w odpowiedzi dla większej widoczności.
VonC,
1
Dzięki, odpowiedzią jest color.ui.
Robeezy,