git diff - mostrami le modifiche alla fine della riga?


86

Il mio editor sta cambiando le terminazioni di riga dei miei file sorgente. Quando lo faccio git diff, vedo la stessa linea due volte, una con -e una con +, senza differenze visibili.

Come faccio git diffa mostrarmi qual è stato effettivamente questo cambiamento?


Quasi un duplicato di questo (menzionato anche di seguito): il mio preferito ègit config diff.wsErrorHighlight all
Joshua Goldberg

Risposte:


64

Innanzitutto, assicurati di utilizzare l'output colorato (ad esempio con git diff --color) e di aver abilitato l'evidenziazione degli spazi bianchi con (ad esempio)

git config color.diff.whitespace "red reverse"

Questo potrebbe non funzionare in tutti i casi, tuttavia, poiché gitnon sembra evidenziare gli spazi vuoti finali per le righe rimosse . Per vedere gli spazi vuoti che hai eliminato, usa semplicemente

git diff -R

per mettere lo spazio bianco sul lato "aggiunto" del confronto, dove viene evidenziato.

Per maggiori dettagli, vedere le risposte a questa domanda SO .


Ho la versione 2.1.4 di git e ho agito in base al suggerimento del comando git config. Ma git diff non mostra ancora alcuna differenza. Se installo git diff in hexdump -C non viene visualizzato nulla: 000000f0 2d 2d 7d 0a 2b 2b 7d 0a |--}.++}.|7d è la parentesi graffa "}".
cardiff space man

37

Puoi vedere la differenza di fine riga con il seguente comando.

git diff | cat -v

Quindi "^ M" viene stampato per il finale CRLF (DOS), niente per il finale LF (Unix).

Apparentemente git diff sta facendo la cosa giusta, stampando caratteri CR e LF per il finale CRLF. Ma poiché CR viene consumato dalla console, non possiamo vederlo. Usando cat -v, possiamo renderlo visibile.


un altro approccio simile è che git diff > somediff && vi somediffvim mostra anche CRLF come ^ M. ma cat -vè pulito.
Nick X

1
+1 non da ultimo per avermi fatto imparare, dopo 20 anni di utilizzo, un'opzione di catcui non ero a conoscenza. :-)
Harald

25

Un modo per vedere le modifiche degli spazi è eseguire una "parola diff" carattere per carattere con

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

Questo evidenzia tutti i cambiamenti di spazio bianco ovunque nelle linee . Gli spazi vuoti rimossi sono racchiusi in [-e -]e gli spazi bianchi aggiunti in {+e +}.

In alternativa, come suggerito da Alex

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

evidenzia tutti i cambiamenti di spazio bianco alla fine delle righe .


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

evidenzia le differenze di spazio bianco nelle righe modificate.


Quale versione di git stai usando? git 2.1.4 sul mio sistema dice --ws-error-highlight = new, old è un'opzione non valida.
cardiff space man

Questa opzione è stata aggiunta nel 2015 in git 2.5.0.
MiniGod

5

Uno strumento grafico per le differenze ti mostrerà meglio il cambiamento: prova git difftool.

Usa la combinazione e imposta le preferenze per mostrare gli spazi. (Modifica -> Preferenze -> Mostra spazi bianchi.)

Altri strumenti grafici probabilmente hanno opzioni simili: la risposta + il commento di @ Cotton ti dice come farlo con vimdiff.


Uno strumento grafico per le differenze potrebbe non essere disponibile. La risposta di @ paul-whittaker funzionerà nel contesto implicito dalla domanda (un terminale).
entro il

Ora questo è strano, ma git difftool --tool=meld doesn'tlancia anche la fusione. Non so se è perché è in corso un rebase o meno.
cardiff space man
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.