Существует большая разница между правилами, которые работают, и теми, которые не работают. Те, которые работают, работают с каталогом и файлом внутри него. Те, которые не работают, содержат промежуточные каталоги.
web/uploads/*
Это правило игнорирования говорит Git игнорировать все файлы и подкаталоги web/uploads
.
Правила исключения, следующие за ним:
!web/uploads/filters/.gitkeep
!web/uploads/payments/.gitkeep
!web/uploads/surveys/.gitkeep
не соответствует ни одному файлу, потому что каталоги filters
, payments
и surveys
(и их содержимое) игнорируются из-за предыдущего правила.
Простого решения этой проблемы не существует (или, по крайней мере, нет такого, о котором я знаю).
Решение существует (но оно многословно): вы должны указать Git игнорировать все в web/uploads
, кроме подкаталогов filters
, payments
и surveys
, тогда для каждого из них игнорировать все внутри это кроме .gitkeep
.
Согласно правилам .gitignore
, параграф выше представлен следующим образом:
# Ignore everything in web/uploads
web/uploads/*
# ... except for the 'filters' subdirectory...
!web/uploads/filters
# ... but ignore everything inside it...
web/uploads/filters/*
# ... except for .gitkeep
!web/uploads/filters/.gitkeep
# The same rules as above for 'payments'
!web/uploads/payments
web/uploads/payments/*
!web/uploads/payments/.gitkeep
# ... and surveys
!web/uploads/surveys
web/uploads/surveys/*
!web/uploads/surveys/.gitkeep