git svn clone grand repo sous Windows: manque de mémoire – pas un gros problème de fichier

J’essaie de cloner un grand repository svn avec git svn. Le repo a 100000 révisions. La taille est d’environ 9 Go (dossier vierge). Le plus gros fichier de repo est 300 Mo.

La structure de la twig est un désordre total dans le repo. Beaucoup d’informations de fusion erronées et manquantes, pas de disposition standard. J’ai essayé de récupérer les dernières révisions avec et sans twigs. La commande sans twigs ressemble à ceci:

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

HEAD est actuellement à 101037. Le processus s’exécute pendant un certain temps (heures) et échoue avec quelque chose comme ceci:

Mémoire insuffisante pendant la requête pour 29040 octets, le nombre total de sbrk () est de 254959616 octets!

J’ai la dernière révision git maintenue pour Windows (Git-1.9.4-preview20140929) sous Windows 7 x64 avec 16 Go de RAM.

J’ai fait quelques recherches sur ce type d’échec. La plupart des écritures se réfèrent à un problème avec des fichiers volumineux il y a quelques années et qui ont probablement déjà été résolus (cela n’a pas été vérifié). Quoi qu’il en soit, ce problème fait référence à une allocation importante, indiquée par le message d’erreur lors d’une requête “volumineuse” . Cependant, le processus échoue lors de l’ajout de fichiers d’implémentation normaux de petite taille. Par conséquent, je ne pense pas que ce soit un gros problème de fichier.

J’ai essayé de modifier les parameters du pack dans etc / gitconfig, ce qui est un conseil commun. Cependant, cela n’a pas aidé. Je ne m’attendais pas à ce que cela aide car l’erreur de mémoire est pendant le téléchargement du serveur svn pas pendant git gc qui traite les paquets, AFAIK.

Un creusage plus poussé m’a conduit à une limitation de 256 Mo de mémoire perl. C’est probablement le cas parce que je reçois toujours l’erreur avec presque 256 Mo de sbrk ().

Des recherches plus approfondies sur les limitations de la mémoire Perl font apparaître uniquement des limitations de la mémoire du système d’exploitation. C’est-à-dire 2 Go sur win32 (3 Go avec commutateur spécial) et limite de RAM pour les fenêtres 64 bits. J’ai également trouvé des conseils pour augmenter les limitations de mémoire de Cygwin mais cela ne s’applique pas ici.

La limite de 256 Mo est ridicule à mes yeux et je cherche désespérément un moyen de contourner ce problème.


EDIT: C’est probablement un problème avec Perl 5.8.8 (git utilise cette version). J’ai également installé le perl 5.16.3 x64 de fraise. J’ai écrit ce code de test, qui est une modification du code affiché à cette question de stackoverflow :

use ssortingct; 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"; } 

Avec strawberray perl, cela fonctionne parfaitement. Dans git bash, je reçois l’erreur décrite précédemment.

Mémoire insuffisante lors de la requête “large” pour 33558528 octets, sbrk () total est 2351800 32 octets sur la ligne mem.pl 9.


EDIT 2: J’ai essayé le perl 5.8.8-1. Il alloue correctement, cependant, le programme se bloque après l’exécution. Par conséquent, ce n’est pas un bogue dans perl 5.8.8 en général, mais dans la version livrée avec git (msys perl 5.8.8) La configuration de strawberry perl et de msys perl diffère dans de nombreuses entrées. La différence la plus notable pour moi est usemymalloc = n (fraise) et usemymalloc = y (msys perl).

J’ai aussi vérifié pour ulimit dans git bash, qui ne montre aucune anomalie:

 $ 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 

Avec Cygwin et Git 2.1.1, je peux lancer git svn sur mon repo sans aucun problème de mémoire. Mon programme de test fonctionne bien aussi. Je n’ai pas essayé les versions 1.x de Git sur Cygwin mais je suppose qu’elles fonctionneraient car le problème était une limitation de mémoire de msysperl qui est remplacée par Cygwin.

Je ne marquerai pas cela comme une réponse car cela ne résout pas ma question initiale. C’est ma solution de contournement actuelle pour les tests avec Git.

Je voudrais avoir une dissortingbution Git for Windows avec Perl qui fonctionne correctement. Il y a un problème pour mettre à niveau Perl ici . Cependant, cela ne semble pas être une tâche facile. Même chose pour la version SVN utilisée par git svn sous Windows: Comment mettre à niveau SVN