2014-06-26 5 views
8

Mi piacerebbe impegnare tutte le mie correzioni di spazio bianco nel proprio commit, per mantenere tutto il resto puro dai cambiamenti di spazio bianco.C'è un modo per mostrare * solo * differenze di spazi bianchi con git diff?

E 'facile da filtrare fuori spazi vuoti con git diff usando qualcosa di simile

git diff --ignore-all-space --ignore-space-change --ignore-space-at-eol --ignore-blank-lines 

ma come faccio a ottenere un elenco di solo spazi vuoti?

(Sarebbe anche utile per ottenere un elenco di file che solo hanno spazi vuoti, quindi posso solo add tutti senza passare attraverso di loro con git add -p di individuare le differenze di spaziatura. Ma suppongo che è secondario.)

+1

'diff -u <(git diff --stat --ignore-all-space --ignore-space-change --ignore-spazio-at-EOL --ignore-blank-lines) <(git diff --stat) 'per la tua seconda domanda, forse? – Ryan

risposta

3

Ecco un modo si potrebbe fare:

  • Inizia con una directory di lavoro pulito (ad esempio git reset --hard)
  • Usa Whitespace Total Fixer da pulire su tutti gli errori di spazio bianco. Ci sono opzioni per risolvere o ignorare varie questioni, ma il default può andare bene:

    find . -name "*.whatever_extension_you_need" -exec wtf.py -v -i {} \; 
    
  • git diff sarà ora mostrare solo gli spazi cambia

  • stage e commettere gli spazi-unici cambiamenti.

(FWIW, ho scritto wtf.py; mi dispiace se sembra sfacciata auto-promozione, ma l'ho scritto appositamente per situazioni come questa in cui un repository ripetutamente venga contaminato con problemi di spazio bianco che la gomma la vostra impegna)

È inoltre possibile utilizzare wtf.py semplicemente controllo per errori di spazi bianchi piuttosto che di fissaggio sul posto di loro.; questo non influenzerà i tuoi file ma stamperà un messaggio (si spera utile) su stderr sui problemi che ha trovato.

> find . -name "*.whatever_extension_you_need" -exec wtf.py -v {} \; > /dev/null 

nightmare.txt LINE 8: WARNING: spaces followed by tabs in whitespace at beginning of line 
nightmare.txt: 
    CHOPPED 1 lines with trailing space 
    CHOPPED 0 blank lines at EOF 
    ADDED newline at EOF 
    CHANGED 1 line endings which didn't match crlf from first line 
    WARNED ABOUT 1 lines with tabs/spaces mix 
+2

A mio parere, niente di sbagliato con l'auto-promozione spudorata! Grazie per averlo scritto e grazie per la risposta. Lo proverò quando avrò la possibilità. – iconoclast

+0

Ottimo, segnalazioni di bug/suggerimenti benvenuti :) –

+1

best original story EVER :) – cxw