Белые списки и подкаталоги в Git

Я создал белый список только для текстовых файлов.

*
!*.txt

Теперь у меня есть неподписанный текстовый файл в подкаталоге - sub/dir/file.txt, и это НЕ отображается (оно игнорируется). Однако текстовые файлы в корневом каталоге отображаются.

Почему это и как его исправить?

Ответ 1

Если вы попробуете так, это не удастся, потому что вы в конечном итоге занесете в черный список каталоги в своей структуре.

Чтобы решить, вы хотите, чтобы в черный список было все, что не является каталогом, и не является одним из типов файлов, которые вы хотите зафиксировать, , а не черным списком каталогов.

Файл .gitignore, который будет делать это:

# First, ignore everything
*
# Now, whitelist anything that a directory
!*/
# And all the file types you're interested in.
!*.one
!*.two
!*.etc

Протестировано это в трехуровневой структуре белого списка для .txt файлов в присутствии файлов *.one, *.two и *.three, используя .gitignore, расположенный в корневой директории репозитория - работает для меня. Вам не нужно добавлять файлы .gitignore ко всем каталогам в вашей структуре.

Информация, которую я использовал, чтобы выяснить, ответ пришел, среди прочего, this (stackoverflow.com).