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
Зауважте, якщо ви маєте оболонку bash
, не забудьте використати '
замість "
лапок навколо !git
, інакше вона буде замінена останньою git
командою, яку ви запустили.
Thx в @Mixologic для не вказуючи, що просто використовуючи -R
на git diff
, громіздка sed
команда більше не потрібно.