git diff - mostrar mudanças no final da linha?

86

Meu editor está mudando as terminações de linha de meus arquivos de origem. Quando eu façogit diff , vejo a mesma linha duas vezes - uma com -e outra com +- sem nenhuma diferença visível.

Como faço git diffpara me mostrar o que essa mudança realmente foi?

Stonky
fonte
Quase duplicado deste (também mencionado abaixo): meu favorito égit config diff.wsErrorHighlight all
Joshua Goldberg

Respostas:

64

Primeiro, certifique-se de que está usando a saída colorida (por exemplo, com git diff --color) e de que habilitou o realce de espaço em branco com (por exemplo)

git config color.diff.whitespace "red reverse"

Isso pode não funcionar em todos os casos, pois gitnão parece destacar o espaço em branco à direita para as linhas removidas . Para ver os espaços em branco que você excluiu, basta usar

git diff -R

para colocar o espaço em branco no lado 'adicionado' da comparação, onde é realçado.

Para obter mais detalhes, consulte as respostas desta pergunta do SO .

Paul Whittaker
fonte
Tenho git versão 2.1.4 e agi de acordo com a sugestão do comando git config. Mas git diff ainda não está mostrando nenhuma diferença. Se eu canalizar git diff para hexdump -C não há nada aparecendo lá: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|O 7d é a chave '}'.
cardiff space man
37

Você pode ver a diferença de fim de linha com o seguinte comando.

git diff | cat -v

Então "^ M" é impresso para finalização CRLF (DOS), nada para finalização LF (Unix).

Aparentemente, git diff está fazendo a coisa certa, imprimindo caracteres CR e LF para finalização CRLF. Mas porque CR é consumido pelo console, não podemos vê-lo. Usando cat -v, podemos torná-lo visível.

droid7c2
fonte
outra abordagem semelhante é git diff > somediff && vi somediff, o vim mostra CRLF como ^ M também. mas cat -vé bacana.
Nick X
1
+1 não menos por me deixar aprender, depois de 20 anos de uso, uma opção catque eu não conhecia. :-)
Harald,
25

Uma maneira de ver as alterações dos espaços em branco é fazer uma "diferença de palavra" caractere por caractere com

git diff --color --word-diff-regex=.

Isso destaca todas as alterações de espaço em branco em todas as linhas . O espaço em branco removido é inserido [-e-] incluídos e os espaços em branco adicionados em {+e+} .

Alternativamente, conforme sugerido por Alex

git diff --color --ws-error-highlight=new,old

destaca todas as alterações de espaço em branco no final das linhas .

ntc2
fonte
12
git diff --ws-error-highlight=new,old

destaca diferenças de espaço em branco nas linhas alteradas.

Alex
fonte
Qual versão do git você está usando? git 2.1.4 em meu sistema diz --ws-error-highlight = new, old é uma opção inválida.
cardiff space man
Esta opção foi adicionada em 2015 no git 2.5.0.
MiniGod
5

Uma ferramenta de comparação gráfica mostrará melhor a mudança - tente git difftool.

Use o meld e defina as preferências para mostrar os espaços em branco. (Editar -> Preferências -> Mostrar espaços em branco.)

Outras ferramentas gráficas provavelmente têm opções semelhantes - a resposta + comentário de @ Cotton informa como fazer isso com o vimdiff.

bstpierre
fonte
Uma ferramenta de comparação gráfica pode não estar disponível. A resposta de @ paul-whittaker funcionará no contexto implícito na pergunta (algum terminal).
partir de
Agora isso é estranho, mas git difftool --tool=meld doesn'taté mesmo lançar o meld. Não sei se é porque um rebase está em andamento ou não.
cardiff space man