30

当我做了一个 git svn rebase 时,它​​停在了一个地方说:

Index mismatch: SHA key of a tree != SHA key of another tree.(我知道这些 SHA 键对应于一棵树,而不是来自 git show 的上述两个 sha 键的提交。)

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 的内部工作方面不是很有经验,那么是否有一系列步骤可以用来剖析这些问题并可能解决它们?

4

10 回答 10

39

请不要删除 .git/svn 文件夹来解决此问题。它需要您重建所有内容,这很烦人,需要一段时间(对于我的仓库的大小来说需要几个小时),而且这不是必需的。

我在这里找到了正确的答案,并将其包含在下面。

从链接:

在 .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随心所欲。

于 2013-01-10T17:32:44.120 回答
38

我两次遇到此错误,两次都通过删除 .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 存储库的工作镜像。

于 2011-01-10T12:48:35.450 回答
13

使用以下命令更新 git 客户端并重新获取最后一次 svn 提交:

git svn reset -r 12345
git svn rebase

其中 12345 是现有的 svn 修订版。

于 2013-12-09T17:26:08.620 回答
4

就我而言,这个问题是由一个新的/未知的 svn 作者引起的,他不在我authors的 git-svn 配置使用的文件中。它在输出中报告说我忽略了前几​​个读取:

Index mismatch: <leftsha1> != <rightsha1>
rereading <anothersha1>
        ... list of files ...
Author: <name> not defined in /path/to/authors file

因此,这给了我缺少的名称,以及要添加的文件(我从组织用户注册表中提取了电子邮件)并且一帆风顺。

于 2014-12-17T18:36:02.173 回答
1

问题是在这种情况下您必须系统地执行此操作:

  • 使用 git + svn
  • 使用 git-svn 在 svn 上创建分支
  • 使用 svn 工具将分支合并到主干
  • 删除 svn 分支
  • 做一个 git-svn 变基

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

于 2011-01-13T10:16:26.607 回答
0

我自己也有这个错误。只需删除 ref,如下所示:

rm .git/refs/remotes/git-svn

那应该可以清除错误。

于 2010-11-05T20:20:34.487 回答
0

我收到了这个错误:

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>)

在 SVN 存储库中查看报告路径的历史记录,我找到了添加文件的 SVN 修订版。但是在 Git 中查看为该修订创建的提交时,我发现它不包含任何文件!

我认为这是由先前的完整磁盘引起的。在git svn reset -r返回对损坏的 Git 提交的修订后,git svn fetch再次正常工作。

于 2017-05-17T08:54:04.730 回答
0

很可能,您的消息中也可能同时存在校验和不匹配:

我在这里找到了解决方案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
于 2019-08-15T08:25:34.070 回答
0

也许与文件系统的写时复制功能有关(ext4/btrfs/etc...)?

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

于 2017-02-17T14:46:33.167 回答
0

我在最初的克隆过程中遇到了这个问题,结果发现有人创建了一个名为 trunk 的分支,它与真正的主干冲突。忽略 /branches/trunk 后一切正常

于 2018-07-13T02:44:21.950 回答