git diff exibe cores incorretamente

43

Para obter a saída colorida de todos os comandos do git, defino o seguinte:

git config --global color.ui true

No entanto, isso produz uma saída como essa para git diff , git log

Considerandoquecomandoscomogitstatussãoexibidoscomprecisão

Por que não reconhecer os códigos de cores com escape em apenas alguns dos comandos e como posso corrigi-los?

Estou usando o iTerm 2 (tipo de terminal xterm-256color ) no OS X 10.8.2 e zsh como meu shell

zsh --version
zsh 5.0.0 (x86_64-apple-darwin12.0.0)

git --version                                                                                                                      
git version 1.7.9.6 (Apple Git-31.1)
    
por Gilles 16.02.2013 / 01:34

3 respostas

59

Você está vendo as seqüências de escape que informam ao terminal para alterar as cores exibidas com o caractere de escape mostrado como ESC , enquanto o comportamento desejado seria que as seqüências de escape tivessem o efeito pretendido.

Comandos como git diff e git log canalizam sua saída para um pager , less por padrão. O Git tenta informar less para permitir que os caracteres de controle tenham seu efeito de controle, mas isso não está funcionando para você.

Se less for seu pager, mas você tiver a variável de ambiente LESS definida como um valor que não inclui -r ou -R , o git não poderá informar less para exibir cores. Normalmente passa LESS=-FRSX , mas não se LESS já estiver definido no ambiente. Uma correção é passar explicitamente a opção -R para informar less para exibir as cores quando invocado pelo git:

git config --global core.pager 'less -R'

Se less não for seu pager, mude para less ou descubra como tornar suas cores de exibição do pager.

Se você não quiser que o git exiba cores quando estiver chamando um pager, defina color.ui para auto em vez de true .

    
por 16.02.2013 / 02:05
1

Você também pode ver esta saída se tiver Busybox . O Alpine Linux é um bom exemplo de uma distro popular que o utiliza. Consulte link

Uma maneira simples de saber se você usa atualmente o Busybox é executar:

realpath 'which less'

Ou se você usar concha de peixe

realpath (which less)

Se a saída for /bin/busybox , você poderá resolver seu problema instalando o gnu less .

No Alpine:

sudo apk --update add less

O comando será diferente dependendo do seu gerenciador de distro / pacote.

    
por 04.08.2017 / 04:06
0

Melhorando a resposta do Gilles, você pode manter suas opções $LESS antigas usando isso no seu git config (por exemplo, em ~/.gitconfig ):

[core]
pager = less -+$LESS -FRX
    
por 30.03.2017 / 17:37