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 .gitconfigals Kommentar in der Shell behandelt wird, sondern durchgereicht wird und als Kommentar in der Shell behandelt wird. Es wird zwischen dem Ende des git applyund den vom Benutzer angegebenen Argumenten eingefügt , die gitautomatisch am platziert werden Ende der Befehlszeile. Diese Argumente sind hier nicht erwünscht - wir wollen sie nicht git applyverbrauchen, 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 -woder 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 .gitconfigParser verbraucht und erreicht die Shell nicht.
Hinweis: .gitconfigAlias - Parsing Apostrophe als etwas Besonderes nicht erkennt - seine einzigen Sonderzeichen sind ", \, \nund ;(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 bashBefehl im Stammverzeichnis des Arbeitsbaums auszuführen . Die falsche Formulierung lautet:
sh = !bash -c '"$@"' -
Während der richtige ist:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespacesonst würde der Patch aus offensichtlichen Gründen nicht gelten.