Dodaj następujące elementy do .gitconfig
:
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
Dzięki odpowiedzi @Colin Herbert za inspirację.
Wyjaśnienie składni
Końcowy #
musi być cytowany, aby nie był traktowany jako komentarz wewnątrz .gitconfig
, ale zamiast tego przechodzi i jest traktowany jako komentarz wewnątrz powłoki - jest wstawiany między końcem git apply
argumentów dostarczonych przez użytkownika i git
automatycznie umieszcza koniec wiersza poleceń. Te argumenty nie są tu potrzebne - nie chcemy git apply
ich konsumować, stąd poprzedzający znak komentarza. Możesz uruchomić to polecenie, GIT_TRACE=1 git anw
aby zobaczyć, jak działa.
Te --
sygnały końca argumentów i pozwala na razie, że masz plik o nazwie -w
lub coś, co wygląda jak do przełącznika git diff
.
W $@
celu zachowania wszelkich argumentów cytowanych przez użytkownika wymagane są specjalne znaki cudzysłowu . Jeśli "
postać nie ucieknie, zostanie pochłonięta przez .gitconfig
analizator składni i nie dotrze do powłoki.
Uwaga: .gitconfig
alias parsowanie nie rozpoznaje apostrofy jako coś specjalnego - jego postacie są tylko specjalne "
, \
, \n
, i ;
(poza z "
-quoted ciąg). Właśnie dlatego "
należy zawsze uciekać, nawet jeśli wygląda na to, że znajduje się w ciągu pojedynczego cudzysłowu (którego git jest całkowicie agnostyczny).
Jest to ważne, np. jeśli masz przydatny alias do wykonania bash
polecenia w katalogu głównym drzewa roboczego. Niepoprawne sformułowanie to:
sh = !bash -c '"$@"' -
Prawidłowy to:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace
tej poprawki, ponieważ łatka nie miałaby zastosowania z oczywistych powodów.