Próbowałem wszystkich odpowiedzi, jak podano tutaj powyżej, ale żadna nie działała dla mnie. Po przeczytaniu dokumentacji gitignore ( tutaj ) dowiedziałem się, że jeśli najpierw wykluczysz folder, nazwy plików w podfolderze nie będą indeksowane. Więc jeśli użyjesz wykrzyknika, aby dołączyć plik, nie zostanie on znaleziony w indeksie, a zatem nie zostanie uwzględniony w twoim kliencie git.
To był sposób na znalezienie rozwiązania. Zacząłem od dodania wyjątków dla wszystkich podfolderów w moim drzewie folderów, aby działało, co jest cholernie trudne. Potem mogłem skompresować szczegółową konfigurację do poniższej konfiguracji, co jest nieco sprzeczne z dokumentacją.
Działający .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/
W rezultacie widzę w moim kliencie git, że tylko dwa pliki w folderze Pro / 3rdparty / domain / modulename / są przygotowywane do następnego zatwierdzenia i właśnie tego szukałem.
A jeśli chcesz dodać do białej listy kilka podfolderów tego samego folderu, zgrupuj linie wykrzykników poniżej instrukcji wykluczenia w następujący sposób:
# 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/
W przeciwnym razie nie będzie działać zgodnie z oczekiwaniami.