Como colorir a saída do git?

256

Existe uma maneira de colorir a saída para o git (ou qualquer 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

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 as informações são totalmente diferentes: o arquivo passou de não-estágios para estágios para confirmação.

Existe uma maneira de colorir a saída? Por exemplo, os arquivos que não estão em estágio são vermelhos, e em estágios são verdes?

Ou até Changes not staged for commit:vermelho e # Changes to be committed:verde?

Trabalhando no Ubuntu.

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

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

B Seven
fonte
1
Você quer algo que colore todas as saídas de comando? Como saberia quais peças colorir?
Michael Mrozek
Eu acho que se houvesse uma maneira de configurá-lo usando regex: cada cor poderia ter um regex inicial. E pode haver uma regex de cores padrão para desativar todas as cores. E, se o texto "foo" aparecer, exiba-o em uma determinada cor ...
B Seven

Respostas:

268

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

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

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

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

[color "branch"]
  remote = yellow

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

Marco
fonte
14
Eu acho que pode valer a pena colocar git config --global color.ui auto (resposta da @Evgeny) na parte superior da sua ... Eu acho que é provavelmente o que a maioria das pessoas está procurando. Eu votei nos dois ... Eu só estou dizendo, pelo bem da Internet como ela vem aqui, acho que muitas pessoas só querem esse liner simples. Tanto melhor quanto eles conseguirem, além de sua bondade extra.
Ms17 #
Isso funcionou perfeitamente para mim - na [color "status"]seção que adicionei branch = yellow.
Wayne Werner
3
você pode adicionar [color] seção para do projeto arquivo .git / config também
Andrej
E você pode simplesmente definir uma variável de configuração para uma única chamada de um comando git: stackoverflow.com/a/18304605/134044
NeilG
220

Você provavelmente quer usar

git config --global color.ui auto

A autoparte diz que o git só tentará 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. A configuração trueé igual a auto, e esse também é o padrão desde o Git 1.8.4.

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

Isso é explicado em profundidade git help config.

Evgeny
fonte
Você pode explicar a diferença entre color.ui true(que autoaponta para) versus always? Eu li os documentos, mas ainda não entendi a diferença.
chharvey
19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
sakisk
fonte
Para sua informação, apenas isso funcionou para a versão 1.5.2.1 do git, outras respostas não.
AbhiNickz 3/04
14

A resposta aceita fornece 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ê poderá substituir a configuração por 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.

Aldeia
fonte
2
Para qualquer outra pessoa que tenta obter cores ao usar o canal lesscomo eu acabei de fazer, é possível lesspassar os caracteres de escape de cor para o terminal via less -R.
Xdhmoore
Quando esse recurso foi adicionado?
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
mlibre
fonte
1

Você pode fazer isso com o Colorador de saída de comando arbitrário . Geralmente funciona, mas eu não descobri como solucionar um bug em que os avisos que esperam entrada não sejam mostrados e você não pode simplesmente digitar a entrada necessária conhecida e pressionar enter para continuar em todos os casos.

Exemplo 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 muito bem, juntamente com alias git="acoc git"no .bash_profile.

Tom Mahoney
fonte
Você pode compartilhar sua configuração acoc?
precisa saber é o seguinte
Nvm, foi fácil escrever. :) Adicionado à resposta.
precisa saber é o seguinte
1

Para uma git difftubulação colorida less, isso funciona:

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

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

"status git", por exemplo, coloca texto branco sobre fundo / preto sobre fundo branco (legível), cinza escuro para excluído (ilegível contra um fundo preto, mas legível contra um fundo branco) e cinza médio para adição (cevada legível em preto ilegível em fundo branco). Eu costumava alternar o fundo da minha janela do 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 branco ou preto padrão.

Jan David Narkiewicz
fonte
1
Você também pode alterar a configuração para definir tudo como sem cor por padrão ( color.ui = never).
O cara com o chapéu
0

ou desative toda / quase toda a colorização por:

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
theRiley
fonte
OP não estava olhando para virar off cores, ao invés de transformar em cores. No OP, ele afirmou como gitagir e quer uma maneira de fazê-lo em um sentido mais global. Se você conhece esse método, edite sua resposta para explicar isso.
Gypsy Spellweaver
Às vezes, as pessoas procuram algo intimamente relacionado, mas um pouco diferente - mas obrigado pelo voto negativo.
precisa saber é o seguinte
Gostei @theRiley
Richard Lindhout