Jak pokolorować wyjście git?


255

Czy istnieje sposób na kolorowe wyjście dla git (lub dowolnego polecenia)?

Rozważać:

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   app/models/message_type.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
baller@Laptop:~/rails/spunky-monkey$ git add app/models

I

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   app/models/message_type.rb
#

Dane wyjściowe wyglądają tak samo, ale informacje są zupełnie inne: plik został zmieniony ze sceny niestacjonarnej na etapową w celu zatwierdzenia.

Czy istnieje sposób pokolorowania wydruku? Na przykład pliki, które nie są etapowane, są czerwone, a etapowe zielone?

A może nawet Changes not staged for commit:czerwony i # Changes to be committed:zielony?

Praca w Ubuntu.

EDIT: googlowania uznało tę odpowiedź, która działa świetnie: git config --global --add color.ui true.

Czy istnieje jednak bardziej ogólne rozwiązanie dodawania koloru do wyniku polecenia?


1
Chcesz czegoś, co pokoloruje wszystkie wyjścia poleceń? Skąd miałby wiedzieć, które części pokolorować?
Michael Mrozek

Sądzę, że istniał sposób skonfigurowania go za pomocą wyrażenia regularnego: każdy kolor może mieć wyrażenie początkowe. I może istnieć domyślny regex koloru, aby wyłączyć wszystkie kolory. A jeśli pojawi się tekst „foo”, wyświetl go w określonym kolorze ...
B Siedem

Odpowiedzi:


268

Możesz utworzyć [color]w swoim dziale ~/.gitconfignp. Następującą treść

[color]
  diff = auto
  status = auto
  branch = auto
  interactive = auto
  ui = true
  pager = true

Możesz także dokładnie kontrolować, w jaki sposób chcesz pokolorować, w jaki sposób, np

[color "status"]
  added = green
  changed = red bold
  untracked = magenta bold

[color "branch"]
  remote = yellow

Mam nadzieję, że dzięki temu zaczniesz. I oczywiście potrzebujesz terminalu obsługującego kolor.


14
Myślę, że warto umieścić git config --global color.ui auto (odpowiedź @Evgeny) na szczycie twojego ... Myślę, że prawdopodobnie tego właśnie szuka większość ludzi. Głosowałem za obiema ... Mówię tylko, że ze względu na Internet, który się tu pojawia, myślę, że wiele osób chce tylko tego prostego linera. Tym lepiej, jeśli go dostaną, plus twoją dodatkową dobroć.
msouth

To działało idealnie dla mnie - w [color "status"]sekcji, którą dodałem branch = yellow.
Wayne Werner

3
możesz także dodać sekcję [kolor] do pliku .git / config projektu
andrej

I możesz po prostu ustawić zmienną konfiguracyjną dla pojedynczego wywołania polecenia git: stackoverflow.com/a/18304605/134044
NeilG

220

Prawdopodobnie chcesz użyć

git config --global color.ui auto

autoCzęść mówi, że będzie git tylko próbować i używać kolorów na terminalach, które go obsługują, a nie dostaniesz sekwencje ANSI jeśli przekierować dane wyjściowe komendy git do pliku np. Ustawienie go truejest takie samo jak autoi jest to również ustawienie domyślne od wersji Git 1.8.4.

color.uiJest meta konfiguracja, która obejmuje wszystkie różne color.*konfiguracje dostępnych za pomocą poleceń git.

Wyjaśniono to szczegółowo w git help config.


Czy potrafisz wyjaśnić różnicę między color.ui true(który autowskazuje) a always? Czytam dokumenty, ale wciąż nie rozumiem różnicy.
chharvey

19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto

Do twojej wiadomości, tylko to działało dla gita w wersji 1.5.2.1, inne odpowiedzi nie.
AbhiNickz,

14

Przyjęta odpowiedź daje najczęstsze rozwiązanie. Jeśli z jakiegokolwiek powodu nie musisz trwale zmieniać konfiguracji, co robi to rozwiązanie, możesz zastąpić konfigurację dla pojedynczego polecenia git:

git -c color.ui=always <usual git command and options>

Na przykład:

git -c color.ui=always status
git -c color.ui=always diff

Testowane: obsługiwane na git 2.4.6, nie obsługiwane na git 1.7.1.


2
Dla wszystkich innych, którzy próbują uzyskać kolor podczas podłączania do lesstakiego, jakim właśnie byłem, możesz lessprzekazać znaki zmiany koloru do terminala przez less -R.
xdhmoore

Kiedy dodano tę funkcję?
Ondra Žižka

11
git config --global color.ui always
git config --global color.branch always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
git config --global color.grep always
git config --global color.pager true
git config --global color.decorate always
git config --global color.showbranch always

1

Możesz to zrobić za pomocą Colourer Arbitrary Command Output . W większości działa, ale nie wymyśliłem, jak obejść błąd, w którym monity oczekujące danych wejściowych nie są wyświetlane i nie można po prostu wpisać znanego wymaganego wejścia i nacisnąć klawisz Enter, aby kontynuować w każdym przypadku.

Przykład ~/.acoc.confdla git:

# git
[git/ae]
/.*(error:.*)/                                    red+bold
/.*(warning:.*)/                                  yellow
/.*(hint:.*)/                                     magenta
/.*(up-to-date).*/                                green+bold
/.*(nothing to commit).*/                         green
/^(\+.*)/                                         green
/^(-.*)/                                          red

..which działa ładnie wraz z alias git="acoc git"in .bash_profile.


Czy możesz udostępnić swoją konfigurację acoc?
Greg Dubicki

Nvm, łatwo było pisać. :) Dodano do odpowiedzi.
Greg Dubicki

1

W przypadku kolorowego git diffpotoku lessdziała to:

git -c color.diff=always diff [...] | less -R

0

Wiem, że post ma cztery lata, ale nikt nie odpowiedział z mojego obozu, ślepy na kolory. Jeśli potrafisz rozróżnić kolory, zignoruj ​​mój post.

Na przykład „status git” powoduje wyświetlenie tekstu, który jest biały na tle / czarny na białym tle (czytelny), ciemnoszary dla usuniętego (nieczytelny na czarnym tle, ale czytelny na białym tle) i średni szary dla dodanego (jęczmień czytelny na czarnym tle tło, nieczytelne na białym tle). Kiedyś przełączałem tło okna terminala na / z białego / czarnego, aby móc odczytać nieczytelny tekst. Proste rozwiązanie to więcej:

 git status | more

Dzięki temu cały tekst jest czytelny na standardowym białym lub czarnym tle okna terminala.


1
Możesz także zmienić konfigurację, aby domyślnie ustawić wszystko na brak koloru ( color.ui = never).
Facet z kapeluszem,

0

lub wyłącz wszystkie / większość kolorowania poprzez:

git config --global color.ui false
git config --global color.branch false
git config --global color.diff false
git config --global color.interactive false
git config --global color.status false
git config --global color.grep false
git config --global color.pager false
git config --global color.decorate false
git config --global color.showbranch false

PO nie chce włączyć się kolory, raczej zwrócić na kolory. W PO stwierdził, jak to zrobić giti chce, aby to zrobić w bardziej globalnym sensie. Jeśli znasz taką metodę, edytuj swoją odpowiedź, aby to wyjaśnić.
Gypsy Spellweaver

czasami ludzie szukają czegoś blisko spokrewnionego, ale nieco innego - ale dziękuję za opinię.
theRiley

Podobało mi się @Riley
Richard Lindhout
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.