Ignoriere Leerzeichenänderungen in allen git Befehlen

26

Ich habe Unmengen von Websites gefunden, auf denen erklärt wird, wie git Sie warnen soll, wenn Sie Zeilenenden ändern, oder verschiedene andere Techniken, um zu verhindern, dass Sie eine ganze Datei durcheinander bringen. Angenommen, es ist zu spät dafür - der Baum hat bereits Commits, die die Zeilenenden von Dateien umschalten, sodass git diffdie Subtraktion der alten Datei gefolgt vom Hinzufügen einer neuen Datei mit demselben Inhalt angezeigt wird

Ich suche nach einer Git-Konfigurationsoption oder einem Befehlszeilen-Flag, das angibt diff, diese einfach zu ignorieren. Wenn sich zwei Zeilen nur durch Leerzeichen unterscheiden, tun Sie so, als wären sie gleich. Ich brauche diese Konfigurationsoption / Flagge für etwas zu arbeiten , die auf Datei Unterschiede beruhen - diff, blameauch merge/ rebaseideal - ich will gitnachfolgende Leerzeichen vollständig ignorieren, insbesondere Zeilenende. Wie kann ich das machen?

Michael Mrozek
quelle

Antworten:

14

Für diff gibt es git diff --ignore-space-at-eol, was gut genug sein sollte. Für diff und blame können Sie alle Whitespace-Änderungen ignorieren mit -w: git diff -w, git blame -w.

Für git applyund git rebasewird in der Dokumentation erwähnt --ignore-whitespace.

Für das Zusammenführen müssen Sie anscheinend ein externes Zusammenführungswerkzeug verwenden. Sie können dieses Wrapper-Skript (ungetestet) verwenden, bei dem favorite-mergetooles sich um Ihr bevorzugtes Merge-Tool handelt . rennen git -c mergetool.nocr.cmd=/path/to/wrapper/script merge. Das Ergebnis der Zusammenführung wird im Unix-Format vorliegen. Wenn Sie ein anderes Format bevorzugen, konvertieren Sie alles in dieses andere Format oder konvertieren Sie $MERGEDnach dem Zusammenführen.

#!/bin/sh
set -e
TEMP=$(mktemp)
tr -d '\013' <"$BASE" >"$TEMP"
mv -f "$TEMP" "$BASE"
TEMP=$(mktemp)
tr -d '\013' <"$LOCAL" >"$TEMP"
mv -f "$TEMP" "$LOCAL"
TEMP=$(mktemp)
tr -d '\013' <"$REMOTE" >"$TEMP"
mv -f "$TEMP" "$REMOTE"
favorite-mergetool "$@"

Stellen Sie sicher, dass Textdateien als solche deklariert sind , um Probleme mit gemischten Zeilenenden zu minimieren .

Siehe auch Kann Git-Merge Unterschiede zwischen Zeilenenden ignorieren? auf Stapelüberlauf.

Gilles 'SO - hör auf böse zu sein'
quelle
Gibt es eine Konfiguration, um immer das -w-Flag mit Git-Schuld zu verwenden?
Thayne
@ Thayne Nicht das ich wüsste. Sie können einen Alias ​​wie definieren, bl = blame -waber Sie können den Namen der eingebauten Befehle nicht neu definieren, und es wird keine Konfigurationsoption angezeigt, um ihn als Standard festzulegen . Aber ich bin kein Git-Experte.
Gilles 'SO- hör auf böse zu sein'
für git status?
Ejaz