【末尾に追記あり】
この記事は 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