Git realiza un seguimiento del permiso de archivos y expone los cambios de permisos al crear parches usando git diff -p. Entonces todo lo que necesitamos es:
- crear un parche inverso
- incluir solo los cambios de permiso
- aplicar el parche a nuestra copia de trabajo
Como una línea:
git diff -p -R --no-ext-diff --no-color \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply
también puede agregarlo como un alias a su configuración de 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'
... y puedes invocarlo a través de:
git permission-reset
Tenga en cuenta que si su shell es bash, asegúrese de usar en 'lugar de "comillas alrededor de !git, de lo contrario se sustituye con el últimogit comando que ejecutó.
Gracias a @Mixologic por señalar que simplemente usando -Ron git diff, el engorroso sedcomando ya no es necesario.