Tentei todas as respostas, conforme indicado aqui acima, mas nenhuma funcionou para mim. Depois de ler a documentação do gitignore ( aqui ), descobri que, se você excluir uma pasta primeiro, os nomes de arquivos na subpasta não estão sendo indexados. Portanto, se você usar o ponto de exclamação posteriormente para incluir um arquivo, ele não será encontrado no índice e, portanto, não será incluído no seu cliente git.
Essa foi a maneira de encontrar a solução. Comecei adicionando exceções para todas as subpastas da árvore de pastas para fazê-lo funcionar, o que é um trabalho e tanto. Depois pude compactar a configuração detalhada para a configuração abaixo, o que é um pouco contrário à documentação.
Working .gitignore:
# Ignore the 'Pro' folder, except for the '3rdparty' subfolder
/Pro/*
!Pro/3rdparty/
# Ignore the '3rdparty' folder, except for the 'domain' subfolder
/Pro/3rdparty/*
!Pro/3rdparty/domain/
# Ignore the 'domain' folder, except for the 'modulename' subfolder
Pro/3rdparty/domain/*
!Pro/3rdparty/domain/modulename/
Como resultado, vejo no meu cliente git que apenas os dois arquivos dentro da pasta Pro / 3rdparty / domain / modulename / estão sendo testados para a próxima confirmação, e era exatamente isso que eu estava procurando.
E se você precisar colocar várias subpastas da mesma pasta na lista de permissões, agrupe as linhas de ponto de exclamação abaixo da instrução de exclusão da seguinte maneira:
# Ignore the 'Pro' folder, except for the '3rdparty' subfolder
/Pro/*
!Pro/3rdparty/
# Ignore the '3rdparty' folder, except for the 'domain' & 'hosting' subfolders
/Pro/3rdparty/*
!Pro/3rdparty/domain/
!Pro/3rdparty/hosting/
# Ignore the 'domain' folder, except for the 'modulename' subfolder
Pro/3rdparty/domain/*
!Pro/3rdparty/domain/modulename/
# Ignore the 'hosting' folder, except for the 'modulename' subfolder
Pro/3rdparty/hosting/*
!Pro/3rdparty/hosting/modulename/
Caso contrário, não funcionará como esperado.