Ответ 1
Так как git 1.8.2, Resources/** !Resources/**/*.foo
работает.
Я видел похожие вопросы (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
и отслеживает другие файлы.
Так как 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
Вам нужно будет отредактировать этот шаблон, если вы добавите каталоги глубже, чем указано.
Это может выглядеть глупо, но убедитесь, что вы еще не добавили папку/файлы, которые вы пытаетесь игнорировать до индекса. Если вы это сделали, неважно, что вы помещаете в свой .gitignore файл, папки/файлы все равно будут поставлены.