.gitignore data/*
を使用してgit clean -fd
を実行すると、データフォルダーとそのすべてのコンテンツファイルが削除されます。
私が欲しいのは、すべての無視されたファイルを除外しながら、gitリポジトリ内のすべての未修正ファイルを削除することです(つまり、gitignoredファイルを削除しないでください)。私は何ができますか?
-x
フラグが指定されていない限り、Gitは通常、無視されたファイルをクリーンアップしませんが、(folder/*
)のように構成すると奇妙にクリーンアップします。
@VonCが指摘したように、ディレクトリ(.gitignore
)ではなくディレクトリ(data/
)を無視するようにdata/*
ファイルを変更する必要があります。
それは微妙な違いですが、gitにとって重要です。
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
関数に渡されて削除されます。
詳細をもう少し見つけました。 gitignoreに/tmp/*
があると、git clean -fd
はそれを削除します。他の回答で述べられているように、これはgitignoreの/tmp/
では発生しません。
ただし、このディレクトリにファイルをチェックインすると、git clean -fd
はこのパスを無視します。これは、git add -f
または!/tmp/.keep
をgitignoreに追加してこのファイルをチェックインすることで実現できます。