15

当运行 get svn fetch 从上游 svn 存储库中提取最新的新分支时,我收到了这个错误:

$ git svn fetch
fatal: failed to unpack tree object 5ecb324e8b8fcb918acb253f33edc6ce49e49e0d
read-tree 5ecb324e8b8fcb918acb253f33edc6ce49e49e0d: command returned error: 128

现在,在该本地 repo 上每次尝试 git svn 都会导致相同的错误。最初我正在运行 git 版本 1.5.6.4_0 并且在错误之后我尝试更新到 1.6.0.2_2 并且问题仍然存在。

有什么办法可以清理这种腐败吗?上游存储库的新 git svn 克隆很好,但我想保留我现有的设置。我浏览了文档并在谷歌上搜索了这个问题,但没有运气。

4

3 回答 3

5

我有同样的问题。这是由于 git-svn 无法以某种方式读取或处理的特定 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- 工作!开始获取更多修订。

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

于 2010-12-21T22:32:55.447 回答
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 获取所有提交并解决了错误。

于 2012-06-05T08:50:45.717 回答
4

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

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

这将显示一堆你不关心的“悬空”文件;损坏的文件会报告“无效的 SHA1”或类似的东西。我不知道丢失的文件会如何报告。删除任何损坏的项目并rsync从您的上游存储库中替换它们。

于 2008-12-05T19:18:22.333 回答