git ready

learn git one commit at a time
by Nick Quaranto, O-Show(@oshow)

未追跡のファイルを綺麗にする

committed 16 Jan 2009

当サイト初の読者投稿となる Dav Glass からの TIPS は、リポジトリを清潔に保つためのコマンドを詳しく説明してくれる。皆と共有したい TIPS があるって? 是非投稿しよう!

ワーキングディレクトリには、よそから持ってきたが使わなかったり、無駄に生成されたり、間違って置かれたりしたファイルやディレクトリがたまってしまう事がある。いずれにせよ、それらを .gitignore を使って無視するよりも、削除してしまえばいいだろう。

git clean -n -d <path>

上記コマンドは ‘dry run’ なので、どのファイルやディレクトリが削除されるかが表示されるだけだ。今作業中の gitready のリポジトリでは以下のように出力される。

Would remove _posts/2009-01-16-cleaning-up-untracked-files.textile

どれが削除されるとまずいだろうか。まだこの記事の原稿をステージングエリアに追加していないので、ファイルが未追跡として表示されている。もしファイルだけを綺麗にして、ディレクトリは残すなら -d オプションをはずせばいい。消されるファイルを確認後、それらを一掃したいのならば、

git clean -d <path>

上記コマンドで削除が本当に実行される。 <path> をつけなければ、現在いるディレクトリが対象となる。また、不意な git clean から身を守るために Git の config に clean.requireForce が設定されていたなら、実行には -f オプションをつける必要がある。

git clean には他にも便利なオプションがある。上で説明したワーキングディレクトリの掃除と共に、普段は Git が無視しているファイルも全て片付けたいならば -x オプションが非常に役立つはずだ。逆に無視されているファイルだけを捨てたいのなら -X オプションを使おう。

よって大掃除をするならば以下のようになる。

$ git clean -n -d -x
Would remove .DS_Store
Would remove _posts/.2009-01-16-cleaning-up-untracked-files.textile.swp
Would remove _posts/2009-01-16-cleaning-up-untracked-files.textile
Would remove _site/
Would remove images/.DS_Store
Would remove images/_site/

このコマンドは gitready プロジェクトの .gitignore にリストアップされているファイルやディレクトリも、不必要なものとして削除する。 git clean を実行する時は dry run による予防措置をとり、実際に何が削除されるのかダブルチェックするのを常としよう。

もし git clean に関する他の技をしっているなら、ぜひコメントで知らせて欲しい!