.gitignore
ファイルにファイル名のパターンをリストにして書いておくと、それらをgitによる管理から無視するようにできるわけですが、先頭に!
を付けた行は「ただしこのファイルは無視しない」という意味になります。この!
についてハマったところを解説します。
理想と現実
ディレクトリを無視した時に、その中の1ファイルだけ無視しないようにしたいことがあります。次のようなディレクトリ階層を考えます:
└─.gitignore
└─bin/ #これ以下を全部無視したい
└─hoge
└─fuga
└─Resource #でも、これは無視したくない
試しに次のように書いてみます。
.gitignore
bin/
!Resource
しかし、これではうまく行きません。これだと bin
以下は Resource
も含めてすべて無視されてしまいます。 .gitignore
では、親ディレクトリが無視されているファイルは!
を使っても無視しないようにはできないのです。
Resource
ファイルは親ディレクトリである bin
が無視されていたので、!
による否定が効きません。
どうするか
bin
以下を無視したいけど無視したくないファイルも含んでいる、そんなときは次のように書くのが正しいです。
.gitignore
bin/*
!Resource
bin/の後に*を追加しました。あくまでディレクトリを無視したのではなく、ディレクトリ内のファイルを無視しましたので、Resourceの否定が効くようになります。