1. ホーム
  2. git

[解決済み] git 内のファイルやディレクトリが変更された場合、そのパーミッションを元に戻すには?

2022-03-17 15:19:11

質問

gitでチェックアウトしています。すべてのファイルのパーミッションが、gitが考えるパーミッションと異なっているため、すべて変更されたものとして表示されています。

ファイルの中身に手をつけずに(パーミッションを変更したいだけです)、すべてのファイルのパーミッションをgitが考えるように設定するにはどうしたらよいでしょうか。

解決方法は?

Git は filepermission を追跡し、パッチを作成する際にパーミッションの変更を公開するために git diff -p . だから、必要なのは

  1. リバースパッチを作成する
  2. パーミッションの変更のみを含める
  3. パッチを作業コピーに適用する

ワンライナーとして

git diff -p -R --no-ext-diff --no-color \
    | grep -E "^(diff|(old|new) mode)" --color=never  \
    | git apply

また、git config にエイリアスとして追加することもできます...

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'

...で呼び出すことができます。

git permission-reset

注意:シェルが bash を使用するようにしてください。 ' の代わりに " をクウォートで囲みます。 !git に置き換えられ、そうでない場合は最後の git コマンドを実行しました。

を使うだけでいいということを指摘してくれた @Mixologic に感謝します。 -Rgit diff は、面倒な sed コマンドはもう必要ありません。