¿Cómo permitir solo files específicos * .py, * .json, * .sh dentro de un directory git / subdirectorys nesteds?

En mi git repo, tengo un directory que puede contener subdirectorys nesteds. Me gustaría permitir solo * .py, * .sh y * .json en estos subdirectorys nesteds.

Intenté agregar lo siguiente a .gitignore:

/trials/* !/trials/README /experimental/**/ !/trials/**/*.py !/trials/**/*.sh 

Pero no me permite agregar algo como trial / foo / bar.py.

Una vez que se ignora una carpeta, no puede excluir los files.
En otras palabras:

No es posible volver a include un file si se excluye un directory principal de ese file .

La forma correcta de excluir files de las reglas de gitignore es primero mediante carpetas de la list blanca:

 /trials/* !/trials/**/ 

Luego puede excluir files (en el mismo file .gitignore ):

 !/trials/**/*.py !/trials/**/*.sh 

Utilice también git check-ignore -v -- afile para ver qué regla de gitignore se aplica a un file determinado.

Intente cambiar !/trials/**/.py a !/trials/**/*.py :

 ... !/trials/**/*.py !/trials/**/*.sh