web-dev-qa-db-fra.com

Git sous Windows, "Mémoire insuffisante - échec de malloc"

Vous avez rencontré un problème avec le référentiel et essayé presque tous les paramètres de configuration possibles, par exemple. pack.WindowMemory etc etc

Je crois que quelqu'un a archivé un fichier volumineux dans un référentiel distant. À présent, chaque fois que j'essaie d'extraire ou de transmettre à ce fichier, GIT essaie de l'emballer et manque de mémoire:

Auto packing the repository for optimum performance. You may also
run "git gc" manually. See "git help gc" for more information.
Counting objects: 6279, done.
Compressing objects: 100% (6147/6147), done.
fatal: Out of memory, malloc failed (tried to allocate 1549040327 bytes)
error: failed to run repack

J'ai essayé git gc & git remballer avec diverses options mais renvoie toujours la même erreur.

Presque abandonné et sur le point de créer un nouveau dépôt, mais pensais que je demanderais d'abord autour de moi :)

60
timothyclifford

J'ai trouvé une solution Ici cela a fonctionné pour moi.

Dans le fichier .git/config (client et/ou serveur), j'ai ajouté ceci:

[core]
  packedGitLimit = 128m
  packedGitWindowSize = 128m

[pack]
  deltaCacheSize = 128m
  packSizeLimit = 128m
  windowMemory = 128m
94
git

Pour référence (vous l’avez peut-être déjà vu), l’affaire msysgit traitant de cette question est le ticket 292 .

Il suggère plusieurs solutions de contournement:

Pour désactiver la compression delta de certains fichiers, dans .git/info/attributes, ajoutez:

*.Zip binary -delta

From Page de manuel de Gitattributes :

La compression delta ne sera pas tentée pour les blobs pour les chemins avec l'attribut delta défini sur false.


Une solution de contournement plus simple consisterait peut-être en quelque sorte à réinitialiser l’historique avant la validation de ce fichier volumineux et à refaire les autres commits à partir de là.

18
VonC

EDIT: Depuis git-v2.5.0 (Août/2015), git-for-windows (anciennement MSysGit)
fournit versions 64 bits comme remarqué par Pan.student .
Dans cette réponse, je conseillais d'installer Cygwin 64 bits (version Git 64 bits).


J'ai eu un problème similaire avec Out of memory, malloc failed en utilisant MSysGit lorsque j'ai atteint la barrière des 4 Go:

> git --version
git version 1.8.3.msysgit.0

> file path/Git/cmd/git
path/Git/cmd/git: PE32 executable for MS Windows (console) Intel 80386 32-bit

> time git clone --bare -v ssh://linuxhost/path/repo.git
Cloning into bare repository 'repo.git'...
remote: Counting objects: 1664490, done.
remote: Compressing objects: 100% (384843/384843), done.
remote: Total 1664490 (delta 1029586), reused 1664490 (delta 1029586)
Receiving objects: 100% (1664490/1664490), 550.96 MiB | 1.55 MiB/s, done.
Resolving deltas: 100% (1029586/1029586), done.
fatal: Out of memory, malloc failed (tried to allocate 4691583 bytes)
fatal: remote did not send all necessary objects

real    13m8.901s
user    0m0.000s
sys     0m0.015s

MSysGit crashing after reaching 4 GB barrier

Enfin, git 64 bits de Cygwin corrige le:

> git --version
git version 1.7.9

> file /usr/bin/git
/usr/bin/git: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows

> time git clone --bare -v ssh://linuxhost/path/repo.git
Cloning into bare repository 'repo.git'...
remote: Counting objects: 1664490, done.
remote: Compressing objects: 100% (384843/384843), done.
remote: Total 1664490 (delta 1029586), reused 1664490 (delta 1029586)
Receiving objects: 100% (1664490/1664490), 550.96 MiB | 9.19 MiB/s, done.
Resolving deltas: 100% (1029586/1029586), done.

real    13m9.451s
user    3m2.488s
sys     3m53.234s

git 64 bits from Cygwin succeeded

FYI on linuxhost 64 bits:

repo.git> git config -l
[email protected]
core.repositoryformatversion=0
core.filemode=true
core.bare=true

repo.git> git --version
git version 1.8.3.4

repo.git> uname -a
Linux linuxhost 2.6.32-279.19.1.el6.x86_64 #1 SMP Sat Nov 24 14:35:28 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

Si ma réponse ne résout pas votre problème, vous pouvez également consulter ces pages:

13
olibre

Cela a fonctionné pour moi, mais je devais définir les options via la ligne de commande en utilisant:

git --global core\pack [param] value
0
craig Rickett