O Git controla a permissão de arquivo e expõe as alterações de permissão ao criar patches usando git diff -p
. Então, tudo o que precisamos é:
- criar um patch reverso
- inclua apenas as alterações de permissão
- aplique o patch à nossa cópia de trabalho
Como uma linha:
git diff -p -R --no-ext-diff --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply
você também pode adicioná-lo como um alias à sua configuração do git ...
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'
... e você pode invocá-lo via:
git permission-reset
Observe que, se você bash
usar o shell , use aspas ao '
invés de "
aspas !git
, caso contrário ele será substituído pelo último git
comando que você executou.
Agradecemos ao @Mixologic por apontar que, simplesmente usando -R
on git diff
, o sed
comando complicado não é mais necessário.