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 за указание, что при простом использовании -Ron git diffгромоздкая sedкоманда больше не требуется.