¿Cómo colorear la salida de git?


256

¿Hay alguna forma de salida de color para git (o cualquier comando)?

Considerar:

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

Y

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
#

El resultado se ve igual, pero la información es totalmente diferente: el archivo ha pasado de no preparado a estado para confirmación.

¿Hay alguna manera de colorear la salida? Por ejemplo, los archivos que no están en escena son rojos, los en escena son verdes?

¿O incluso Changes not staged for commit:al rojo y # Changes to be committed:al verde?

Trabajando en Ubuntu.

EDIT: googlear encontró esta respuesta, que funciona muy bien: git config --global --add color.ui true.

Sin embargo, ¿hay alguna solución más general para agregar color a la salida de un comando?


1
¿Quieres algo que coloree todas las salidas de comando? ¿Cómo sabría qué partes colorear?
Michael Mrozek

Supongo que si hubiera una forma de configurarlo usando expresiones regulares: cada color podría tener una expresión regular de inicio. Y podría haber una expresión regular de color predeterminada para desactivar todos los colores. Y, si aparece el texto "foo", muéstrelo en un color determinado ...
B Seven

Respuestas:


268

Puedes crear una sección [color]en tu ~/.gitconfigcon, por ejemplo, el siguiente contenido

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

También puede controlar con precisión lo que desea colorear de qué manera, por ejemplo

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

[color "branch"]
  remote = yellow

Espero que esto te ayude a comenzar. Y, por supuesto, necesita un terminal que admita el color.


14
Creo que valdría la pena poner git config --global color.ui auto (la respuesta de @Evgeny) en la parte superior de la suya ... Creo que eso es lo que la mayoría de la gente está buscando. He votado a favor de ambos ... Solo digo que, por el bien de Internet tal como viene aquí, creo que mucha gente solo quiere ese simple revestimiento. Mucho mejor si lo consiguen, más tu bondad extra.
msouth

Esto funcionó perfectamente para mí, en la [color "status"]sección que agregué branch = yellow.
Wayne Werner

3
también puede agregar la sección [color] al archivo .git / config del proyecto
andrej

Y solo puede establecer una variable de configuración para una sola invocación de un comando git: stackoverflow.com/a/18304605/134044
NeilG

220

Probablemente quieras usar

git config --global color.ui auto

La autoparte dice que git solo intentará usar color en los terminales que lo admiten, y no obtendrá secuencias ANSI si redirige la salida de los comandos git a un archivo, por ejemplo. Establecerlo truees igual a auto, y este también es el valor predeterminado desde Git 1.8.4.

Esta color.uies una metaconfiguración que incluye todas las diversas color.*configuraciones disponibles con los comandos git.

Esto se explica en profundidad en git help config.


¿Puedes explicar la diferencia entre color.ui true(que autoapunta a) versus always? Leí los documentos pero aún no consigo la diferencia.
chharvey

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

Para su información, solo esto funcionó para la versión 1.5.2.1 de git, otras respuestas no.
AbhiNickz

14

La respuesta aceptada da la solución más común. Si por alguna razón no necesita cambiar permanentemente la configuración, lo que hace esa solución, puede anular la configuración para un solo comando git:

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

Por ejemplo:

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

Probado: compatible con git 2.4.6, no compatible con git 1.7.1.


2
Para cualquier otra persona que intente obtener color cuando se conecta lesscomo yo, puedo hacer lesspasar los caracteres de escape de color a través de la terminal less -R.
xdhmoore

¿Cuándo se agregó esta función?
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

Puede hacer esto con Colourer de salida de comando arbitrario . Funciona principalmente, pero no he descubierto cómo solucionar un error en el que no se muestran los avisos que esperan la entrada y no puede simplemente escribir la entrada necesaria conocida y presionar enter para continuar en todos los casos.

Ejemplo de ~/.acoc.confpara git:

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

..que funciona muy bien junto con alias git="acoc git"in .bash_profile.


¿Puedes compartir tu configuración acoc?
Greg Dubicki

Nvm, fue fácil de escribir. :) Añadido a la respuesta.
Greg Dubicki

1

Para un color git diffentubado less, esto funciona:

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

0

Sé que la publicación tiene cuatro años, pero nadie respondió desde mi campamento, el daltónico. Si puedes distinguir los colores, ignora mi publicación.

"git status", por ejemplo, muestra texto que es blanco sobre fondo / negro sobre fondo blanco (legible), gris oscuro para borrado (ilegible en un fondo negro pero legible en un fondo blanco) y gris medio para agregado (cebada legible en negro fondo, ilegible en el fondo blanco). Solía ​​alternar el fondo de mi ventana de terminal a / de blanco / negro para poder leer el texto ilegible. Una solución simple es más:

 git status | more

Esto hace que todo el texto sea legible en una ventana de terminal de fondo blanco o negro estándar.


1
También puede cambiar la configuración para configurar todo sin color por defecto ( color.ui = never).
El chico con el sombrero

0

o apague toda / la mayor parte de la coloración a través de:

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 no buscaba apagar los colores, sino encender los colores. En el OP, dijo cómo hacerlo gity quiere alguna forma de hacerlo en un sentido más global. Si conoce dicho método, edite su respuesta para explicarlo.
Gypsy Spellweaver

a veces las personas buscan algo estrechamente relacionado pero ligeramente diferente, pero gracias por el voto negativo.
theRiley

Me gustó @theRiley
Richard Lindhout
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.