Git svn fetch时解包树对象时发生致命错误

15

运行"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 搜索了相关问题,但没有找到解决方法。

3个回答

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 — 工作正常!开始获取更多版本。
这个过程可能需要进行清理(可能在最初的步骤附近),但对我有效,而且无需重新克隆。

成功了!但在我的情况下,我能够获取“有问题”的版本。我只是重置到x-1版本(x是最新版本),然后获取x版本,这样就可以工作了,然后“git svn fetch”就可以正常工作了。有人能解释一下它修复了什么吗?git svn reset只是删除了一个损坏的本地文件吗? - TCS

4

最可能的原因是树引用的文件或提交已损坏或丢失。或者树本身可能已损坏。请使用以下命令进行检查:

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

这将显示许多“悬空”的文件,这些文件您不需要关心;损坏的文件将报告“无效的SHA1”或类似的错误。我不知道缺少文件会如何报告。请删除任何损坏的项目,并从上游仓库使用rsync替换它们。


谢谢提供的信息。不幸的是,没有出现损坏的文件,只有一些无法访问的树/提交/扩展块。使用git作为svn存储库的前端,我没有上游git与之同步以进行恢复。我尝试从新的git svn克隆中进行rsync,但丢失了所有本地分支。 - notascleveras
大约2到3个月前,新闻组(或者可能是邮件列表)中有一份报告,说有人遇到了类似的问题,但当他们重新打包仓库时问题消失了。我找不到这份报告,这可能意味着它并不完全相同。 - Paul
我刚刚尝试了重新打包,但没有成功。现在我准备重新克隆 git svn。感谢您的建议。 - notascleveras

4

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接