Git

.gitignore で無視したフォルダ配下の、特定のフォルダだけ無視しないようにする方法

More than 3 years have passed since last update.

【末尾に追記あり】

この記事は Git のバージョン 2.6 時点での話です。2.7からは簡単にできるようになりました。


.gitignore で、あるフォルダを無視したとします。

で、その配下の特定のフォルダだけ、やっぱり git で管理したいとします。


たとえば



  • folder1 ← このフォルダ配下は無視したい


    • folder1-1


      • folder1-1-1

      • folder1-1-2 ← でも、このフォルダだけは無視したくない

      • folder1-1-3



    • folder1-2



  • 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


参考