English 中文(简体)
Git svn 抓取时解包树对象发生致命错误。
原标题:
  • 时间:2008-12-03 18:10:58
  •  标签:

当运行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克隆上游存储库没问题,但我希望保留现有的设置。我已经查阅了文档并在谷歌上搜索了问题,但没有任何结果。

问题回答

我有同样的问题。这是由于某个特定的 SVN 版本导致 git-svn 无法读取或处理。以下是我尝试的操作:

  1. Rewind to a revision known to work: git svn reset -r 42
  2. Retry the fetch: git svn fetch — Fetches each revision starting from 42 until the guilty one (say 50), then shows the same error message.
  3. Fetch the parent: git svn fetch --parent — Don t ask me why. That fetches more revisions. No idea whether it s relevant though.
  4. Retry the fetch: git svn fetch — Still doesn t work.
  5. Fetch each of the next revisions:
    1. git svn fetch -r 50 — Works.
    2. git svn fetch -r 51 — While no error message, go on.
    3. git svn fetch -r xx — The error message shows up, it s the bad revision. Don t care.
    4. git svn fetch -r xx+1 — Works.
  6. Retry the fetch: git svn fetch — Works! Starts to fetch more revisions.

这个过程应该被清理干净(可能在最初的步骤附近),但在没有必要用一个全新的克隆重新开始的情况下,它对我来说是有效的。

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

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

这将显示一些“悬挂”的文件,你不用在意;损坏的文件会报告“无效的SHA1”或类似的东西。我不知道缺失的文件会如何报告。删除任何损坏的项目,然后使用rsync从上游仓库替换它们。

我在创建新的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的所有提交并解决了错误。





相关问题
热门标签