[ ПРИМЕЧАНИЕ: это не обычный "Git по-прежнему отслеживает файлы, которые я только что добавил в .gitignore!"проблема Это противоположность этому.]
У меня есть полная структура каталогов сайта в Git-репозитории. Используемая мной CMS по умолчанию поставляется с файлом .gitignore:
# Ignore paths that contain user-generated content.
sites/*/files/
sites/*/private/
Обратите внимание, что все каталоги sites/*/files исключены. Но, как я делаю свои сайты, есть определенная подпапка, которую я хочу включить в репо. Поэтому после запуска моего репо с вышеупомянутым .gitignore я изменил его так:
# Ignore paths that contain user-generated content.
sites/*/files/
!sites/*/files/content/
!sites/*/files/content/*
sites/*/private/
Насколько я понимаю, отрицательные шаблоны, которые я добавил выше, должны означать, что сайты / * / files / content / и их содержимое включены в репозиторий, а остальные сайты / * / files игнорируются. И когда я не забываю обновить свой файл .gitignore перед выполнением моего первого коммита, он работает как запланировано.
Но когда я забываю обновить .gitignore на более поздний срок, как обычно, я не могу заставить Git добавлять новые файлы, не заставляя его полностью игнорировать файл .gitignore. Я запускаю это:
> git add sites/default/files/content/
И получить это обратно:
The following paths are ignored by one of your .gitignore files:
sites/default/files
Use -f if you really want to add them.
fatal: no files added
Почему да, Git, этот каталог игнорируется в строке 2 .gitignore, но в строках 3 и 4 говорится об исключении для конкретной папки, о которой я вас просил!
Я знаю, что могу использовать -f, чтобы добавить его напрямую, но затем мне придется делать это снова и снова при любом будущем коммите, который добавляет файлы в этот каталог.
Есть страницы все более в Интернете , которые говорят о том , как обновление .gitignore не делает Git игнорировать уже отслеживаются файлы, но я не могу найти ничего , что говорит о том , как это не делает Git отслеживать недавно освобожденные файлы.
Во многих местах говорится, что git update-index
может использоваться для решения подобных проблем, но я не могу заставить его работать на меня. У него около миллиона возможных флагов, поэтому, возможно, я не наткнулся на правильный (или комбинацию нескольких).
TL; DR: Как я могу заставить Git наблюдать новые исключения в моем файле .gitignore?