Обновлен, чтобы отразить исправление от OP, что обновления были сделаны на локальном клоне, а не на сервере, и что сервер является пустым репозиторием с ловушкой, которая обновляет рабочую папку с помощью checkout -f
Флаги индекса (skip-worktree
или assume-unchanged
) не являются решением проблемы, но ваше понимание того, почему (что это имеет какое-либо отношение к .gitignore
), неверноили.Скорее, эти флаги устанавливаются в записи файла в индексе;Вы не можете установить флаг для этих файлов, потому что удалили файлы из индекса.
Вы пояснили, что три шага, которые вы упомянули (создать .gitignore
, запустить rm --cached
, попытаться установить флаги индекса)были сделаны на местном клоне.Поэтому следующий вопрос заключается в том, как синхронизировать это с сервером, не удаляя каталог content
сервера.
Индекс, как и у рабочего дерева, является локальным.Таким образом, сервер еще не знает, что вы сделали что-нибудь.В следующий раз, когда вы сделаете коммит и нажмете его, вам нужно будет предпринять шаги для правильного обновления сервера (иначе каталог содержимого будет утерян).Я рекомендую сделать это сейчас, чтобы у вас не было дополнительных изменений для жонглирования одновременно (и чтобы вы не забыли выполнить дополнительные шаги).
Вам нужно будет вернуться назади далее между локальным сервером и сервером, так что я бы пошел вперед и открыл оболочку на каждом.
На сервере необходимо запретить автоматическое обновление рабочего деревапредстоящий толчок.Поскольку репо на стороне сервера пустое и обновление происходит с помощью ловушки, отключите ловушку.(Либо переместите скрипт post-receive из каталога hooks, либо отредактируйте его и закомментируйте строки, извлекающие изменения.)
Теперь локально , вам нужно поставить .gitignore
сохраните файл и зафиксируйте изменения (включая удаление (из индекса) каталога content
) и нажмите:
git add .gitignore
git commit
git push
Теперь на сервере , который необходимо синхронизироватьвверх по рабочему дереву и снова включите хук.Поскольку единственным изменением (кроме подавления папки content
) был файл .gitignore,
git checkout --work-tree /path/to/webroot -- .gitignore
будет выполнять синхронизацию.Затем отмените все, что вы сделали, чтобы отключить крючок.