Как справиться с этой ошибкой git
Я получаю эту ошибку в моем репозитории git:
22:09:15 $ git status
# On branch master
error: Could not read 8124cc15c63be92d534e4cdfa33c38d54deee122
error: unable to read tree object HEAD
nothing to commit (working directory clean)
Поиск Google error: unable to read tree object HEAD
не приводит к большой помощи, эта ошибка кажется очень редкими. Я не уверен, как с этим бороться. Это может быть сбой жесткого диска?
Edit:
Выходной сигнал git fsck
следующий:
broken link from commit 607328dc80e4901a55b95c683d4fbf43e6df28bf
to tree 8124cc15c63be92d534e4cdfa33c38d54deee122
missing tree 8124cc15c63be92d534e4cdfa33c38d54deee122
dangling tree 56b5d4a5e429d251582ec927bca7ef1225510c41
dangling tree 0259d2d38b18b6136bb6070fb41faf3624453cc6
Ответы
Ответ 1
В сообщении с "сломанной ссылкой" вы можете следовать рекомендациям GitFaq:
- создайте резервную копию всего своего состояния, чтобы все, что вы делаете, можно было выполнить, если вы повредили больше!
- взорвать любые поврежденные пакеты файлы
- См. "
man git-unpack-objects
" и, в частности, флаг "-r
".
Кроме того, имейте в виду, что он только распаковывает объекты, которые еще не доступны, поэтому сначала нужно перенести пакетный файл с его обычного местоположения (иначе git-unpack-objects
найдет все объекты, которые находятся в пакетном файле в пакете -file, а не распаковать что-либо вообще)
- заменить любые сломанные и/или отсутствующие объекты
- Это сложная часть.
Иногда (надеюсь, часто!) Вы можете найти недостающие объекты в других копиях репозиториев.
В других случаях вам может понадобиться попытаться найти данные по-другому (например, возможно, ваша извлеченная копия содержит содержимое файла, которое, когда хеширование будет отсутствующим объектом?).
- убедитесь, что все довольны "
git fsck --full
" - переупаковать все, чтобы снова вернуться в эффективное состояние.
Примечания:
Обновление июля 2016 года (7 лет), при этом Git 2.10 скоро выйдет, теперь у вас есть:
git fsck --name-objects
Он помогает называть происхождение этих сломанных ссылок
См. "Как исправить ошибку Git с ошибкой ссылки с дерева на дерево?".
Ответ 2
У меня была аналогичная проблема только сейчас. Коррупция возникла, когда мой ноутбук сделал жесткое отключение во время git pull
. У меня есть резервный репозиторий. Сначала у меня было несколько объектных файлов в .git/objects/??/*, которые были нулевого размера. После резервной копии хранилища cp -a
я сделал следующее:
Это заполнило недостающие объекты в базе данных объектов. Кажется, что хранилище резервное копирование теперь.
Ответ 3
У меня была та же проблема. После много вытягивания волос я обнаружил, что это было причиной, изменив разрешение на репозиторий git файлов. Я решил это следующим образом:
$ cd .git
$ chmod 755 *
Готово!
Ответ 4
Я получил аналогичную ошибку в Homebrew устанавливает Git репозиторий. Вместо того, чтобы восстанавливать все недостающие объекты один за другим, мне было проще просто удалить каталог .git
и создать его снова путем повторного клонирования из общедоступный репозиторий Homebrews. Это были мои шаги:
- Проверьте, какая информация у вас в репозитории Git, которую вы не получите, просто повторно клонируя. Для меня это были частные ветки, приставки и пульты.
- Преобразуйте stashes в реальные коммиты, создав новую ветку, применив stash и совершив что-то вроде "[WIP]" в имени, чтобы показать, что это задержка.
- Сохраните ветки, которые не находятся на открытом пульте дистанционного управления, нажав их на свой собственный пульт. Это может быть fork репозитория на GitHub или просто новый репозиторий Git в другом месте на вашем компьютере.
- Если у вас несколько удаленных, сохраните вывод
git remote -v
, который содержит имена и URL-адреса ваших пультов, поэтому вы можете вручную добавить их позже.
- Удалите каталог repoistorys
.git
(или переименуйте его в .git-broken
и удалите его позже). В командной строке это rm -rf .git
.
- Повторно клонировать удаленный каталог с помощью
git clone https://github.com/Homebrew/homebrew.git
или любого другого URI.
- Это создаст новую подпапку
homebrew
, названную после репозитория. Вы хотите получить только каталог .git
; ваши локальные файлы уже в порядке. Итак mv homebrew/.git .git
, а затем удалите папку homebrew
.
- В вашем репозитории Git не должно быть ошибок, поскольку вы воссоздали его с нуля. Теперь просто восстановите любую информацию, сохраненную на первом шаге.
- Если у вас есть дополнительные пульты, добавьте их снова с помощью
git remote add <name> <url>
.
- Если вы создали резервную копию любых веток (или штампов, преобразованных в ветки) в удаленный репозиторий, вытащите их из этого репозитория в локальный репозиторий.
- Если вы хотите, вы можете преобразовать ветки штампа обратно в штампы, скопировав "[WIP]" фиксацию с помощью
git reset HEAD^
и снова сохраните рабочий каталог с помощью git stash save <custom-message>
.
Если вы запустите git fsck
, вы не увидите ошибок:
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (197135/197135), done.
Checking connectivity: 197162, done.
$
И git stash list
, git branch
и git remote -v
должны показывать тот же результат, что и раньше.
Ответ 5
Если у вас нет неуправляемых изменений, самым простым решением является удаление локальной ветки:
git branch -D [название ветки]
а затем снова проверьте удалённую ветку:
git проверка -b [название ветки] происхождение/[название отрасли]
Ответ 6
я исправил ошибку, внося изменения в ту же директорию/папку проекта, а затем попытался зафиксировать новое изменение, что случилось, так это я получил сообщение об ошибке msg 'недопустимый объект 100644 e38e910ceb18b09f436f353c3a131bfe2caba130 для' Book/alise_mathe/app/src/main/res/menu/drawermenu.xml"
этот msg решил проблему, я просто реорганизовал drawermenu.xml, изменив имя файла на 'drawer_menu.xml'. добавлены изменения, сделанные нажатыми, и все. (Андроид-студия)
Надеюсь, это поможет некоторым образом
Ответ 7
Я исправил эту ошибку, удалив папку "repo" Capistrano из каталога удаленного сервера. Я рассмотрел ряд других предложенных проблем и решил, что проблема не связана с моим местным проектом. Проблема возникла, когда Капистрано выполнял вытягивание с репо на удаленный. Для меня это, возможно, было связано с остановленным развертыванием, которое оставило поврежденные объекты/ссылки на объекты. Мой хост также только что выполнил миграцию сервера, возможно, что-то стало повреждено во время этого процесса.