I have a git checkout. All the file permissions are different than what git thinks they should be therefore they all show up as modified.
Without touching the content of the files (just want to modify the permissions) how do I set all the files permissions to what git thinks they should be?
Git keeps track of filepermission and exposes permission changes when creating patches using
git diff -p. So all we need is:
- create a reverse patch
- include only the permission changes
- apply the patch to our working copy
As a one-liner:
git diff -p -R --no-ext-diff --no-color --diff-filter=M \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply
you can also add it as an alias to your git config...
git config --global --add alias.permission-reset '!git diff -p -R --no-ext-diff --no-color --diff-filter=M | grep -E "^(diff|(old|new) mode)" --color=never | git apply'
...and you can invoke it via:
Note, if you shell is
bash, make sure to use
' instead of
" quotes around the
!git, otherwise it gets substituted with the last
git command you ran.
Thx to @Mixologic for pointing out that by simply using
git diff, the cumbersome
sed command is no longer required.