J'ai essayé toutes les réponses ci-dessus, mais aucune n'a fonctionné pour moi. Après avoir lu la documentation de gitignore ( ici ), j'ai découvert que si vous excluez d'abord un dossier, les noms de fichiers dans le sous-dossier ne sont pas indexés. Donc, si vous utilisez le point d'exclamation par la suite pour inclure un fichier, il ne se trouve pas dans l'index et n'est donc pas inclus dans votre client git.
C'était le moyen de trouver la solution. J'ai commencé par ajouter des exceptions pour tous les sous-dossiers de mon arborescence de dossiers pour le faire fonctionner, ce qui est un sacré travail. Par la suite, j'ai pu compacter la configuration détaillée dans la configuration ci-dessous, ce qui est un peu contraire à la documentation.
.Gitignore de travail:
# 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/
En conséquence, je vois dans mon client git que seuls les deux fichiers à l'intérieur du dossier Pro / 3rdparty / domain / modulename / sont mis en scène pour le prochain commit, et c'est exactement ce que je cherchais.
Et si vous devez ajouter à la liste blanche plusieurs sous-dossiers du même dossier, regroupez les lignes de point d'exclamation sous l'instruction exclude comme ceci:
# 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/
Sinon, cela ne fonctionnera pas comme prévu.