Как диагностировать и исправлять git фатальный: невозможно прочитать дерево

Я использую git для управления файлами в проекте и продолжаю работать в этой проблеме.

Когда я запускаю git status, я получаю сообщение

fatal: unable to read tree e2d920161d41631066945a3cbcd1b043de919570

Как я понимаю, я должен проверить вывод git fsck, и я получаю

broken link from    tree e09a42f248afff64336fbbec2523df97c26451ac
              to    tree e2d920161d41631066945a3cbcd1b043de919570
broken link from    tree e09a42f248afff64336fbbec2523df97c26451ac
              to    tree 9b0dd389bd7f9e8d257395d57e0881b7957f9698
broken link from    tree e09a42f248afff64336fbbec2523df97c26451ac
              to    tree 9e288a4ad60d63f342dfd18237980674426aa725
broken link from    tree e09a42f248afff64336fbbec2523df97c26451ac
              to    tree 2a04647337089f554fab8c49cfd37149e5f4fc9f
broken link from    tree e09a42f248afff64336fbbec2523df97c26451ac
              to    tree ea16658b45ce961adc3c3f519b0e8d9672918ca8

вместе с большим количеством сообщений missing blob.

Следуя различным ресурсам (например, Git - Сломанные ссылки, пропавшие и висячие деревья) Я просто повторно клонировал проект из github и начал снова.

Как только я повторно клонировал проект, все хорошо для нескольких commit s, и тогда проблема снова возникает. Повторное клонирование каждый раз не кажется оптимальным и, похоже, противоречит идее использования git, и я хотел бы попытаться понять, что происходит. Как я могу диагностировать и исправлять эту проблему?

Ответ 1

Следуя моей рекомендации старше, она сводится к тому, что можно найти репо, в котором фактически содержатся недостающие элементы (здесь полные деревья).
Это показано в "
Как исправить поврежденный репозиторий git?.

Но если полный клон не решает проблему, это может быть:


Обновите июль 2016 года, при этом git 2.10 скоро будет выпущен, теперь у вас есть:

git fsck --name-objects

См. "Как исправить ошибку git сбойная ссылка с дерева на дерево?".

Ответ 2

Я бы начал с нового клона, а затем запустил git fsck на неизмененном, нетронутом клоне. Мне интересно (как указано выше), если ваш первоначальный клон поврежден, но позволяет вам выполнить несколько операций перед тем, как осилить деревья.

Ответ 3

Это может быть или не быть проблемой, первоначально возникшей здесь, но обратите внимание, что вы увидите ошибку "фатальный: неспособный прочитать дерево" из git, если учетная запись пользователя, выполняемая командой git, отсутствует более длинный, чтобы читать все файлы, извлеченные из вашего репозитория из-за проблемы с правами на доступ/разрешения.

Таким образом, во многих случаях первое, что нужно проверить, должно быть в том, что у вас есть права собственности и разрешения, установленные правильно в файлах рабочего дерева, так как это может устранить проблему.:)

Ответ 4

Что-то, что только что сработало для меня, заключалось в том, что я сменил свои изменения, выполнив git pull, а затем выталкивая изменения обратно со стека. Мое повреждение могло быть довольно мелким, поэтому, вероятно, это не сработает для всех, но стоит попробовать.

Здесь вывод, который я получил, когда я спрятал:

[email protected] ~/code/project $ git stash
fatal: unable to read tree 5fd5f4d0425b42e5b478773fa643dd6fd4918188
fatal: unable to read tree 5fd5f4d0425b42e5b478773fa643dd6fd4918188
Saved working directory and index state WIP on master: d93430c Generic commit msg.
HEAD is now at d93430c An older generic message.

После этого я потянулся, а затем выскочил, и он очистился. Опять же, YMMV.