Правильно игнорировать все файлы рекурсивно в определенной папке, за исключением определенного типа файла
Я видел подобные вопросы (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
показывает это.
я, наконец, получил решение. Решение состоит в том, чтобы добавить еще один на . Это работает правильно.
могу ли я добиться того же с одним игнорировать файл? Я нахожу, что многие игнорируют файлы в разных каталогах немного неуклюжими.
вот чего я пытаюсь добиться:
# 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
типы и треки других файлов.
4 ответа:
лучший ответ-добавить ресурсы/.gitignore файл в разделе Ресурсы, содержащие:
# Ignore any file in this directory except for this file and *.foo files * !/.gitignore !*.foo
Если вы не хотите или не можете добавить это .gitignore файл, есть неэлегантное решение:
# Ignore any file but *.foo under Resources. Update this if we add deeper directories Resources/* !Resources/*/ !Resources/*.foo Resources/*/* !Resources/*/*/ !Resources/*/*.foo Resources/*/*/* !Resources/*/*/*/ !Resources/*/*/*.foo Resources/*/*/*/* !Resources/*/*/*/*/ !Resources/*/*/*/*.foo
вам нужно будет отредактировать этот шаблон, если вы добавляете каталоги глубже, чем указано.
Я делаю это неправильно или принятый ответ больше не работает с текущим git.
Я на самом деле нашел правильное решение и разместил его почти под тем же вопросом здесь. Для более подробной информации отправляйтесь туда.
устранение:
# Ignore everything inside Resources/ directory /Resources/** # Except for subdirectories(won't be commited anyway if there is no commited file inside) !/Resources/**/ # And except for *.foo files !*.foo