Git - как оправиться от пропавшего блоба - PullRequest
12 голосов
/ 08 сентября 2011

Я использую git 1.6.4.2.Сборка мусора завершается с ошибкой, говоря «ошибка: невозможно найти <SHA1>».

Мне удалось определить, что отсутствующий объект является BLOB-объектом, и я никак не могу вернуть файл BLOB-объекта.Похоже, что 2 сценария, которые запускают «git add» и «git commit», выполнялись одновременно и сумели помешать друг другу, так что один зафиксировал более новую версию файла, чем другой, и блоб более старой версии исчез.

Итак, сейчас я пытаюсь откатить мой репозиторий, чтобы извлечь коммит, который ссылается на дерево, ссылающееся на отсутствующий BLOB-объект.

Я знаю, какая ветвь была коммитом.на, поэтому я запустил «git reset», чтобы перемотать к родителю коммитов duff.И я знаю, что ветка была объединена где-то еще, поэтому я тоже перемотал эту ветку.Так что, насколько я знаю, ни на что не ссылаются duff commit / tree / blob.Но если я запускаю git prune --expire = now, а затем git gc, я все равно получаю ошибку об отсутствующем объекте.

Поэтому мой вопрос таков: как я могу запросить базу данных git, чтобы найти каждый объект деревав котором содержится идентификатор блэйфа?И как мне тогда узнать, что заставляет git prune его сохранить?

Tricky !!

Спасибо, Кевин

Ответы [ 2 ]

11 голосов
/ 29 июня 2013

После еще нескольких копаний выясняется, что на мой вопрос здесь дан ответ: Как удалить BLOB-объект из git repo - git prune не удалял материал, который я бы намотал обратно, потому что reflog все еще имел в виду это. Запуск

git reflog expire --expire=now --all

исправил это. Кроме того, ссылка на пост дает механизм для запуска git lstree при каждом коммите, чтобы найти указанный BLOB-объект.

5 голосов
/ 14 апреля 2015

У меня была такая же проблема (отсутствует blob) и решение с

git reflog expire --expire=now --all

не добился цели. Я нашел свое решение здесь: https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F

Эта простая строка

git hash-object -w <file>

Исправлен отсутствующий BLOB-объект.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...