Неустранимая ошибка при распаковке объекта дерева во время получения git svn

При запуске 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 из вышестоящего репозитория - это нормально, но я хотел бы сохранить существующую настройку. Я просмотрел документы и безуспешно искал проблему в Google.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
15
0
6 810
3

Ответы 3

Наиболее вероятной причиной этого является повреждение или отсутствие файла или фиксации (на которые ссылается дерево). Или само дерево могло быть повреждено. Проверить с:

git fsck --unreachable HEAD $(cat .git/refs/heads/*)

Это покажет кучу «болтающихся» файлов, которые вам не нужны; поврежденные файлы сообщат "Invalid SHA1" или что-то подобное. Я не знаю, как сообщить об отсутствующем файле. Удалите все поврежденные элементы и rsync из исходного репозитория, чтобы заменить их.

Спасибо за информацию. К сожалению, поврежденных файлов не обнаружено, только несколько недостижимых деревьев / коммитов / капель. Используя git в качестве внешнего интерфейса для репозитория svn, у меня нет вышестоящего git для rsync для восстановления. Я попробовал rsync из свежего клона git svn, но потерял все свои локальные ветки.

notascleveras 08.12.2008 20:50

2-3 месяца назад в группе новостей (или, возможно, в списке рассылки) был отчет о том, что у кого-то была аналогичная проблема, которая исчезла, когда они перепаковали свое репо. Мне не удалось найти отчет, что, вероятно, означает, что это были не совсем те же сообщения об ошибках.

Paul 09.12.2008 10:22

Пробовал перепаковывать. Не повезло. А пока я перехожу к новому клону git svn. Спасибо за предложения.

notascleveras 12.12.2008 02:30

У меня такая же проблема. Это связано с конкретной ревизией SVN, которую git-svn не может читать или как-то обрабатывать. Вот что я пробовал по порядку:

  1. Вернитесь к исправной версии: git svn reset -r 42
  2. Повторить выборку: git svn fetch - выбирает каждую ревизию, начиная с 42 до виновной (скажем, 50), затем показывает то же сообщение об ошибке.
  3. Получите родительский: git svn fetch --parent - Не спрашивайте меня, почему. Это требует дополнительных исправлений. Не знаю, актуально ли это.
  4. Повторите выборку: git svn fetch - по-прежнему не работает.
  5. Получите каждую из следующих ревизий:
    1. git svn fetch -r 50 - Работает.
    2. git svn fetch -r 51 - Пока нет сообщения об ошибке, продолжайте.
    3. git svn fetch -r xx - появляется сообщение об ошибке, это плохая версия. Плевать.
    4. git svn fetch -r xx+1 - Работает.
  6. Повторите выборку: git svn fetch - Работает! Начинает получать больше исправлений.

Процесс должен быть очищен (вероятно, рядом с первыми шагами), но он сработал для меня, без необходимости начинать заново со свежим клоном.

Это сработало! Но в моем случае мне удалось получить "проблемную" ревизию. Я просто сбросил до x-1 ревизии (x - последняя ревизия), а затем получил x ревизию, которая сработала, а затем просто сработала "git svn fetch". Кто-нибудь может объяснить, что это исправляет? сброс git svn может просто удалить поврежденный локальный файл?

TCS 02.08.2016 17:48

У меня возникло такое же сообщение об ошибке после создания новой ветки 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 и устранило ошибку.

Другие вопросы по теме