Ich gehe eine Codebasis durch und behebe Leerzeichen-Kuriositäten und korrigiere im Allgemeinen Einrückungen und solche Dinge. Ich möchte sicherstellen, dass ich nicht versehentlich andere Änderungen vorgenommen habe. git diff -w
Daher zeige ich Unterschiede in allen geänderten Dateien an, während ich Leerzeichen ignoriere Unterschiede. Das Problem ist, dass dabei nicht alle Leerzeichenunterschiede ignoriert werden - zumindest was ich als reine Leerzeichenunterschiede betrachte. Zum Beispiel in der folgenden Ausgabe von git diff -w
,
-"Links":
-{
-
- "Thermal":
-
-{
-
+ "Links": {
+ "Thermal": {
Sie können sehen, dass ich nur habe
- überflüssige Leerzeilen entfernt,
- Setzen Sie am Ende der Zeile des Schlüssels geschweifte Klammern, deren Wert sie öffnen, und
- eingerückt, um dem Kontext zu entsprechen
Diese Frage schien zunächst eine Antwort zu bieten, befasst sich jedoch mit Unterschieden zwischen zwei bestimmten Dateien und nicht zwischen zwei bestimmten Commits . Alles andere, was beim Suchen auftauchte, war ebenfalls eine Sackgasse. In dieser Frage geht es beispielsweise um das Zusammenführen und nicht um das Anzeigen von Unterschieden. In dieser Frage geht es um das Anzeigen von Unterschieden auf Wortebene usw.
git difftool
+ kdiff3 ist eine OptionAntworten:
Vielleicht gibt es eine bessere Antwort, aber die beste Lösung, die ich bisher gefunden habe, ist diese.
Zunächst müssen Sie die Definition von "Whitespace" steuern, die Git derzeit verwendet.
git config core.whitespace '-trailing-space,-indent-with-non-tab,-tab-in-indent'
Als nächstes müssen Sie die Definition eines verwendeten Wortes steuern. Anstatt nur zu verwenden
git diff -w
, fügen Sie hinzu--word-diff-regex='[^[:space:]]'
:git diff -w --word-diff-regex='[^[:space:]]'
Sie werden immer noch den Kontext sehen, der (in meinem Fall, da ich sicherstellen möchte, dass es keine Unterschiede außer Leerzeichen gibt) nicht hilfreich ist. Sie können
-U0
Git anweisen, Ihnen 0 Kontextzeilen zu geben, wie z.git diff -w -U0 --word-diff-regex='[^[:space:]]'
Sie erhalten jedoch immer noch eine Ausgabe, die dem Kontext ziemlich ähnlich sieht, aber es ist immer noch viel besser, als alle Änderungen sorgfältig und manuell durchzusehen, um sicherzustellen, dass es sich nur um Leerzeichenänderungen handelt.
Sie können alle oben genannten Schritte auch in einem Befehl ausführen. Das
-c
Flag ändert die Git-Konfiguration nur für einen Befehl.git -c core.whitespace=-trailing-space,-indent-with-non-tab,-tab-in-indent diff -U0 --word-diff-regex='[^[:space:]]'
quelle
.gitconfig
mit den folgenden in Ihrem[alias]
Abschnitt machen:diffw = diff -w -U0 --word-diff-regex=[^[:space:]]
Ich denke, Sie haben Probleme, weil Git das falsche Werkzeug für den Job ist. Es macht die Aufgabe nicht einfach, und es ist der falsche Ansatz, dem Werkzeug nachzugeben. Werkzeuge sollen für Sie funktionieren und nicht umgekehrt .
Führen Sie einen zweiten Klon durch und überprüfen Sie dann die betreffende Startversion. Führen Sie dann mit Ihrer aktuellen Version einen regulären Diff aus :
diff -bur --ignore-all-space <dir1> <dir2>
.Hier sind einige der Optionen für
diff
quelle
error: invalid option: -Z
diff
Befehl, nicht für dengit
Befehl. In dieser Antwort wird empfohlen, das Diff-Tool und nicht Git für den jeweiligen Job zu verwenden.--ignore-all-space
und--ignore-cr-at-eol
arbeitete für mich.