Git チェックアウトがあります。すべてのファイルの権限が Git が想定しているものと異なるため、すべて変更済みとして表示されます。
ファイルの内容に触れずに (権限を変更するだけ)、すべてのファイルの権限を git が想定する値に設定するにはどうすればよいですか?
ベストアンサー1
Git はファイル権限を追跡し、 を使用してパッチを作成するときに権限の変更を公開しますgit diff -p
。したがって、必要なのは以下のとおりです。
- 逆パッチを作成する
- 権限の変更のみを含める
- 作業コピーにパッチを適用する
ワンライナーとして(リポジトリのルートディレクトリから実行):
git diff -p -R --no-ext-diff --no-color --diff-filter=M \
| grep -E "^(diff|(old|new) mode)" --color=never \
| git apply
また、git 設定にエイリアスとして追加することもできます...
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'
...そして、次のように呼び出すことができます:
git permission-reset
注意: シェルが の場合は、を引用符で囲むのではなくbash
を使用してください。そうしないと、最後に実行したコマンドに置き換えられます。'
"
!git
git
-R
単にon を使用するだけでgit diff
面倒なsed
コマンドが不要になることを指摘してくれた @Mixologic に感謝します。