Colorare lo spazio bianco nell'output di git-diff


151

Per quanto riguarda la formattazione del codice, sono un po 'purista :). Molto spesso rimuovo gli spazi bianchi non necessari (linee con solo ws, ws alla fine delle linee ecc.). Ho anche impostato Vim per mostrare quel tipo di linee colorate in rosso.

Il mio problema è che usando git-diff vedo spesso qualcosa del genere:

-      else{ 
+      else{

Anche se ho il colore git-diff non riesco a vedere la differenza (in quella particolare situazione ho rimosso 1 settimana alla fine della riga). C'è un modo per dire a git-diff di mostrare che ws è colorato in rosso? (ad esempio quelli abbinati a / \ s + $ / regexp).


4
Se inverti i colori (scambia primo piano e sfondo), verranno visualizzati gli spazi bianchi come questo. Un modo semplice per ottenere questo risultato in molti terminali è evidenziare il testo in questione con il mouse. Questo trucco funziona solo con un diff colorato, ovviamente.
Phlarx,

Risposte:


172

Potrebbe essere necessario configurare l'impostazione di configurazione color.diff.whitespace, ad esempio con:

 git config color.diff.whitespace "red reverse"

(Presumo che tu lo abbia già color.diffo color.uiimpostato da autoquando dici che vedi git diffcomunque toppe colorate da .)

Se vuoi mettere a punto il tipo di errori degli spazi bianchi che sono evidenziati in rosso, puoi quindi cambiare core.whitespace, ma blank-at-eolè abilitato di default, quindi probabilmente non dovrai cambiarlo per l'esempio che menzioni.

Una possibile fonte di confusione è che nell'output di git diff, gli errori degli spazi bianchi sono evidenziati solo nelle righe introdotte, non in quelle rimosse. ( Aggiornamento: come sottolinea Paul Whittaker nella sua risposta , che dovresti votare :), puoi vederli invertendo il senso del diff git diff -R.)

Puoi trovare altra documentazione su queste opzioni di configurazione nella pagina man di git config

Se non si desidera utilizzare -Rkludge, è possibile utilizzare l' opzione Evidenziazione errori WhiteSpace dalla pagina man diff .

--ws-error-highlight =

Evidenzia gli errori di spazio bianco sulle righe specificate nel colore specificato da color.diff.whitespace. è un elenco separato da virgole di vecchio, nuovo, contesto. Quando questa opzione non viene fornita, vengono evidenziati solo gli errori di spazio bianco nelle nuove righe. Ad esempio --ws-error-highlight = nuovi, vecchi punti salienti errori di spazi bianchi su entrambe le righe eliminate e aggiunte. tutto può essere usato come abbreviazione di vecchi, nuovi, contesti.

git diff --ws-error-highlight=new,old <file>

o

git diff --ws-error-highlight=all <file>

Non conosco un modo per accenderlo permanentemente e memorizzarlo in config oltre all'uso di un alias:

git config alias.df 'diff --ws-error-highlight=all'

Ora puoi usare:

git df <file>

Per vedere le modifiche in rosso.

Si noti che con Git 2.11 (Q4 2016) , questo alias potrebbe essere sostituito con:

git config diff.wsErrorHighlight all

Vedi doc ongit diff e ongit config .


34
"Una possibile fonte di confusione è che nell'output di git diff, gli errori degli spazi bianchi sono evidenziati solo nelle righe introdotte, non in quelle rimosse." Esattamente! E non c'è modo di mostrarlo anche per le linee rimosse? (ehi, è diff :))
radarek

6
Aggiungi --global per impostare il tuo ~ / .gitconfig
simlmx il

17
@radarek: è possibile utilizzare l'opzione inversa:git diff -R
bluastra

6
Esiste una segnalazione di bug per questo? In caso contrario, sembra che ci dovrebbe essere.
Ajedi32

3
questo ha funzionato git config diff.wsErrorHighlight all. Utilizzare git config --global [...]per rendere globali le modifiche (vale a dire che riguardano tutti i repository).
Felipe Alvarez,

141

Utilizzare git diff -Rper trasformare le linee rimosse in linee aggiunte. Quindi verranno evidenziati gli spazi bianchi finali.

(Ciò presuppone che tu abbia già abilitato l'hightlighting degli spazi bianchi, secondo le impostazioni del colore dalla risposta di Mark. Il merito per questo metodo va al post di Junio ​​all'indirizzo http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal- with-git-diff-td5653205.html .)

Ad esempio, durante la conversione di un file dalle terminazioni di riga DOS in Unix, git diff -Rmi mostra chiaramente i ^Mcaratteri (dis) che appaiono alle estremità delle righe. Senza -R(e anche senza -wecc.) Mostra che l'intero file è cambiato, ma non mostra come.


4
Naturalmente, puoi anche farlo git diff | cat -A | less -Sse sei disperato, ma oltre ai ritorni a capo, catvisualizzerà letteralmente anche qualsiasi codice di evidenziazione dei colori.
Paul Whittaker,

3
@Paul_Whittaker cat -Anon è portatile. Sul gatto BSD, non esiste tale opzione. Si prega di utilizzare cat -vetinvece.
7heo.tk,

9

Usa git diff --color | less -R. La -Rrende i codici di controllo del colore human-friendly.

Quindi è possibile utilizzare lessla ricerca di espressioni regolari, ad es

/[[:space:]]+$

Questa espressione regolare funziona anche vim, tra l'altro.
Jose Alban,

Quest'ultima idea di less -Rappena reso più facile per me, per il tubo ls --colorattraverso less.
Menachem,

0

La mia versione git diffsembra già fare questo: ho git 1.7.4.1 e ho impostato color.ui = auto.


12
Ho appena provato con git 1.7.5.1 e certamente non evidenzia gli spazi vuoti finali nelle linee che vengono rimosse.
Infiltratore,
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.