Эта ошибка часто встречается при переполнении стека, и все, что вам нужно знать, описано в сообщении об ошибке, если вы понимаете используемые термины.В комментариях к вашему вопросу я связал несколько других вопросов, связанных с той же ошибкой, но я все равно добавлю здесь краткое резюме.
По сути, в git есть два типа репозитория -голые репозитории и не голые.Когда вам нужно работать с кодом, вы почти всегда используете не-пустой репозиторий, который на верхнем уровне имеет каталог:
- a
.git
(содержащий всю историю вашего проекта) - все остальное в этом каталоге верхнего уровня, обычно весь исходный код, над которым вы работаете
Последнее - это "рабочее дерево".
Голыйхранилище похоже на отдельный каталог .git
.Это означает, например, что в пустом хранилище никогда не может быть локальных изменений, и вы не можете выполнить слияние с тем, что может привести к конфликтам.
Если вы попытаетесь перейти к ветви, которая в настоящий момент извлечена вв непокрытом хранилище у git есть проблема.Если оно не касается рабочего дерева, но обновляет ветку, результаты из git status
внезапно будут выглядеть очень запутанными - любые файлы, которые были добавлены в новые коммиты из ветви, будут отображаться как deleted
в git status
иВаши локальные изменения и изменения, внесенные новыми коммитами, будут перепутаны.Если git просто обновляет ваше рабочее дерево, оно может перезаписать локальные изменения, которые у вас там были.
Обычно рекомендуется, чтобы вы только переходили к пустым репозиториям.Однако есть несколько способов обойти это - например, следующий ответ в git FAQ предлагает пару:
В этом случае, так как вы хотите, чтобы push-хранилище для этого хранилища развернуло ваш код, вы можете попробовать хук, связанный с этим , что делает отправку врепозиторий без обнажений, более безопасный, чем просто хук, который выбрасывает локальные изменения с git reset --hard
или подобным.