2008-12-03 77 views
15

当运行Get SVN获取到来自上游SVN仓库拉最新的分支,我得到这个错误:致命错误混帐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

这最可能的原因是文件或提交(树引用)损坏或丢失。或者树本身可能被损坏。请与:

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

这将显示一堆“悬空”的文件,你不关心;损坏的文件将报告“无效的SHA1”或一些这样的事情。我不知道丢失的文件将如何报告。清除上游回购中的任何损坏物品和rsync以替换它们。

+0

感谢您的信息。不幸的是,没有损坏的文件出现,只有少数不可及的树/提交/ blob。 使用git作为svn repo的前端我没有上游git用于恢复的rsync。我尝试从新鲜的git svn克隆rsync,但失去了我所有的本地分支机构。 – notascleveras 2008-12-08 17:50:01

+0

2到3个月前,在新闻组(或者邮件列表)中有一个报告,他们遇到了类似问题,当他们重新打包回购时,这些问题就消失了。我一直无法找到报告,这可能意味着它不是完​​全相同的错误消息。 – Paul 2008-12-09 07:22:02

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 - Works。
    2. git svn fetch -r 51 - 虽然没有错误信息,继续。
    3. git svn fetch -r xx - 出现错误信息,这是错误的修订。不在乎。
    4. git svn fetch -r xx+1 - Works。
  6. 重试抓取:git svn fetch - Works!开始获取更多修订。

这个过程应该被清理掉(可能接近第一步),但它对我很有用,而不需要重新开始一个新的克隆。

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所有提交和解决错误。