Git 内のファイルやディレクトリの権限が変更された場合、それを復元するにはどうすればよいでしょうか? 質問する

Git 内のファイルやディレクトリの権限が変更された場合、それを復元するにはどうすればよいでしょうか? 質問する

Git チェックアウトがあります。すべてのファイルの権限が Git が想定しているものと異なるため、すべて変更済みとして表示されます。

ファイルの内容に触れずに (権限を変更するだけ)、すべてのファイルの権限を git が想定する値に設定するにはどうすればよいですか?

ベストアンサー1

Git はファイル権限を追跡し、 を使用してパッチを作成するときに権限の変更を公開しますgit diff -p。したがって、必要なのは以下のとおりです。

  1. 逆パッチを作成する
  2. 権限の変更のみを含める
  3. 作業コピーにパッチを適用する

ワンライナーとして(リポジトリのルートディレクトリから実行):

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を使用してください。そうしないと、最後に実行したコマンドに置き換えられます。'"!gitgit

-R単にon を使用するだけでgit diff面倒なsedコマンドが不要になることを指摘してくれた @Mixologic に感謝します。

おすすめ記事