当我做了一个git svn rebase时,它停在某一点说:
Index mismatch: SHA key of a tree != SHA key of another tree.
(我知道这些SHA键对应一棵树而不是上面两个sha键的git show提交。)
re-reading <sha index of a commit in svn/trunk>
... list of files ...
fatal: bad object <SHA1 index of the bad object>
rev-list -1 <SHA1 index of the bad object> --not <SHA1 index of the revision it was trying to re-read>: command returned error: 128
我对git的内部工作方式不是很有经验,所以是否有一系列步骤可以解决这些问题,并可能解决这些问题?
答案 0 :(得分:32)
我有两次这个错误,两次都通过删除.git文件夹中的svn文件夹来解决它。
rm -r .git/svn
然后使用:
重建svn元数据git svn fetch
您可能会看到以下信息:
Migrating from a git-svn v1 layout...
Data from a previous version of git-svn exists, but
.git/svn
(required for this version (1.7.0.4) of git-svn) does not exist.
Done migrating from a git-svn v1 layout
之后(重建可能需要一段时间,特别是在大型存储库上),您应该再次使用svn存储库的工作镜像。
答案 1 :(得分:32)
请不要删除.git / svn文件夹来解决此问题。它需要你重建一切,这很烦人,需要一段时间(我的回购的大小几个小时),这是不必要的。
我找到了正确的答案here,我将其包含在下面。
从链接:
在.git目录中运行以下命令:
$ find . -exec grep -Hin 5b32d4ac2e03a566830f30a702523c68dbdf715b {} \;
Binary file ./svn/.caches/lookup_svn_merge.db matches
Binary file ./svn/.caches/check_cherry_pick.db matches
现在从第一个命令
的输出中删除匹配的.svn / .caches$ rm ./svn/.caches/lookup_svn_merge.db
$ rm ./svn/.caches/check_cherry_pick.db
现在git svn rebase
或git svn fetch
了解您的内心。
答案 2 :(得分:13)
使用以下命令更新git客户端并重新获取上次svn提交:
git svn reset -r 12345
git svn rebase
其中12345是现有的svn修订版。
答案 3 :(得分:4)
在我的情况下,问题是由一个新的/未知的svn作者引起的,该作者不在我的authors
文件中,git-svn被配置为使用。它在输出中报告我忽略了前几个读数:
Index mismatch: <leftsha1> != <rightsha1>
rereading <anothersha1>
... list of files ...
Author: <name> not defined in /path/to/authors file
所以这给了我一个我失踪的名字,以及添加它的文件(我从我的组织用户注册表中提取了电子邮件)并顺利航行。
答案 4 :(得分:1)
问题是你必须在这种情况下系统地这样做:
缺少一些东西,一切都崩溃了。我知道恢复的唯一方法是删除.git中的所有svn并重建所有内容。这只是烦人的,需要一段时间!
答案 5 :(得分:0)
我自己就是这个错误。只需删除引用,如下所示:
rm .git/refs/remotes/git-svn
那应该清除错误。
答案 6 :(得分:0)
可能与文件系统的copy-On-Write功能有关(ext4 / btrfs / etc ......)?
答案 7 :(得分:0)
我收到了这个错误:
Dim w As Wedge
For a = 1 To 4
w = myWedge(x, a)
For c = 1 To 35
p = PropertyOf(w, c)
If p > 0 Then
' Do your stuff here
End If
Next c
Next i
在报告路径的历史记录中查看SVN repo,我找到了已添加文件的SVN修订版。但是在为该修订创建的提交中查看Git,我发现它不包含任何文件!
我认为这是由早期的完整磁盘引起的。在执行Index mismatch: <sha> != <sha>
re-reading <sha index of a commit in svn/trunk>
... list of files ...
<path> was not found in commit <sha> (r<svn rev>)
返回到已损坏的Git提交的修订版之后,git svn reset -r
再次正常工作。
答案 8 :(得分:0)
在最初的克隆过程中,我遇到了这个问题,结果发现有人创建了一个名为“ trunk”的分支,该分支与实际的trunk相冲突。忽略/ branches / trunk后,一切正常
答案 9 :(得分:0)
很可能,您的邮件中同时也可能存在Checksum不匹配的情况:
我在Git svn rebase : checksum mismatch处找到了解决方法:
git svn log <item with checksum mismatch>
git svn reset -r<top history revision in the log> -p
git svn rebase