1. ホーム
  2. git

[解決済み] git update-index --assume-unchanged on directory

2022-09-14 04:55:02

質問

git 1.7.12

指定されたディレクトリ以下のすべてのファイルをassume-unchangedとしてマークしたいのですが。

  1. git update-index --assume-unchanged dir/ は、"Ignoring path."を与えます。

  2. git update-index --assume-unchanged dir/* は、追跡されていないファイルに遭遇するため、すぐに失敗し、そのため "fatal: Unable to mark file" と表示されて終了します。

  3. マークするファイルのリストを生成してみてください。 cd を目的のディレクトリに移動し git ls-files | tr '\n' ' ' | git update-index --assume-unchanged . これはエラーメッセージを出しませんが、ファイルのマーク付けには成功しません。 コマンドの最初の部分 git ls-files | tr '\n' ' ' は、マークしたいすべてのファイルをスペースで区切ったリストを正しく生成します。 このコマンドの出力をコピーしてコマンド ラインに貼り付けると git update-index コマンドは機能します。 パイプで動作しないのは何ですか?

いいえ、それは私が追加するのに十分ではありません。 dir を .gitignore に追加するだけでは不十分です。 これらのファイルはリポジトリにある必要がありますが、望ましくない変更がローカルで行われるため、ユーザーがプルを行えるように無視する必要があります。

どのように解決するのですか?

git update-index は、ファイル名を標準入力ではなく、コマンドラインから入力することを望んでいます。

ステップ 1:

cd を、変更されていないとしたいフォルダーにコピーします。

ステップ2:

このどちらかを行うことができます。

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

または

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged

ただし、どちらの場合でも、空白を含むファイル名は問題になります。それがある場合は、これを使うとよいでしょう。

git ls-files -z | xargs -0 git update-index --assume-unchanged

編集: @MatthewScharley 氏の意見を取り入れて git ls-files -z .

Windowsコマンド

注意してください。 Windowsの場合は Git Bash を使ってこれらのコマンドを実行します。