Я спробував усі відповіді, як зазначено вище, але жодна не допомогла мені. Прочитавши документацію gitignore ( тут ), я з’ясував, що якщо ви спочатку папку, то імена файлів у підпапці не індексуються. Отже, якщо ви потім використовуєте знак оклику, щоб включити файл, він не знайдеться в індексі і, таким чином, не буде включений у ваш git-клієнт.
Це був спосіб пошуку рішення. Я почав із додавання винятків для всіх папок у своєму дереві папок, щоб він працював, що є пекельною роботою. Згодом я зміг ущільнити детальну конфігурацію до конфігурації нижче, що трохи суперечить документації.
Робота .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/
Як результат, я бачу в своєму клієнті git, що лише два файли всередині Pro / 3rdparty / домен / ім'я модуля / папки ставляться до наступної фіксації, і саме це я шукав.
І якщо вам потрібно додати до списку декількох підпапок однієї папки, то згрупуйте рядки знаків оклику нижче виключення оператора, як це:
# 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/
Інакше це не буде працювати, як очікувалося.