При запуске 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.
Наиболее вероятной причиной этого является повреждение или отсутствие файла или фиксации (на которые ссылается дерево). Или само дерево могло быть повреждено. Проверить с:
git fsck --unreachable HEAD $(cat .git/refs/heads/*)
Это покажет кучу «болтающихся» файлов, которые вам не нужны; поврежденные файлы сообщат "Invalid SHA1" или что-то подобное. Я не знаю, как сообщить об отсутствующем файле. Удалите все поврежденные элементы и rsync
из исходного репозитория, чтобы заменить их.
2-3 месяца назад в группе новостей (или, возможно, в списке рассылки) был отчет о том, что у кого-то была аналогичная проблема, которая исчезла, когда они перепаковали свое репо. Мне не удалось найти отчет, что, вероятно, означает, что это были не совсем те же сообщения об ошибках.
Пробовал перепаковывать. Не повезло. А пока я перехожу к новому клону git svn. Спасибо за предложения.
У меня такая же проблема. Это связано с конкретной ревизией 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
- Работает! Начинает получать больше исправлений.Процесс должен быть очищен (вероятно, рядом с первыми шагами), но он сработал для меня, без необходимости начинать заново со свежим клоном.
Это сработало! Но в моем случае мне удалось получить "проблемную" ревизию. Я просто сбросил до x-1 ревизии (x - последняя ревизия), а затем получил x ревизию, которая сработала, а затем просто сработала "git svn fetch". Кто-нибудь может объяснить, что это исправляет? сброс git svn может просто удалить поврежденный локальный файл?
У меня возникло такое же сообщение об ошибке после создания новой ветки 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 и устранило ошибку.
Спасибо за информацию. К сожалению, поврежденных файлов не обнаружено, только несколько недостижимых деревьев / коммитов / капель. Используя git в качестве внешнего интерфейса для репозитория svn, у меня нет вышестоящего git для rsync для восстановления. Я попробовал rsync из свежего клона git svn, но потерял все свои локальные ветки.