Windows下的git svn clone大型repo:内存不足 - 不是大文件问题

时间:2014-11-28 11:03:34

标签: windows git perl svn memory

我正在尝试使用git svn克隆一个大的svn存储库。回购已经有100000次修改。大小约为9GB(原始文件夹)。仓库中的最大文件是300 MB。

分行结构在回购中完全混乱。很多错误和缺少合并信息,没有标准布局。我试图在有和没有分支的情况下获取最新版本。没有分支的命令如下所示:

  

git svn clone url_to_trunk_in_repo -r100000:HEAD --username = svn_user

HEAD目前是101037.该过程运行了一段时间(小时),但是失败的情况如下:

  

请求29040字节时内存不足,总sbrk()为254959616字节!

我在Windows 7 x64上使用16 GB RAM运行了最新的Windows维护版(Git-1.9.4-preview20140929)。

我已经对这种失败进行了一些搜索。大多数帖子都提到了几年前大文件的问题,这些文件很可能已经修复过(没有检查过)。无论如何,这个问题指的是大的分配,由大型"中的错误消息表示。请求。但是,添加小尺寸的常规实现文件时,该过程失败。因此,我不认为这是一个大文件问题。

我尝试修改etc / gitconfig中的包设置,这是一个常见的建议。但是,这没有任何帮助。我没想到它会有所帮助,因为内存错误是从svn服务器下载期间而不是在处理包AFAIK的git gc期间。

进一步挖掘引导我到256MB的perl内存限制。这很可能就是这种情况,因为我总是得到几乎256MB sbrk()的错误。

对perl内存限制的进一步调查只会导致操作系统内存限制。这是win32上的2GB(带有特殊开关的3GB)和64位窗口的RAM限制。我也找到了一些提高Cygwin内存限制的建议,但这并不适用于此。

256MB的限制在我眼中是荒谬的,我拼命寻找一种方法来解决这个问题。


编辑: 这可能是一个Perl 5.8.8问题(git使用该版本)。我还安装了草莓perl 5.16.3 x64。 我已经编写了此测试代码,这是对this stackoverflow question发布的代码的修改:

use strict;
use warnings;

my @s;
my $count = 200;
my $alloc = 30000000;

for (my $i = 0; $i < $count; $i++)
{   print "Trying allocation...";
    $s[$i] = "a" x $alloc;   # ok
    print "OK\n\n";
}

使用strawberray perl,这非常有效。在git bash中,我收到了之前描述的错误。

  

&#34;大&#34;内存不足请求33558528字节,总sbrk()   在mem.pl第9行是2351800 32字节。


编辑2: 我尝试过草莓perl 5.8.8-1。它正确分配,但程序在执行后崩溃。因此,这不是perl 5.8.8中的一般错误,而是与git一起发布的版本(msys perl 5.8.8) 草莓perl和msys perl的配置在许多条目中有所不同。对我来说最明显的区别是usemymalloc = n(草莓)和usemymalloc = y(msys perl)。

我还检查了git bash中的ulimit,它没有显示任何异常:

$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 8
stack size              (kbytes, -s) 2046
cpu time               (seconds, -t) unlimited
max user processes              (-u) 63
virtual memory          (kbytes, -v) 2097152

1 个答案:

答案 0 :(得分:3)

使用Cygwin和Git 2.1.1,我可以在我的仓库上运行git svn而不会出现任何内存问题。我的测试程序运行良好。我没有在Cygwin上尝试过1.x版本的Git,但我猜他们会工作,因为问题是msysperl的内存限制,被Cygwin取代。

我没有将此标记为答案,因为它没有解决我原来的问题。这是我目前使用Git进行测试的解决方法。

我希望通过正常工作的Perl使用Git for Windows发行版。升级Perl here存在问题。然而,这似乎不是一件容易的事。同样适用于Windows上git svn使用的SVN版本:Howto upgrade SVN