git svn clone malformed index info error

时间:2015-09-08 19:20:59

标签: git perl svn

当我运行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?

不幸的是,我对底层技术不够熟悉,无法弄清楚我应该做些什么。可能会导致这种情况,我怎么能够解决?

16 个答案:

答案 0 :(得分:19)

使用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 man page解释。

答案 1 :(得分:13)

更新:用2.11.0和git-svn 1:2.11.0-2ubuntu0.2更新到Ubuntu 17.04后,克隆工作完美无缺。

在通过perl脚本进行调试时,我发现了一个有趣的解决方案:

  • 通过在perl调试器中运行git svn来减慢或以某种方式操纵执行。

使用以下命令启动git svn fetch(您可能必须更改路径。这也适用于克隆)。确保在git repository /目录中运行命令:

perl -d /usr/lib/git-core/git-svn fetch

在调试器中输入以下内容,然后按 ENTER

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

有人可以解释为什么这有帮助吗?

编辑:它有效:213000个修订版和1780个分支克隆到git中!

答案 2 :(得分:6)

I had similar exceptions and error messages, for me a

git gc

and/or a

git svn gc

brought the repository back into a usable state. See also https://stackoverflow.com/a/1436386/411846

答案 3 :(得分:4)

检查导致问题的svn提交。

提交由git svn clone命令输出,前面带有 r 。输出的最后一次提交是有问题的。

下一个示例显示了开始处理 Subversion修订 git svn clone15命令输出的内容 Git提交 373fb1...

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

使用git svn clone(修订版)选项

拆分-r命令

使用此方法:

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/

答案 4 :(得分:3)

已更新 - git gc对我来说问题仍然存在。我尝试了每个版本的git windows(32位和64位),但我仍然遇到了这个错误。然后我切换到在linux上使用git,它对我来说很好,即使是非常大的提交。我建议切换到linux,否则你运气不好,因为这里提出的问题 - https://github.com/git-for-windows/git/issues/274差不多6个月了。

已更新 - 要添加到centic的答案,git gc仅适用于Windows的32位git,针对此特定问题。

我认为64位git for windows存在问题。我在使用64位git时遇到了同样的问题,但在切换到32位的git 2.7.2窗口后,问题似乎已经解决了。

答案 5 :(得分:2)

对我来说,唯一有效的解决方案是使用旧版本的Git。 我使用了Git 1.8.3的便携包,可以在这里下载:

https://github.com/msysgit/msysgit/releases/tag/Git-1.8.3-preview20130601

使用它不需要.git / config编辑,拆分检出或perl调试语句。

答案 6 :(得分:2)

我在git-svn中遇到了各种各样的错误,其中perl脚本会在各个地方死掉,抓取会中断,或者服务器会切断连接。这是一个巨大的回购,当通过svn签出时需要几十GB。

为我解决这个问题只是使用SmartGit而不是git-svn。它需要Java 8,运行速度极快,并且没有任何错误报告,几个小时内无缝完成了几天的任务。

答案 7 :(得分:2)

这是我遇到的问题:

  • OS:xubuntu 16.04
  • git-svn version 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之前),并可能导致其他问题。

答案 8 :(得分:1)

我能够使用Cygwin正确检查svn repo。

答案 9 :(得分: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

答案 10 :(得分:0)

在我的情况下,这个错误发生在大型存储库中。因此,如果可能的话,尝试克隆子文件夹。

答案 11 :(得分:0)

我每次都可以重现这个问题,而git svn在

中完美无缺
  

版本1.9.5

您可以从

的Git-1.9.5-preview20141217.exe安装它
  

https://github.com/msysgit/msysgit/releases/tag/Git-1.9.5-preview20141217

我想知道是否有人可以检查旧版本1.9.5和当前版本之间的差异(从msysgit迁移到此处之后)

将旧版本用于git是很痛苦的,因为git svn在新版本中无法正常工作。

答案 12 :(得分:0)

在我的情况下,这个错误发生在Ubuntu 16.04,版本是 git-svn版本2.17.0(svn 1.9.3)在我运行git svn --version命令后,我切换到我运行git svn --version命令后,我的MacOS版本信息是 git-svn版本2.17.0(svn 1.7.20),然后在成功克隆后再切换回ubuntu&amp;在MacOS中获取和其他操作。

答案 13 :(得分:0)

在C:\ Program Files \ Git \ usr \ bin中执行rebase.exe为我解决了该问题。我在这里https://github.com/msysgit/msysgit/issues/25

找到了解决方案

答案 14 :(得分:0)

如果必须通过文件中的http / https代理需要配置代理来访问SVN存储库

  

c:\ Users \ ... \。subversion \ servers。

在[global]部分中设置http-proxy-host和http-proxy-port。

来自

的解决方案
  

https://www.bountysource.com/issues/25711817-perl-crash-during-svn-clone

答案 15 :(得分:0)

对我来说,代理设置修复了它。也可以看看: https://github.com/git-for-windows/git/issues/274#issuecomment-473826553

C:\Users\USERNAME\.subversion\servers 组内

[global]
http-proxy-host = [insert IP here]
http-proxy-port = [insert port here]