La regla de ignorar inversión de Git no funciona como espero

Tengo un tree:

- bower_components - jquery - .bower.json - jquery.js - ... - underscore - .bower.json - underscore.js - ... - ... 

Quería ignorar todo en los bower_components/ except .bower.json , así que escribí dicho .gitignore :

 bower_components/**/* !bower_components/**/.bower.json 

De acuerdo con gitignore man git debe ignorar todo en los subdirectorys de bower_components excepto .bower.json pero no es así. No sé lo que estoy haciendo mal, he probado diferentes combinaciones, incluyendo !.bower.json pero sin suerte.

git check-ignore bower_components/jquery/.bower.json -v me da:

 .gitignore:1:bower_components/**/* bower_components/jquery/.bower.json 

ls bower_components/**/.bower.json me da una list de files .bower.json .

Tengo un tree de testing para jugar: nocorp.me/32430Z3J1o2k

Tal vez sea un error, tal vez no, pero tuve que usar asteriscos únicos en lugar de dobles:

 bower_components/*/* !bower_components/*/.bower.json 

No estoy seguro de que este sea el caso para ti, pero ** se agrega en 1.8.2, así que si utilizas algo más antiguo, no va a funcionar

 git --version 

Creo que no quieres usar la doble estrella en esta situación.

 !**/.bower.json bower_components/*