Come colorare l'output di git?


256

C'è un modo per colorare l'output di git (o di qualsiasi comando)?

Tener conto di:

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

E

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
#

L'output ha lo stesso aspetto, ma le informazioni sono totalmente diverse: il file è passato da non in scena a messo in scena per il commit.

C'è un modo per colorare l'output? Ad esempio, i file che non sono in scena sono rossi, quelli in scena sono verdi?

O anche Changes not staged for commit:al rosso e # Changes to be committed:al verde?

Funzionando in Ubuntu.

EDIT: Googling trovato utile questa risposta che funziona alla grande: git config --global --add color.ui true.

Tuttavia, esiste una soluzione più generale per aggiungere colore all'output di un comando?


1
Vuoi qualcosa che colora tutti gli output dei comandi? Come farebbe a sapere quali parti colorare?
Michael Mrozek

Immagino che ci fosse un modo per configurarlo usando regex: ogni colore potrebbe avere un regex iniziale. E potrebbe esserci una regex colore predefinita per disattivare tutti i colori. E, se appare il testo "pippo", visualizzalo in un certo colore ...
B Sette

Risposte:


268

Puoi creare una sezione [color]nel tuo ~/.gitconfigesempio con il seguente contenuto

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

Puoi anche controllare con precisione cosa vuoi che abbia colorato in quale modo, ad es

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

[color "branch"]
  remote = yellow

Spero che questo ti inizi. E, naturalmente, è necessario un terminale che supporti il ​​colore.


14
Penso che valga la pena mettere git config --global color.ui auto (la risposta di @Evgeny) nella parte superiore della tua ... Penso che sia probabilmente quello che la maggior parte delle persone sta cercando. Ho votato entrambi ... Sto solo dicendo, per il bene di Internet come viene qui, penso che molte persone vogliono solo quella semplice fodera. Meglio se lo ottengono, più la tua bontà in più.
msouth,

Questo ha funzionato perfettamente per me - nella [color "status"]sezione che ho aggiunto branch = yellow.
Wayne Werner,

3
puoi aggiungere la sezione [color] anche al file .git / config del progetto
andrej

E si può solo impostare una variabile di configurazione per una singola chiamata di un comando git: stackoverflow.com/a/18304605/134044
NeilG

220

Probabilmente vuoi usare

git config --global color.ui auto

La autoparte dice che git proverà ad usare il colore solo sui terminali che lo supportano e non otterrai sequenze ANSI se, ad esempio, reindirizzi l'output dei comandi git su un file. L'impostazione trueè uguale a auto, e questo è anche il valore predefinito da Git 1.8.4.

La color.uiè una meta configurazione che include tutte le varie color.*configurazioni disponibili con comandi git.

Questo è spiegato in modo approfondito in git help config.


Puoi spiegare la differenza tra color.ui true(che autoindica) rispetto a always? Ho letto i documenti ma ancora non capisco la differenza.
Chharvey,

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

Cordiali saluti, Solo questo ha funzionato per git versione 1.5.2.1, altre risposte no.
AbhiNickz,

14

La risposta accettata fornisce la soluzione più comune. Se per qualsiasi motivo non è necessario modificare in modo permanente la configurazione, cosa che fa quella soluzione, è possibile ignorare la configurazione per un singolo comando git:

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

Per esempio:

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

Testato: supportato su git 2.4.6, non supportato su git 1.7.1.


2
Per chiunque cerchi di ottenere il colore quando si esegue il piping lesscome ero, è possibile lesspassare i caratteri di escape del colore al terminale tramite less -R.
xdhmoore,

Quando è stata aggiunta questa funzione?
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

Puoi farlo con Arbitrary Command Output Colourer . Funziona principalmente, ma non ho capito come aggirare un bug in cui i prompt in attesa di input non vengono visualizzati e non puoi semplicemente digitare l'input necessario noto e premere Invio per continuare in ogni caso.

Esempio di ~/.acoc.confper git:

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

.. che funziona bene insieme a alias git="acoc git"in .bash_profile.


Puoi condividere la tua configurazione per acoc?
Greg Dubicki,

Nvm, è stato facile scrivere. :) Aggiunto alla risposta.
Greg Dubicki,

1

Per un colore git diffconvogliato in less, questo funziona:

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

0

So che il posto ha quattro anni ma nessuno ha risposto dal mio campo, daltonico. Se riesci a distinguere i colori, ignora il mio post.

"git status", ad esempio, mette in risalto il testo bianco su sfondo / nero su sfondo bianco (leggibile), grigio scuro per l'eliminazione (illeggibile su uno sfondo nero ma leggibile su uno sfondo bianco) e grigio medio per l'aggiunta (orzo leggibile sul nero sfondo, illeggibile su sfondo bianco). Ero solito cambiare lo sfondo della finestra del mio terminale da / a bianco / nero in modo da poter leggere il testo illeggibile. Una soluzione semplice è di più:

 git status | more

Questo rende tutto il testo leggibile su una finestra terminale con sfondo bianco o nero standard.


1
Puoi anche cambiare la configurazione per impostare tutto su nessun colore per impostazione predefinita ( color.ui = never).
The Guy with The Hat,

0

oppure disattiva tutta / la maggior parte della colorazione tramite:

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

OP non stava cercando di girare al largo i colori, piuttosto a girare su colori. Nel PO ha dichiarato come fare per gite vuole un modo per farlo in un senso più globale. Se conosci questo metodo, modifica la tua risposta per spiegarlo.
Gypsy Spellweaver

a volte le persone sono alla ricerca di qualcosa di strettamente correlato ma leggermente diverso, ma grazie per il downvote.
theRiley

Mi è piaciuto @theRiley
Richard Lindhout
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.