Это содержимое моего "корня" .gitignore

# exclude everything ...
*
# ...except
!/.gitignore
!*/
!/modules/wp-azth/**

Проблема в том, что в папке модулей у меня много сторонних модулей с файлом .gitignore внутри.

Используя приведенные выше правила, все папки сторонних модулей игнорируются, а их файлы .gitignore - нет (и мне это, конечно, не нужно)

Есть ли способ игнорировать файлы .gitignore внутри игнорируемых подпапок? может быть, для этого можно использовать .git / config?

(я думаю, что это плохое поведение git, которое считает их, даже если они игнорируются)

ОБНОВЛЕНИЕ : кажется отсутствие git, он позволяет игнорируемой папке «произвольно» отменять игнорирование, имея правило! .gitignore внутри файла gitignore, помещенного (кем угодно) в игнорируемый подкаталог. Игнорируемые папки обычно могут содержать файлы, которые являются динамическими, временными или сторонними (кеш, временные файлы, плагины и т. Д.) ... поэтому git позволяет создавать нежелательное поведение, просто используя простое правило! .Gitignore внутри подкаталога.

git gui скриншот

3
Joseph 1 Янв 2016 в 05:55

2 ответа

Лучший ответ

Проблема в файлах .gitignore в каталоге /modules:

git check-ignore -v -n /modules/TC-JSON-API/storage/app/.gitignore возвращает: /modules/TC-JSON-API/storage/app/.gitignore:2:!.gitignore /modules/TC-JSON-API/storage/app/.gitignore

Тогда решение просто добавляло /modules/* в мой .gitignore:

# exclude everything ...
*
# ...except
!/.gitignore
!*/
!/modules/wp-azth/**

Стал

# exclude everything ...
*
modules/*
# ...except
!/.gitignore
!*/
!/modules/wp-azth/**

Я не понимал, зачем git нужна такая «спецификация» ... без этого правила в коммите обрабатываются / перечисляются только файлы .gitignore игнорируемой папки. Однако теперь это работает.

1
Guildencrantz 4 Янв 2016 в 22:08

* .gitignore будет работать, однако git по-прежнему будет отслеживать файлы .gitignore, которые он уже отслеживал


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

Showing *.gitignore works


Необязательный префикс "!" который отрицает образец; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен.

Из https://git-scm.com/docs/gitignore

Это означает, что возможно, что файл (ы) .gitignore среднего уровня содержит! *. Gitignore, что может испортить объявление более высокого уровня.

2
Community 20 Июн 2020 в 09:12