gitignoreで一部のフォルダ以外を無視したい場合

gitignoreでフォルダをgitに上げたくないけど、中の一部フォルダだけ上げたい場合の書き方

以下のようなフォルダがあったとして、public/testだけgit管理したいとします

1
2
3
4
5
public/
└─test/ #無視したくない
└─hoge/ #無視したい
└─huga/ #無視したい
… #全部無視したい

!を記述することでリストから外すことができますが、以下の記述だとpublic以下は全部無視されてしまいます

.gitignore
1
2
public
!test

次のように*を使ってワイルドカードで記述することで意図通り動きます

.gitignore
1
2
public/*
!test