在git svn获取期间解压缩树对象的致命错误

时间:2008-12-03 18:10:58

标签: git 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克隆很好,但我想保留现有的设置。我查看了文档,并在没有运气的情况下搜索问题。

3 个答案:

答案 0 :(得分:5)

我遇到了同样的问题。这是由于特定的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 - 正常工作!开始获取更多修订。
  7. 这个过程应该被清理(可能接近第一步),但它对我有用,而不必重新开始使用新的克隆。

答案 1 :(得分:3)

最可能的原因是文件或提交(树引用)已损坏或丢失。或者树本身可能已损坏。检查:

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

这将显示一堆“悬空”文件,你不关心;损坏的文件将报告“无效的SHA1”或某些此类事情。我不知道丢失的文件会如何报告。从上游仓库中删除任何损坏的项目rsync以替换它们。

答案 2 :(得分: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获取所有提交并解决了错误。