Додайте до свого .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інакше патч не застосовуватись із очевидних причин.