git 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 

当我打开文件时,我看到以下内容:

例外:STATUS_ACCESS_VIOLATION在RIP = 0048360C537 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

我检查了以下链接:

错误与Git SVN克隆

通过git svn克隆单个SVN分支的问题

Windows的Python SVN绑定

颠覆python绑定文档?

不幸的是,我对底层技术不够熟悉,不知道我应该做什么。 可能会造成这种情况,我怎么能够解决?

使用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手册页中解释。

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

我在通过perl脚本进行debugging时发现了一个有趣的解决scheme:

  • 通过在perldebugging器中运行git svn ,减慢或以某种方式操纵执行。

用下面的命令启动git svn fetch (你可能需要改变path,这也可以在clone中使用)。 确保在你的git repository /目录下运行这个命令:

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

在debugging器中input以下内容并按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}) ]; 

然后inputc继续执行,然后按ENTER

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

编辑:它的工作:213000修订和1780分支克隆成git!

我有类似的例外和错误消息,对我来说

 git gc 

和/或a

 git svn gc 

使存储库恢复到可用状态。 另请参阅https://stackoverflow.com/a/1436386/411846

检查哪个svn提交导致了问题。

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

下一个例子显示了当开始处理Subversion修订版本 15时, git svn clone命令输出的结果是Git commit 373fb1...

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

使用-r (revision)选项分割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/ 

更新 – 问题仍然发生在git gc之后。 我尝试了每个版本的Git窗口(32位和64位),但仍然有这个错误。 然后我切换到在Linux上使用git,它对我来说工作正常,即使是非常大的提交。 我build议切换到Linux,否则你运气不佳,因为这里提出的问题 – https://github.com/git-for-windows/git/issues/274已经快6个月了。;

更新 – 要添加到centic的答案,对于这个特定的问题, git gc只适用于windows的32位git。

我认为这个问题存在64位git的Windows。 我与64位git有同样的问题,但切换到git 2.7.2窗口32位后,问题似乎为我解决。

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

在我的情况下,这个错误发生在大型资料库。 所以尽可能克隆子文件夹。

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

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

有了它,就不需要.git / config编辑,分离签出或perldebugging语句。

在我的情况下,我没有连接到我们的svn连接所需的VPN。 这是我的错误:

 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 

我用git-svn得到了各种各样的错误,perl脚本会死在不同的地方,抓取会中断,或者服务器会断开连接。 这是一个巨大的回购,通过svn签出了数十GB。

什么解决这个对我来说只是使用SmartGit而不是git-svn。 它需要Java 8,运行速度非常快,并且没有任何错误,几个小时内就完成了几天内完成的任务。

这是我有的问题:

  • OS:xubuntu 16.04
  • git-svn版本2.7.4(svn 1.9.3)

来自perl -d /usr/lib/git-core/git-svn fetch跟踪信息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之前),并可能导致其他问题。