2014-12-15 15 views
17

Lo stile del mio progetto dice di tagliare gli spazi bianchi finali, ma questo rende le differenze molto, molto confuse. Mi piace consolidarli in un commit prima di commettere la correzione effettiva.git-add cambia solo spazi bianchi?

Ciò è strettamente legato al Add only non-whitespace changes, ma chiede l'esatto contrario:

Esiste un modo per aggiungere solo le modifiche degli spazi bianchi per la zona messa in scena?

risposta

23

si può provare il seguente "trucco":

git add -A 
git diff --cached -w | git apply --cached -R 

Questo aggiunge praticamente tutto l'indice, quindi unstages tutti i cambiamenti che coinvolgono più di spazio bianco.

+1

Correlato, per la creazione di un alias git: http://stackoverflow.com/a/19525426/1443496. Non sembra che ci sia alcun trucco intelligente per consentire il piping in un alias, quindi è necessario rinviare a una shell. –

+0

@SeanAllred grazie Ho erroneamente letto la domanda –

+0

Questo comportamento è leggermente strano quando la pre-normalizzazione del file ha due nuove code alla coda (dove la normalizzazione taglia questo ad uno). –

2

Ecco una soluzione bash che ha funzionato per me

for fname in $(git diff --name-only --diff-filter=ACMR --full-index HEAD) 
do 
    diff=$(git diff -w --ignore-blank-lines --exit-code $fname) 
    if [ $? -eq 0 ]; then 
     echo "only whitespace diff on $fname ! adding to git..." 
     git add $fname 
    else 
     echo "diff on $fname!" 
    fi 
done 
+0

Benvenuti in SO! :) –

1

ho dovuto unire e modificare Tobias' e la risposta di nneonneo a commettere gli spazi di più file con grandi diff. Assicurati di eseguirlo dalla radice del tuo repository.

git add -A 
for FILE_NAME in $(git --no-pager diff --name-only --diff-filter=ACMR --full-index HEAD) 
do 
    git --no-pager diff --cached -w $FILE_NAME | git apply --cached -R 
done 

git --no-pager impedisce il difetto scorrimento che git utilizza per visualizzare grandi quantità di contenuti. Il ciclo --name-only consente al comando di lavorare su più file.