Git clone échoue avec une erreur de mémoire insuffisante - "fatal: de mémoire, malloc a échoué (tried to allocate 905574791 octets) / fatal: index-pack a échoué"

j'essaie de cloner un grand dépôt Git (1,4 Go) dans une VM Debian 32 bits avec 384 Mo de RAM. J'utilise git 1.7.2.5, et le protocole SSH pour cloner ('git clone user@host.com:/my/repo')

le clone échoue avec ce message:

remote: Counting objects: 18797, done.
remote: warning: subobtimal pack - out of memory
remote: Compressing objects: 100% (10363/10363), done.
fatal: out of memory, malloc failed (tried to allocate 905574791 bytes)
fatal: index-pack failed

j'ai essayé de réduire la quantité de mémoire utilisée par Git pour reconditionner l'extrémité du dépôt hôte, et de reconditionner:

git config pack.windowMemory 10m
git config pack.packSizeLimit 20m
git repack -a -d

mes questions sont les suivantes:

  1. S'agit-il d'un problème de taille client (côté clone) ou doit-on le résoudre dans le repo à partir duquel je clone?
  2. dans tous les cas, puis-je faire quoi que ce soit pour que le clone réussisse? Une grande partie des solutions potentielles en ligne impliquent certaines/toutes les choses suivantes, dont aucune n'est acceptable dans ce cas:

    • changer le contenu du dépôt de manière substantielle (c'est-à-dire Supprimer de grands fichiers)
    • en lui donnant la VM qui est en train de faire le clone de plus de RAM
    • en lui donnant la VM qui est en train de faire le clone 64 bits PROCESSEUR virtuel
    • transfert hors bande (p.ex. utilisant Rsync ou SFTP pour transférer le .répertoire git)

Merci d'avance.

15
demandé sur grw 2011-09-30 12:44:03

4 réponses

git clone ne regardera pas votre réglage pack.packSizeLimit , il transférera de toute façon tout dans un seul paquet - à moins qu'il n'ait changé depuis la dernière fois que j'ai regardé.

en utilisant SCP ou Rsync pourrait être un moyen de travailler autour de votre question en effet. Supprimer les gros fichiers" inutiles", puis reconditionner le dépôt que vous essayez de cloner pourrait également vous aider.

donner plus de RAM à la VM pourrait aussi aider - Je ne pense pas que vous aurez besoin d'un 64 bits d'adresse espace pour allouer 900Mo... Vous pouvez également lui donner assez d'espace de SWAP pour gérer le paquet 900MB au lieu d'augmenter la RAM.

3
répondu Romain 2011-09-30 09:38:39

J'ai eu un problème similaire sur Windows en utilisant MSysGit 32 bits. Le git 64 bits de Cygwin a fait le travail. Vous devriez peut-être utiliser une VM Debian 64 bits (au lieu d'une 32 bits).

Mon réponse originale à cette question est disponible à la question Git sur Windows, "mémoire malloc" échec .

0
répondu olibre 2017-05-23 11:33:13

aujourd'Hui, j'ai eu le même problème. Le serveur de Git n'a plus de mémoire, mais gitlab a indiqué qu'il y avait encore de la mémoire disponible. Nous avons vérifié la mémoire avec htop (aucune donnée disponible), redémarré gitlab et tout est redevenu normal.

0
répondu MateuszL 2017-04-25 08:37:14
sudo git pull

j'ai affronté le même message d'erreur chaque fois que j'ai tiré et sudo git pull m'a en fait aidé à surmonter ce message d'erreur et tirer a réussi.

-6
répondu Karthik Balu 2015-05-13 13:32:45