Git не будет искать project/etc/downloads/
для каких-либо файлов, потому что вы настроили его на игнорирование project/etc/*
.Шаблон «unanchored» !README.txt
подходит только для отмены исключения записей в каталогах, в которых будет производиться поиск (т.е. в каталогах, которые сами не были исключены).
Если вы исключите project/etc/
, Git никогда не будетпоиск в этом каталоге, поэтому отрицательные исключения никогда не могут быть применены к его содержимому (даже не так явно, как !project/etc/important-file
! - может быть, это можно считать ошибкой?).
Однако, если вы исключите project/etc/*
,Git будет искать этот каталог, и к его содержимому могут применяться отрицательные исключения.Человек может понять, что второй шаблон всегда будет соответствовать всем файлам и назначать одинаковое значение обоим шаблонам, но Git, но Git обрабатывает их по-разному.
Вы можете считать project/etc/
и project/etc/*
значениемто же самое, но Git относится к ним по-разному, потому что он не «понимает», что второй будет соответствовать всему в каталоге.
Итак, чтобы заставить !README.txt
примениться в projects/etc/downloads/
, вам придется проигнорироватькаталог, но игнорируйте его содержимое до шаблона !README
:
project/etc/*
# "unignore, but ignore the immediate contents of" project/etc/downloads
# so that subsequent negated patterns can apply to the immediate contents
!project/etc/downloads/
project/etc/downloads/*
!README.txt