114

git 1.7.12

特定のディレクトリの下にあるすべてのファイルを、変更されていないものとしてマークしたいと思います。

  1. git update-index --assume-unchanged dir/「パスを無視する」を指定します。

  2. git update-index --assume-unchanged dir/*追跡されていないファイルに遭遇するため、すぐに失敗します。したがって、「致命的:ファイルにマークを付けることができません」と表示されて終了します。

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

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

4

4 に答える 4

198

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を使用している場合は、GitBashを使用してこれらのコマンドを実行してください

于 2012-09-05T20:03:36.997 に答える
27

findGNU Findutilsのコマンドには、構文は少し特殊ですが、-execを使用する煩わしさのほとんどを取り除くオプションがあります。xargsただし、スペースを含むファイル名は完全に処理されます。

このコマンドは、リストされたディレクトリ内およびその下のすべてのファイルが変更されていないことをgitに想定させます。

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;

Findは、 (シェルがそれを食べないように)-execまですべての引数を取り、見つかったファイルごとに1回実行します。その間、 (シェルがそれを食べないように一重引用符で囲みます)、見つかったファイルの名前に置き換えます。;{}

findの一致基準(最大再帰深度、一致がファイルであるかディレクトリであるか、ファイル名が式と一致するかどうか)を使用すると-exec、あらゆる種類の強力な処理を実行できます。

findコマンドの他の実装についてはよくわかりません。YMMV。

于 2013-08-07T18:56:21.060 に答える
25

ディレクトリ名をに追加し.git/info/excludeます。これは、追跡されていないファイルに対して機能します。

于 2015-10-06T13:06:13.400 に答える
3

うん、

git update-index --assume-unchanged

ディレクトリではなく、ファイルでのみ機能します。私は、より速い方法の1つだと思います。

cd dir
ls | xargs -l git update-index --assume-unchanged
于 2013-05-17T14:11:17.040 に答える