git svn clone出现格式错误的索引信息错误

43
当我运行 git svn clone 命令时,出现以下错误:
  0 [main] perl 24432 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
  fatal: malformed index info 100644 362f1c18ceed5d593eb021432545685283a93 
当我打开文件时,我看到以下内容:

异常:rip=0048360C537 处的 STATUS_ACCESS_VIOLATION rax=00000006039F81E0 rbx=000000005219E248 rcx=000000060003A3C0 rdx=0000000000000000 rsi=000000000000FDB4 rdi=0000000000000004 r8 =0000000000000000 r9 =0000000000000000 r10=0000000000230000 r11=000000048D785FBA r12=0000000000000003 r13=000006FFFF7FEDB8 r14=00000006014D4030 r15=000006FFFF7FEDD0 rbp=000000000007EDA8 rsp=000000000022BE80 program=C:\Program Files\Git\usr\bin\perl.exe, pid 24432, thread main cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B

我查看了以下链接:

Error with Git SVN clone

Problem cloning a single SVN Branch via git svn

Python SVN bindings for Windows

subversion python bindings documentation?

不幸的是,我对底层技术不太熟悉,无法确定我应该做什么。这可能是什么原因,我该如何解决?

2
我投票关闭此问题,因为SO不是讨论软件特定已知错误的地方。他们应该将其报告给bugzilla或邮件列表。 - Dennis C
1
对我来说,将一个庞大的项目从SVN迁移到Git(在Windows上)期间解决此类问题以及其他问题最有效的方法是在Linux上执行实际的git svn clone... 操作,而不是在Windows上进行。我快速设置了一个Ubuntu 20 VMware虚拟机,并且整个迁移过程成功完成,没有任何错误(而我以前在Windows上遇到了很多错误)。 - Uwe Keim
16个回答

21

在使用svn2git工具将大型svn存储库迁移到git时,我遇到了这个错误。我在我的.git/config文件中添加了以下行,然后它开始工作:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
    packedGitLimit = 256m
    packedGitWindowSize = 256m
    longpaths = true
[http]
    postBuffer = 524288000
[pack]
  deltaCacheSize = 256m
  packSizeLimit = 256m
  windowMemory = 1024m

这些设置在git-config手册页面上有解释。


它也为我解决了这个问题。我需要更改的唯一两个设置是 core.packedGitLimitcore.packedGitWindowSize - wimh
1
longpaths = true 对我很有帮助!谢谢! - derFunk
对我来说,postBuffer = 134217728 很有帮助(将其提高到这个值已经很有帮助了,如果像上面的例子一样再增加一些,也会更好)。 - JonnyJD
我假设 symlinks=falsefilemode=falseignorecase=true 只适用于 Windows? - Tobias Kienzler

16
更新:在更新到Ubuntu 17.04和git-svn 1:2.11.0-2ubuntu0.2后,克隆操作完美执行。
我在调试perl脚本时,为该问题找到了一个有趣的解决方案:
通过在perl调试器中运行git svn来减慢或以某种方式操作执行。使用以下命令启动git svn fetch(您可能需要更改路径。这也适用于clone)。确保在git存储库/目录内运行该命令:
perl -d /usr/lib/git-core/git-svn fetch

输入以下内容到调试器中并按下回车键

b /usr/share/perl5/Git/SVN/Fetcher.pm:368 $base==undef or $dup==undef

这基本上在我收到信号11的位置添加了一个条件断点。这是代码行:

[ SVN::TxDelta::apply($base, $dup, undef, $fb->{path}, $fb->{pool}) ];

然后输入c以继续执行并按下ENTER

有人能解释一下为什么这样有帮助吗?

编辑:它起作用了:213,000个修订版本和1,780个分支克隆到Git中!


谢谢!这个解决方法对我有用!其他的解决方法像升级Git或SVN、编辑.git/config文件、使用64位(操作系统或/和Git)或Linux都没起作用。不过,我遇到了另一个问题(打开的最大文件数),但是这个解决方法帮了我:https://dev59.com/U2Ei5IYBdhLWcg3wMp9y#24796466 - Krystian Bigaj
这个解决方法很有帮助,但仍需要找到最终解决方案。 - lcltj
哦,是的,这对我也起作用了。多么奇怪啊。谢谢! - caleb c.

6

由于“git svn clone”正在创建一个存储库,您在哪里运行了这些命令? - simpleuser
我刚刚看到了相同的错误信息,可能是在之前执行“git svn clone”时出现的,老实说,我现在已经记不清楚具体细节了。 - centic

4

查找导致问题的svn提交记录。

git svn clone命令输出提交记录,每个提交记录前面有一个r。最后一个输出的提交记录就是有问题的记录。

下面的示例展示了当将Subversion版本 15处理为Git提交记录 373fb1...时,git svn clone命令的输出内容:

r15 = 373fb1de430a6b1e89585425f276aae0058c3deb (refs/remotes/svn/trunk)

使用-r(修订版本)选项拆分git svn clone命令

请使用以下方法:

git svn clone -r 0:<problematic_revision - 1> <repo URL>
git svn clone -r <problematic_revision - 1>:problematic_revision <repo URL>
git svn clone -r <problematic_revision>:HEAD <repo URL>

假设版本15存在问题,而仓库在/tmp/svn/repo/中,则解决方法如下:
git svn clone -r  0:14   file:///tmp/svn/repo/
git svn clone -r 14:15   file:///tmp/svn/repo/
git svn clone -r 15:HEAD file:///tmp/svn/repo/

在我的情况下,有问题的版本是编号1。但是直接使用您的公式并没有起作用。对我有效的是splitint 0:2然后2:HEAD。无论如何,使用您的方法解决了问题。 - jgomo3

3
更新 - 对于我来说,即使进行了git gc,问题仍然存在。我尝试了所有版本的git windows(32位和64位),但仍然出现了这个错误。然后我转而使用linux上的git,对于非常大的提交,它对我很有效。我建议切换到linux,否则你就没有运气了,因为此处提出的问题 - https://github.com/git-for-windows/git/issues/274已经存在将近6个月。

更新 - 补充centic的回答,git gc只对32位的git for windows可以解决这个特定的问题。

我认为64位git for windows存在这个问题。我也遇到了64位git的同样问题,但是在切换到git 2.7.2 windows 32位之后,这个问题似乎已经解决了。


我从64位切换到32位。然后我解决了它!谢谢。 - Devgrapher

2

我曾遇到git-svn的各种错误,perl脚本在不同位置崩溃、获取失败或服务器断开连接。这是一个庞大的repo,当通过svn检出时需要数十GB。

对我有用的解决方法是使用SmartGit代替git-svn。它需要Java 8,运行非常快,没有任何错误报告,并且能够无缝地完成任务,几个小时内完成了svn需要数天才能完成的工作。


1
听起来是个不错的想法...但是呀,它只能免费用于非商业用途;-( - GhostCat

2

2

我面临的问题是:

  • 操作系统:xubuntu 16.04
  • git-svn版本2.7.4(svn 1.9.3)

perl -d /usr/lib/git-core/git-svn fetch的跟踪信息:

Signal SEGV at /usr/local/share/perl/5.22.1/Git/SVN/Fetcher.pm line 368
    Git::SVN::Fetcher::apply_textdelta(Git::SVN::Fetcher=HASH(0x20ee160), HASH(0x2488a40), undef, _p_apr_pool_t=SCALAR(0x2488bf0)) called at /usr/lib/x86_64-linux-gnu/perl5/5.22/SVN/Ra.pm line 623
    SVN::Ra::Reporter::AUTOLOAD(SVN::Ra::Reporter=ARRAY(0x8d0fa0), SVN::Pool=REF(0x20ee910)) called at /usr/local/share/perl/5.22.1/Git/SVN/Ra.pm line 308
    Git::SVN::Ra::gs_do_update(Git::SVN::Ra=HASH(0x20df170), 42560, 42560, Git::SVN=HASH(0x20dea08), Git::SVN::Fetcher=HASH(0x20ee160)) called at /usr/local/share/perl/5.22.1/Git/SVN.pm line 1205
    Git::SVN::do_fetch(Git::SVN=HASH(0x20dea08), HASH(0x20ee1d8), 42560) called at /usr/local/share/perl/5.22.1/Git/SVN/Ra.pm line 471
    Git::SVN::Ra::gs_fetch_loop_common(Git::SVN::Ra=HASH(0x20df170), 42500, 95400, ARRAY(0x1637c08), ARRAY(0x1637c20)) called at /usr/local/share/perl/5.22.1/Git/SVN.pm line 179
    Git::SVN::fetch_all("svn", HASH(0x20dee28)) called at /usr/lib/git-core/git-svn line 570
    main::cmd_fetch() called at /usr/lib/git-core/git-svn line 386
    eval {...} called at /usr/lib/git-core/git-svn line 384
Aborted (core dumped)

我最终通过以下步骤解决了这个问题(适用于Ubuntu Linux 16.04用户):

sudo apt build-dep subversion
sudo apt install libneon27-dev
sudo cpan SVN::Core

然后我就可以使用 git svn fetch/clone 而不会崩溃。

这个问题的根本原因是 Perl SVN::Core 库脚本与 Perl 安装中安装的二进制文件不匹配(除系统安装的子版本库之外,Perl 中还安装了单独的 Subversion 二进制文件)。

请注意,这将会将您的 git-svn 的 svn 版本降级至 1.8.11(之前为 1.9.3),并可能导致其他问题。


1
我能够使用Cygwin正确地检查svn仓库。

1
在我的情况下,我没有连接到我们的 VPN,这是我们的 SVN 连接所必需的。这是我的错误:
Exception: STATUS_ACCESS_VIOLATION at rip=00000000000
rax=0000000000000000 rbx=00000006010BBDA8 rcx=00000006010BBDA8
rdx=00000006010C40E8 rsi=0000000000000011 rdi=0000000000000000
r8 =0000000000000000 r9 =00000006010EBCA8 r10=0000000100000000
r11=000000049F2423C9 r12=00000000FFFFC190 r13=00000000FFFFC198
r14=00000006010B2DF8 r15=00000006010B2D68
rbp=00000000FFFFC1A8 rsp=00000000FFFFC138
program=C:\Program Files\Git\usr\bin\perl.exe, pid 7884, thread main
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame        Function    Args
End of stack trace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接