Fügen Sie Folgendes hinzu .gitconfig
:
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
Vielen Dank an @Colin Herberts Antwort für die Inspiration.
Syntax Erläuterung
Das Finale #
muss in Anführungszeichen gesetzt werden, damit es nicht .gitconfig
als Kommentar in der Shell behandelt wird, sondern durchgereicht wird und als Kommentar in der Shell behandelt wird. Es wird zwischen dem Ende des git apply
und den vom Benutzer angegebenen Argumenten eingefügt , die git
automatisch am platziert werden Ende der Befehlszeile. Diese Argumente sind hier nicht erwünscht - wir wollen sie nicht git apply
verbrauchen, daher das vorhergehende Kommentarzeichen. Möglicherweise möchten Sie diesen Befehl ausführen GIT_TRACE=1 git anw
, um dies in Aktion zu sehen.
Das --
Signal endet mit Argumenten und berücksichtigt den Fall, dass Sie eine Datei mit dem Namen -w
oder etwas haben, zu dem ein Wechsel aussehen würde git diff
.
Es sind doppelte Anführungszeichen $@
erforderlich, um vom Benutzer angegebene Anführungszeichen zu erhalten. Wenn die"
Zeichen nicht maskiert wird, wird es vom .gitconfig
Parser verbraucht und erreicht die Shell nicht.
Hinweis: .gitconfig
Alias - Parsing Apostrophe als etwas Besonderes nicht erkennt - seine einzigen Sonderzeichen sind "
, \
, \n
und ;
(außerhalb eines "
-quoted string). Dies ist der Grund, warum ein "
Muss immer maskiert werden muss, auch wenn es so aussieht, als ob es sich in einem String in einfachen Anführungszeichen befindet (worüber Git völlig agnostisch ist).
Dies ist wichtig, z. Wenn Sie einen praktischen Alias haben, um einen bash
Befehl im Stammverzeichnis des Arbeitsbaums auszuführen . Die falsche Formulierung lautet:
sh = !bash -c '"$@"' -
Während der richtige ist:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace
sonst würde der Patch aus offensichtlichen Gründen nicht gelten.