TLDR; да, вы собираетесь удалить контент, который вы только что удалили, когда вы git pull с VPS.
Давайте проанализируем ситуацию здесь.
Каждый раз, когда я делал локальное изменение, я пушил в репозиторий и с VPS, где находится сайт (через SSH), делал git pull.
Таким образом, это происходит тремя способами: GitHub — это ваш центральный репозиторий, вы разрабатываете локально, создаете резервную копию удаленно на GitHub для распространения и загружаете с VPS для развертывания веб-сайта.
Я понял, что некоторые папки, ранее помещенные в .gitignore, на самом деле не игнорировались.
Это нормальное и хорошо задокументированное поведение. Если файлы уже были добавлены и зафиксированы до их появления в .gitignore, они продолжат отслеживаться. Также обратите внимание, что на VPS команда git pull не удалит эти файлы, а просто продолжит их игнорировать.
Затем я увидел, что можно очистить кеш git. Я сделал это таким образом, и следующий толчок фактически проигнорировал то, что я хотел, чтобы он проигнорировал:
git rm -rf --cached .
git add .
git commit -am "cleaning git cache"
git push
Теперь вы создали фиксацию, чтобы специально удалить эти файлы и прекратить их отслеживание, поскольку они добавлены в -gitignore. С этого момента, если вы поместите файл, соответствующий параметрам игнорирования, в рабочую папку, он будет игнорироваться. Не удалено, просто не упомянуто для контроля версий.
У меня, например, это в файле .gitignore
/storage
/storage/*/*
Когда я выполню git pull на VPS, будет ли удалена папка хранения, которая у меня есть (которая полна полезных файлов, которые вообще не следует удалять)?
Следует отметить, что, поскольку /storage содержит /storage/*/*, вторая строка в вашем .gitignore избыточна. Но увы. Вернемся к делу: содержимое .gitignore не имеет значения. Как мы уже знаем, эти файлы будут проигнорированы.
Однако следует сделать оговорки:
- Если вы зафиксировали удаление этих файлов, то эти файлы будут удалены (похоже, что вы это сделали).
- Если вы заново клонируете репозиторий на VPS, то есть если вы очищаете свой текущий веб-сайт и
git clone из GitHub, вы, вероятно, никогда не получите содержимое storage таким образом.
- Мне кажется, вы не хотите ставить
storage под контроль версий, а ведь данные для вас важны. Создайте резервную копию в другом месте.
Дело не в .gitignore в вашем случае, а в том, что вы явно зафиксировали удаление этих файлов.
Теперь позвольте мне предположить, что содержимое storage обновляется только на VPS и никогда не фиксируется и не отправляется на GitHub. Дополнительные предостережения:
- git не знает об этом содержимом
- Если вы удалите его, он исчезнет навсегда, с точки зрения git
- Если вы оказались в такой ситуации из-за того, что контент уже был зафиксирован один раз, и он никогда не меняется, и я прав в обоих предположениях, вы сможете найти его в ваша история репозитория в предыдущем коммите. Но это немного выходит за рамки ответа.
Внимательно прочитав другие ответы, я хотел бы связать документы (выделено мной ):
Удалите файлы, соответствующие спецификации пути, из индекса или из рабочего дерева и индекса. git rm не удалит файл только из вашего рабочего каталога. (Нет возможности удалить файл только из рабочего дерева и при этом сохранить его в индексе; используйте /bin/rm, если вы хотите это сделать.)
И вы поставили это в очередь с recursive, force и cached:
Используйте этот параметр, чтобы отменить подготовку и удалить пути только из индекса. Файлы рабочего дерева, независимо от того, изменены они или нет, останутся нетронутыми.
Но вы отменяете проверку актуальности с помощью force.
person
Daemon Painter
schedule
12.02.2021
git pullне удалит эти файлы, но, поскольку они важны для вас, вы должны регулярно создавать их резервные копии. - person ceejayoz   schedule 12.02.2021git revert, так иgit reset, и обратите внимание, что они делают разные вещи: вам нужно решить, хотите ли вы (и это нормально) удалить историю или просто добавить новую историю, которая восстанавливает предыдущее состояние. Тем не менее, вероятно, лучше не хранить в Git те вещи, которые не должны храниться в Git, и делать регулярные резервные копии. - person torek   schedule 13.02.2021git reset --soft HEAD~1- person marco987   schedule 13.02.2021