Не игнорировать файл в подкаталоге? - PullRequest
5 голосов
/ 03 июля 2010

У меня есть следующий .gitignore файл

*.pyc

project/app/dist/*
project/bin/*
project/etc/*
project/var/*

!README.txt

Пока все хорошо, большинство моих README.txt файлов не игнорируются, точно так же, как я хочу, чтобы это произошло, за исключением project/ect/downloads/README.txt. Этот файл игнорируется. Почему это? И как я могу это исправить?

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

Ответы [ 2 ]

16 голосов
/ 03 июля 2010

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
3 голосов
/ 03 июля 2010

В файле .gitignore после / project / etc / * добавьте 2 строки:

!/project/etc/downloads/
/project/etc/downloads/*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...