【末尾に追記あり】
この記事は Git のバージョン 2.6 時点での話です。2.7からは簡単にできるようになりました。
.gitignore で、あるフォルダを無視したとします。
で、その配下の特定のフォルダだけ、やっぱり git で管理したいとします。
たとえば
-
folder1 ← このフォルダ配下は無視したい
- folder1-1
- folder1-1-1
- folder1-1-2 ← でも、このフォルダだけは無視したくない
- folder1-1-3
- folder1-2
- folder1-1
- folder2
- folder3
/folder1
は無視したい。
でも /folder1/folder1-1/folder1-1-2
は無視したくない。
とします。
ダメな例
とりあえず、.gitignore に !
記法を使って
/folder1
!/folder1/folder1-1/folder1-1-2
で、いけるかと思ったらダメでした。
どうも一度 /folder1
を無視してしまうと、その配下のものは !
を使っても、こっちの世界に戻ってこないっぽい。
できた例
こう書いたらいけました。
/folder1/*
!/folder1/folder1-1
/folder1/folder1-1/*
!/folder1/folder1-1/folder1-1-2
/folder1
配下のファイルは無視。
でも /folder1/folder1-1
は無視しない。
で /folder1/folder1-1/
配下のファイルは無視。
でも /folder1/folder1-1/folder1-1-2
は無視しない。
ひとつひとつ階層を掘って、順番に書いていけばOKっぽい。
しかし
できたとはいえ、えらく冗長ですよね……
もっとシンプルな書き方ないのかなあ……
【追記】Git 2.7 から簡単にできるようになった
Git 2.7 から、
どうも一度
/folder1
を無視してしまうと、その配下のものは!
を使っても、こっちの世界に戻ってこないっぽい。
この部分の仕様が変わり、こっちの世界に戻ってくるようになりました。
なのでこう書くだけでOKです 🙌
/folder1
!/folder1/folder1-1/folder1-1-2