Добавьте следующее к вашему .gitconfig
:
anw = !git diff -U0 -w --no-color -- \"$@\" | git apply --cached --ignore-whitespace --unidiff-zero "#"
Спасибо ответу @Colin Herbert за вдохновение.
Синтаксис Объяснение
Финал #
должен быть заключен в кавычки, поэтому он не рассматривается как комментарий внутри .gitconfig
, а вместо этого проходит через него и рассматривается как комментарий внутри оболочки - он вставляется между концом git apply
и предоставленными пользователем аргументами, которые git
автоматически помещаются в конец командной строки. Эти аргументы здесь не нужны - мы не хотим git apply
их использовать, отсюда и предыдущий символ комментария. Вы можете выполнить эту команду, GIT_TRACE=1 git anw
чтобы увидеть это в действии.
В --
сигналах конца аргументов и позволяют в случае , что у вас есть файл с именем -w
или что - то , что будет выглядеть как переключатель на git diff
.
Избегающие двойные кавычки $@
необходимы для сохранения любых предоставленных пользователем аргументов в кавычках. Если "
персонаж не экранирован, он будет использован .gitconfig
синтаксическим анализатором и не достигнет оболочки.
Примечание: .gitconfig
псевдоним разбор не признает одинарные кавычки ничего особенного - его только специальные символы "
, \
, \n
, и ;
(за пределы "
-quoted строки). Вот почему "
всегда нужно экранировать символ a , даже если он выглядит так, как будто он внутри строки в одинарных кавычках (о чем git совершенно не знает агностики).
Это важно, например. если у вас есть удобный псевдоним для выполнения bash
команды в корне рабочего дерева. Неправильная формулировка:
sh = !bash -c '"$@"' -
Хотя правильным является:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace
иначе патч не будет применяться по понятным причинам.