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