git cleanで.gitignore対象のファイルが消えてしまう話

とあるrubyのプロジェクトを進行中に不要なファイルがたまってきました。

$ git status -b -s
# master
?? a.rb
?? b.rb

上記のファイルは必要ないので、 git clean -fd を実行します。

$ git clean -fd
Would skip repository vendor/bundle/ruby/2.2.0/bundler/gems/slim-0726c443dfdd
Would remove vendor/bundle/ruby/2.2.0/bin
Would remove vendor/bundle/ruby/2.2.0/build_info
Would remove vendor/bundle/ruby/2.2.0/cache
Would remove vendor/bundle/ruby/2.2.0/doc
Would remove vendor/bundle/ruby/2.2.0/extensions
Would remove vendor/bundle/ruby/2.2.0/gems
Would remove vendor/bundle/ruby/2.2.0/specifications

oh!!!

vendor/bundle の中のgemが消えてしまいました。。 仕方なく bundle install するわけですが、なんで .gitignore の中に入っているはずの、 vendor/bundle 配下のファイルが消えてしまうのでしょう。

自分自身 .gitignore の書き方にあまり自信がなかったので、 いろいろ調べてみましたが、特に問題なし。

git clean -fdx

とかすれば、ignoreされているファイルを消すこともできるようですね。 が、今回の解決策とはなりません。。

解決策は .gitkeep をファイルに置くことでした。 vendor/.gitkeep をコミットすることで解決しました。