web-dev-qa-db-ja.com

git update-index-ディレクトリでassume-unchanged

git 1.7.12

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

1)git update-index --assume-unchaged dir/は「Ignoring path」を提供します。

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

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

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

94
Xander Dunn

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

編集:git ls-files -zに関する@MatthewScharleyからの入力を組み込みました。

Windowsコマンド

注: Windowsを使用している場合は、Git Bashを使用してこれらのコマンドを実行します

162
twalberg

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

13
Steve Pitchers

うん、

git update-index --assume-unchanged

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

cd dir
ls | xargs -l git update-index --assume-unchanged
2
Victor Perov