如何解决git-svn索引不匹配问题?

时间:2010-11-01 23:27:14

标签: git svn indexing git-svn rebase

当我做了一个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的内部工作方式不是很有经验,所以是否有一系列步骤可以解决这些问题,并可能解决这些问题?

10 个答案:

答案 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 rebasegit 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
  • 使用git-svn
  • 在svn上创建分支
  • 使用svn工具将分支合并到主干
  • 删除svn分支
  • 做一个git-svn rebase

缺少一些东西,一切都崩溃了。我知道恢复的唯一方法是删除.git中的所有svn并重建所有内容。这只是烦人的,需要一段时间!

答案 5 :(得分:0)

我自己就是这个错误。只需删除引用,如下所示:

rm .git/refs/remotes/git-svn

那应该清除错误。

答案 6 :(得分:0)

可能与文件系统的copy-On-Write功能有关(ext4 / btrfs / etc ......)?

请参阅:https://stackoverflow.com/a/42299634/7491491

答案 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