[Примечание: это не обычная "мерзавец еще треки, я просто добавил .гитюдного!" проблема. Это противоположность этому.]
у меня есть полная структура каталогов веб-сайта в репозитории Git. CMS, который я использую, поставляется по умолчанию с a .файл пример:
# 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/
насколько я понимаю, отрицательные шаблоны, которые я добавил выше, должны означать, что сайты/*/файлы/контент/ и его содержимое включены в репозиторий, но остальные сайты/*/файлы игнорируются. И когда я помню, чтобы обновить мой .файл 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, чтобы добавить его напрямую, но тогда я должен делать это снова и снова на любом будущем коммите, который добавляет файлы в этот каталог.
есть страницы все over web что говорить о том, как обновление .gitignore не заставляет Git игнорировать уже отслеженные файлы, но я не могу найти ничего, что говорит о том, как он не заставляет git отслеживать недавно исключенные файлы.
много мест говорят, что git update-index
может быть использован для решения таких проблем, как это, но я не могу заставить его работать для меня. Он имеет около миллиона возможных флагов, поэтому, возможно, я не наткнулся на правильный (или сочетание нескольких).
TL; DR: как я могу заставить Git соблюдать новые исключения в моем .файл гитюдного?