Неустранимая ошибка при распаковке объекта дерева во время git svn fetch
При запуске get svn fetch вытащить последние новые ветки из восходящего репозитория svn, я получил эту ошибку:
$ git svn fetch
fatal: failed to unpack tree object 5ecb324e8b8fcb918acb253f33edc6ce49e49e0d
read-tree 5ecb324e8b8fcb918acb253f33edc6ce49e49e0d: command returned error: 128
Теперь каждая попытка в git svn в этом локальном репо приводит к той же ошибке. Первоначально я запускал git версию 1.5.6.4_0, а после ошибки я попытался обновить до 1.6.0.2_2, и проблема все еще сохраняется.
Есть ли способ очистить эту коррупцию? Свежий git svn-клон восходящего репозитория в порядке, но я бы хотел сохранить существующую настройку. Я просмотрел документы и искал проблему без везения.
Ответы
Ответ 1
У меня была та же проблема. Это связано с тем, что версия SVN git -svn не может каким-либо образом читать или иметь дело. Вот что я пытался в порядке:
- Перемотайте в известную работу:
git svn reset -r 42
- Повторить выборку:
git svn fetch
- выбирает каждую ревизию, начиная с 42 до виновной (скажем, 50), а затем показывает то же сообщение об ошибке.
- Извлеките родителя:
git svn fetch --parent
- Не спрашивайте меня, почему. Это дает больше изменений. Не знаю, насколько это актуально.
- Повторить выборку:
git svn fetch
- все еще не работает.
- Выполните следующие изменения:
-
git svn fetch -r 50
- Работает.
-
git svn fetch -r 51
- Пока нет сообщения об ошибке, продолжайте.
-
git svn fetch -r xx
- появляется сообщение об ошибке, это плохая ревизия. Не волнует.
-
git svn fetch -r xx+1
- Работает.
- Повторить выборку:
git svn fetch
- Работает! Начинает получать дополнительные версии.
Процесс нужно очистить (вероятно, около первых шагов), но это сработало для меня, без необходимости начинать со свежего клона.
Ответ 2
Наиболее вероятной причиной этого является файл или фиксация (что ссылки на дерево) повреждены или отсутствуют. Или дерево может быть повреждено. Проверьте:
git fsck --unreachable HEAD $(cat .git/refs/heads/*)
Это покажет кучу "болтающихся" файлов, которые вам не нужны; поврежденные файлы будут сообщать "Недействительный SHA1" или некоторые такие вещи. Я не знаю, как сообщалось бы отсутствующий файл. Удалите все поврежденные элементы и rsync
из вашего восходящего репо, чтобы заменить их.
Ответ 3
У меня возникло такое же сообщение об ошибке после создания новой ветки SVN. Я смог решить проблему, удалив полный каталог ".git/svn" и снова извлекая из SVN:
$ rm -rf .git/svn
$ git svn fetch
Rebuilding .git/svn/refs/remotes/trunk/.rev_map.1d5df120-ff1b-4f4f-af56-171ecbcc785d ...
Это снова вызвало все коммиты из SVN и разрешило ошибку.