Se você tentar dessa forma, ele falhará, porque você acabará colocando os diretórios na lista negra de sua estrutura.
Para resolver, você deseja colocar na lista negra tudo o que não é um diretório e não é um dos tipos de arquivo que deseja enviar, enquanto não coloca os diretórios na lista negra .
O .gitignorearquivo que fará isso:
# First, ignore everything
*
# Now, whitelist anything that's a directory
!*/
# And all the file types you're interested in.
!*.one
!*.two
!*.etc
Testei isso em uma lista branca de estrutura de três níveis para .txtarquivos na presença de *.one, *.twoe *.threearquivos usando um .gitignorelocalizado no diretório raiz do repositório - funciona para mim. Você não terá que adicionar .gitignorearquivos a todos os diretórios em sua estrutura.
As informações que usei para descobrir a resposta vieram, entre outras coisas, deste (stackoverflow.com).