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


Я видел подобные вопросы (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 61

4 ответа:

@SimonBuchan правильно.

начиная с git 1.8.2,Resources/** !Resources/**/*.foo строительство.

лучший ответ-добавить ресурсы/.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

Это может выглядеть глупо, но проверьте, если вы еще не добавили папку/файлы, которые вы пытаетесь игнорировать в индекс раньше. Если вы это сделали, не имеет значения, что вы положили в свой .gitignore файл, папки / файлы по-прежнему будут размещены.