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

yas*_*ser 27 svn git 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
Run Code Online (Sandbox Code Playgroud)

我对git的内部工作方式不是很有经验,所以是否需要按照一系列步骤来剖析像这样的问题并可能解决它们?

Mat*_*ett 33

我有两次这个错误,两次都通过删除.git文件夹中的svn文件夹来解决它.

rm -r .git/svn
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令重建svn元数据:

git svn fetch
Run Code Online (Sandbox Code Playgroud)

您可能会看到以下消息:

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
Run Code Online (Sandbox Code Playgroud)

之后(重建可能需要一段时间,特别是在大型存储库上),您应该再次使用svn存储库的工作镜像.

  • 对于我的大型存储库,我只提取了一些最新的提交:"git svn fetch -r 12345:HEAD".我仍然可以看到以前的提交. (2认同)

Mat*_*lse 33

请不要删除.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
Run Code Online (Sandbox Code Playgroud)

现在从第一个命令的输出中删除匹配的.svn/.caches

$ rm ./svn/.caches/lookup_svn_merge.db
$ rm ./svn/.caches/check_cherry_pick.db
Run Code Online (Sandbox Code Playgroud)

现在git svn rebase还是git svn fetch你心中的内容.

  • 是的我后来确实找到了这种技术.在我的下一次尝试中,我刚刚清除了`caches`,它比删除`.git/svn`要快得多.忘了在这里更新.谢谢你发布你的答案. (2认同)

yar*_*lig 13

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

git svn reset -r 12345
git svn rebase
Run Code Online (Sandbox Code Playgroud)

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

  • 这在不喜欢`.caches`目录的情况下有效。 (2认同)
  • 这也是对我有用的唯一方法。 (2认同)