Como colorir a saída do git?

231

Existe uma maneira de imprimir em cores o git (ou qualquer comando)?

Considere:

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
#

A saída parece a mesma, mas a informação é totalmente diferente: o arquivo passou de não-empacotado para encenado para consolidação.

Existe uma maneira de colorir a saída? Por exemplo, os arquivos que não são empacotados são vermelhos e estão organizados em verde?

Ou mesmo Changes not staged for commit: para vermelho e # Changes to be committed: para verde?

Trabalhando no Ubuntu.

EDIT: Googling encontrou esta resposta que funciona muito bem: git config --global --add color.ui true .

No entanto, existe alguma solução mais geral para adicionar cor a uma saída de comando?

    
por B Seven 30.07.2012 / 01:34

9 respostas

237

Você pode criar uma seção [color] no seu ~/.gitconfig com, por exemplo, o seguinte conteúdo

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

Você também pode controlar bem o que deseja colorir de que forma, por exemplo,

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

[color "branch"]
  remote = yellow

Espero que isso comece você. E, claro, você precisa de um terminal que suporte cores.

    
por 30.07.2012 / 09:50
197

Você provavelmente vai querer usar

git config --global color.ui auto

A parte auto diz que o git só tentará e usará cores nos terminais que o suportam, e você não obterá seqüências ANSI se redirecionar a saída dos comandos git para um arquivo, por exemplo. Configurá-lo para true é o mesmo que auto , e este também é o padrão desde o Git 1.8.4.

O color.ui é uma meta-configuração que inclui todas as várias configurações de color.* disponíveis com comandos git.

Isso é explicado em profundidade em git help config .

    
por 30.07.2012 / 14:52
18
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
    
por 04.12.2014 / 21:20
9

A resposta aceita dá a solução mais comum. Se por algum motivo você não precisar alterar permanentemente a configuração, o que essa solução faz, você pode sobrescrever a configuração para um único comando git:

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

Por exemplo:

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

Testado: suportado no git 2.4.6, não suportado no git 1.7.1.

    
por 17.08.2016 / 19:59
8
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
    
por 17.07.2016 / 09:20
1

Você pode fazer isso com Colourer Arbitrary Output . Isso funciona principalmente, mas eu ainda não descobri como contornar um bug onde prompts esperando entrada não são mostrados e você não pode simplesmente digitar a entrada necessária conhecida e pressione enter para continuar em todos os casos.

Exemplo de ~/.acoc.conf para git :

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

.. que funciona muito bem com alias git="acoc git" em .bash_profile .

    
por 04.06.2013 / 10:58
1

Para um git diff colorido enviado para less , isso funciona:

git -c color.diff=always diff [...] | less -R
    
por 29.04.2018 / 21:27
0

Eu sei que o post tem quatro anos, mas ninguém respondeu do meu acampamento, o daltônico. Se você puder distinguir cores, ignore meu post.

"git status" por exemplo coloca texto branco sobre fundo / preto sobre fundo branco (legível), cinza escuro para apagado (ilegível contra um fundo preto mas legível contra um fundo branco) e cinza médio para adicionado (cevada legível no fundo preto, ilegível no fundo branco). Eu costumava alternar o plano de fundo da janela do meu terminal para / de branco / preto para poder ler o texto ilegível. Uma solução simples é mais:

 git status | more

Isso torna todo o texto legível em uma janela de terminal de fundo branca ou preta padrão.

    
por 20.07.2017 / 03:01
0

ou desligue todos / a maior parte da colorização atravé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
    
por 02.03.2017 / 03:00

Tags