Intenté todas las respuestas como se dan aquí arriba, pero ninguna funcionó para mí. Después de leer la documentación de gitignore ( aquí ) descubrí que si excluye una carpeta primero, los nombres de archivo en la subcarpeta no se indexan. Entonces, si usa el signo de exclamación después para incluir un archivo, no se encuentra en el índice y, por lo tanto, no se incluye en su cliente git.
Esa fue la forma de encontrar la solución. Comencé agregando excepciones para todas las subcarpetas en mi árbol de carpetas para que funcionara, lo cual es un gran trabajo. Luego pude compactar la configuración detallada a la siguiente configuración, lo cual es un poco contrario a la documentación.
Trabajo .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, veo en mi cliente git que solo los dos archivos dentro de la carpeta Pro / 3rdparty / domain / modulename / se están organizando para la próxima confirmación, y eso fue exactamente lo que estaba buscando.
Y si necesita incluir en la lista blanca varias subcarpetas de la misma carpeta, agrupe las líneas de exclamación debajo de la declaración de exclusión de esta manera:
# 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/
De lo contrario, no funcionará como se esperaba.