下記を参考にしました。
git でパーミッションだけ変更されてしまったファイルが大量にあるときに元に戻す方法 - bearmini's blog
Git tip: resetting file permissions — Built In Bruges
permissionを元に戻す
下記のコマンドで、テキスト、バイナリファイル共に元に戻る。
あくまでもpermissionだけが変わったファイルが元に戻る。
git diff --numstat | awk '{if (($1 == "0" && $2 == "0") || ($1 == "-" && $2 == "-")) print $3}' | xargs git checkout HEAD
差分のあるファイルも含めてpermissionを元に戻す
変更もあって、permissionも変わったファイルのpermissionだけを元に戻す方法。
下記をaliasとして登録。
git config --global --add alias.permission-reset '!git diff -p | grep -E "^(diff|old mode|new mode)" | sed -e "s/^old/NEW/;s/^new/old/;s/^NEW/new/" | git apply'
これで git permission-reset
とすると、permissionだけが元に戻る。これは便利。
permissionの変更を差分としない方法
下記を設定
git config core.filemode false
おまけ(注意)
そもそもなぜ大量のpermission変更が発生したのか。それは、macに刺したUSBメモリがNTFSフォーマットであったことに起因しています。gitの作業ディレクトリをそのUSBにコピーすると、permissionがきれいに777になってしましました。USBメモリは最初にディスクユーティリティでMac OS 拡張 ジャーナリングでフォーマットしましょう。それから作業ディレクトリをコピーしましょう。