2014-12-15 10 views
17

Der Stil meines Projekts sagt, triming whitespace, aber das macht Diffs sehr, sehr chaotisch. Ich mag es, sie zu einem Commit zu konsolidieren, bevor ich den eigentlichen Fix beginne.git-nur Whitespace-Änderungen hinzufügen?

Dies ist eng mit Add only non-whitespace changes verwendet, aber es ist genau das Gegenteil gefragt:

Gibt es eine Möglichkeit nur die Änderungen in Leerzeichen in dem Staging-Bereich hinzufügen?

Antwort

23

können Sie versuchen, den folgenden „Trick“:

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

Dies fügt im Grunde alles, was auf den Index, unstages dann alle Änderungen, die mehr als Leerzeichen beeinflussen.

+1

Verwandte, zum Erstellen eines Git Alias: http://Stackoverflow.com/a/19525426/1443496. Es scheint nicht, dass es einen cleveren Trick gibt, Piping in einem Alias ​​zuzulassen, also müssen Sie auf eine Shell zurückgreifen. –

+0

@SeanAllred thanks Ich habe die Frage falsch gelesen –

+0

Dies hat etwas seltsames Verhalten, wenn die Datei vor der Normalisierung zwei neue Zeilen am Schwanz hat (wo Normierung trimmt dies auf eins). –

2

hier ist eine Lösung, die bash

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

Willkommen bei SO! :) –

1

I Tobias' und nneonneo Antwort zu kombinieren, hatte für mich gearbeitet und ändern Sie das Leerzeichen mehrerer Dateien mit großen diffs zu begehen. Stellen Sie sicher, dass Sie dies im Stammverzeichnis Ihres Repositorys ausführen.

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 verhindert, dass die Standard-Scrolling, dass git große Mengen an Inhalt anzuzeigen verwendet. Die Schleife --name-only ermöglicht es dem Befehl, an mehreren Dateien zu arbeiten.