Додайте до свого .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 рядки). Ось чому "
завжди потрібно уникати, навіть якщо це виглядає так, що воно знаходиться в одній цитованій рядку (про що git повністю агностик).
Це важливо, наприклад. якщо у вас є зручний псевдонім для виконання bash
команди в корені робочого дерева. Неправильна рецептура:
sh = !bash -c '"$@"' -
Хоча правильним є:
sh = !bash -c '\"$@\"' -
git apply --ignore-whitespace
інакше патч не застосовуватись із очевидних причин.