Я встречал похожие вопросы ( 1 , 2 и 3 ), но не получил от них правильного решения.
Мне нужно игнорировать все файлы в определенной папке, за исключением файла определенного типа. Папка - это подкаталог для корневого пути. Позвольте мне назвать папку Resources
. Поскольку я не хочу усложнять ситуацию, позвольте мне игнорировать файлы во всех папках с указанием, Resources
где бы они ни находились.
Это наиболее распространенное решение (во всех повторяющихся вопросах)
# Ignore everything
*
# Don't ignore directories, so we can recurse into them
!*/
# Don't ignore .gitignore
!.gitignore
# Now exclude our type
!*.foo
Проблема с этим решением заключается в том, что оно перестает отслеживать вновь добавленные файлы (поскольку *
игнорирует все файлы). Я не хочу продолжать исключать все типы файлов. Я хочу нормального поведения, при котором, если добавляется новый файл, git status
отображается.
Я , наконец , получил решение здесь . Решение - добавить .gitignore
в Resources
папку еще один файл . Это работает правильно.
Могу ли я добиться того же с помощью одного файла игнорирования? Я считаю, что наличие большого количества игнорируемых файлов в разных каталогах немного неудобно.
Вот чего я пытаюсь достичь:
# Ignore everything under Resources folder, not elsewhere
Resources
# Don't ignore directories, so we can recurse into them
!*Resources/
# Now exclude our type
!*.foo
Но это дает противоположный результат. Он игнорирует *.foo
типы и отслеживает другие файлы.
DirectoryName1/** DirectoryName1/**/*
для каждого из них. Сначала удаляются каталоги, но вам нужен второй, чтобы удалить все типы файлов.Лучший ответ - добавить файл Resources / .gitignore в раздел Ресурсы, содержащий:
Если вы не хотите или не можете добавить этот файл .gitignore, есть неэлегантное решение:
Вам нужно будет отредактировать этот шаблон, если вы добавите каталоги глубже, чем указано.
источник
Это может показаться глупым, но проверьте, не добавляли ли вы ранее папку / файлы, которые вы пытаетесь игнорировать, в индекс. Если вы это сделали, неважно, что вы поместили в свой файл .gitignore, папки / файлы все равно будут размещены.
источник
git rm --cached <path to files>
удалить эти игнорируемые файлы из git, оставив их в файловой системе.Либо я делаю это неправильно, либо принятый ответ больше не работает с текущим git.
Я действительно нашел правильное решение и разместил его почти под тем же вопросом здесь . За подробностями обращайтесь сюда.
Решение:
источник
!/Resources/**/
было решающим, чтобы git не игнорировал подкаталоги.