当运行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克隆很好,但我想保留现有的设置。我查看了文档,并在没有运气的情况下搜索问题。
答案 0 :(得分:5)
我遇到了同样的问题。这是由于特定的SVN修订版,git-svn无法以某种方式读取或处理。以下是我按顺序尝试的内容:
git svn reset -r 42
git svn fetch
- 获取从42开始的每个修订版,直到有罪的版本(比如50),然后显示相同的错误消息。git svn fetch --parent
- 不要问我为什么。这取得了更多的修改。不知道它是否相关。git svn fetch
- 仍无效。git svn fetch -r 50
- 工作。git svn fetch -r 51
- 虽然没有错误消息,但请继续。git svn fetch -r xx
- 显示错误消息,这是错误的修订。不在乎。git svn fetch -r xx+1
- 工作。git svn fetch
- 正常工作!开始获取更多修订。这个过程应该被清理(可能接近第一步),但它对我有用,而不必重新开始使用新的克隆。
答案 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获取所有提交并解决了错误。