Git отслеживает разрешение файлов и выставляет изменения разрешений при создании патчей с помощью git diff -p
. Итак, все, что нам нужно, это:
- создать обратный патч
- включать только изменения разрешения
- применить патч к нашей рабочей копии
Как однострочник:
git diff -p -R --no-ext-diff --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply
Вы также можете добавить его в качестве псевдонима для вашего git config ...
git config --global --add alias.permission-reset '!git diff -p -R --no-ext-diff --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply'
... и вы можете вызвать его через:
git permission-reset
Обратите внимание, что если вы используете shell bash
, убедитесь, что '
вместо "
кавычек используется !git
, в противном случае он будет заменен последней git
командой, которую вы выполнили.
Спасибо @Mixologic за указание, что при простом использовании -R
on git diff
громоздкая sed
команда больше не требуется.