簡體   English   中英

Windows下的git svn clone大型repo:內存不足 - 不是大文件問題

[英]git svn clone large repo under Windows: out of memory - not a large file issue

我試圖用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(xit-1.9.4-preview20140929)的最新維護git版本,運行在Windows 7 x64上,內存為16 GB。

我已經對這種失敗進行了一些搜索。 大多數帖子都提到了幾年前大文件的問題,這些文件很可能已經修復(沒有檢查過)。 無論如何,這個問題是指大分配,由“大”請求期間的錯誤消息指示。 但是,添加小尺寸的常規實現文件時,該過程失敗。 因此,我不認為這是一個大文件問題。

我試圖修改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。 我編寫了這個測試代碼,它是對此stackoverflow問題發布的代碼的修改:

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中,我收到之前描述的錯誤。

在“大”請求33558528字節期間內存不足,在mem.pl第9行總sbrk()為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 

使用Cygwin和Git 2.1.1我可以在我的倉庫上運行git svn而不會出現任何內存問題。 我的測試程序運行良好。 我沒有嘗試過Cygwin上的1.x-Git版本,但我猜他們的工作是因為問題是msysperl的內存限制,它被Cygwin取代。

我不會將此標記為答案,因為它無法解決我原來的問題。 這是我目前使用Git進行測試的解決方法。

我想在適當的Perl工作的情況下使用Git for Windows發行版。 這里升級Perl存在問題。 然而,這似乎不是一件容易的事。 同樣適用於Windows上git svn使用的SVN版本: 如何升級SVN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM