我正在尝试使用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
答案 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