web-dev-qa-db-ja.com

無視されたすべてのファイルをgit clean -fdに保存する方法は?

.gitignore data/*を使用してgit clean -fdを実行すると、データフォルダーとそのすべてのコンテンツファイルが削除されます。

私が欲しいのは、すべての無視されたファイルを除外しながら、gitリポジトリ内のすべての未修正ファイルを削除することです(つまり、gitignoredファイルを削除しないでください)。私は何ができますか?

41
Danny Lin

-xフラグが指定されていない限り、Gitは通常、無視されたファイルをクリーンアップしませんが、(folder/*)のように構成すると奇妙にクリーンアップします。

@VonCが指摘したように、ディレクトリ(.gitignore)ではなくディレクトリ(data/)を無視するようにdata/*ファイルを変更する必要があります。

それは微妙な違いですが、gitにとって重要です。

45
talles

data/*data/に変更しても、除外されたフォルダー内のファイル/フォルダーをホワイトリストに登録できないため、私には使用できません。

これを.gitignoreに入れると

data/
!data/foo.txt

ファイルfoo.txtは含まれません。

git statusに表示されているすべての追跡されていないファイル(およびフォルダー)を削除するには(そしてgitignoreにdata/*のようなものを保持します)、使用できます

git ls-files -z -o --exclude-standard | xargs -0 rm -rf

これにより、追跡されていないすべてのファイルが一覧表示され、rm -rf関数に渡されて削除されます。

クレジット https://stackoverflow.com/a/3801554/4710968

0
Charlestone

詳細をもう少し見つけました。 gitignoreに/tmp/*があると、git clean -fdはそれを削除します。他の回答で述べられているように、これはgitignoreの/tmp/では発生しません。

ただし、このディレクトリにファイルをチェックインすると、git clean -fdはこのパスを無視します。これは、git add -fまたは!/tmp/.keepをgitignoreに追加してこのファイルをチェックインすることで実現できます。

0
prcu