web-dev-qa-db-fra.com

Extensions Git: erreur Win32 487: impossible de réserver de l'espace pour le tas de cygwin, erreur Win32 0

Git Extensions: Tout fonctionnait bien jusqu'à hier.

Mais tout à coup, je reçois cette erreur lorsque j'essaie d'extraire des référentiels avec git extensions

C:\Program Files\Git\bin\git.exe pull --progress "Origin" 
Done
    0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68560000, RegionSize 0x390000, State 0x10000
C:\Program Files\Git\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0

Cela se passe pour tous les dépôts que j'ai clonés. Mais, mon git bash fonctionne bien. Je n'ai aucune idée de ce qui se passe. Avez-vous une idée de la raison pour laquelle cela se produit?

339
Uchia Itachi

Cygwin utilise des sections de mémoire partagée persistante, qui peuvent parfois être corrompues. Le symptôme de ceci est que certains programmes Cygwin commencent à échouer, mais que les autres applications ne sont pas affectées. Comme ces sections de mémoire partagée sont persistantes, il faut souvent un redémarrage du système pour les éliminer avant que le problème puisse être résolu.

230
Greg Hewgill

J'ai eu le même problème. J'ai trouvé la solution ici http://jakob.engbloms.se/archives/14

c:\msysgit\bin>rebase.exe -b 0x50000000 msys-1.0.dll

Pour moi, la solution était légèrement différente. C'était

C:\Program Files (x86)\Git\bin>rebase.exe -b 0x50000000 msys-1.0.dll

Avant de rebase les dlls, vous devez vous assurer que ce n’est pas utilisé:

tasklist /m msys-1.0.dll

Et faites une sauvegarde:

copy msys-1.0.dll msys-1.0.dll.bak

Si la commande rebase échoue avec quelque chose comme:

ReBaseImage (msys-1.0.dll) a échoué avec la dernière erreur = 6

Vous devrez suivre les étapes suivantes dans l'ordre:

  1. Copiez la dll dans un autre répertoire
  2. Rebase la copie en utilisant les commandes ci-dessus
  3. Remplacez la DLL d'origine par la copie.

En cas de problème, exécutez les commandes en tant que Administrateur

377
zainengineer

tl; dr: Installer Git 64 bits pour Windows 2 .


Détails techniques

      0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68570000, RegionSize 0x2A0000, State 0x10000
PortableGit\bin\bash.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0

Ce symptôme en soi n'a rien à voir avec les bases d'images de fichiers exécutables, les sections de mémoire partagée de Cygwin corrompues, les versions en conflit de DLL, etc.

Le code Cygwin ne parvient pas à allouer environ 5 Mo de mémoire à son segment de mémoire à l'adresse fixe 0x68570000, alors qu'un seul trou d'environ 2,5 Mo était apparemment disponible. Le code correspondant est visible dans source msysgit .


Pourquoi cette partie de l'espace d'adressage n'est-elle pas gratuite?

Il peut y avoir plusieurs raisons. Dans mon cas, il s’agissait de quelques autres modules chargés à une adresse en conflit:

Process modules in Process Explorer

La dernière adresse serait autour de 0x68570000 + 5 Mo = 0x68C50000, mais ces DLL liées à WOW64 chargées à partir de 0x68810000 bloquent l'allocation.

Chaque fois qu'il existe une DLL partagée, Windows en général essaie de la charger à la même adresse virtuelle dans tous les processus pour enregistrer certains traitements de relocalisation. Le fait que ces composants système se soient chargés à une adresse en conflit cette fois-ci est un simple malheur.


Pourquoi y a-t-il Cygwin dans votre Git?

Parce que Git est une suite riche composée de commandes de bas niveau et de nombreux utilitaires utiles, principalement développée sur des systèmes de type Unix. Pour pouvoir le construire et l'exécuter sans réécriture massive, il faut au moins un environnement partiel de type Unix.

Pour ce faire, les utilisateurs ont inventé MinGW et MSYS, un ensemble minimal d'outils de génération permettant de développer des programmes sous Windows de la même manière que sur Unix. MSYS contient également une bibliothèque partagée, ce msys-1.0.dll, qui permet de résoudre certains problèmes de compatibilité entre les deux plates-formes pendant l'exécution. Et de nombreuses parties de ce document ont été empruntées à Cygwin, car quelqu'un devait déjà résoudre les mêmes problèmes.

Donc, ce n'est pas Cygwin, c'est le runtime de MinGW DLL qu'est-ce qui se comporte bizarrement ici.

Dans Cygwin, ce code a beaucoup changé depuis ce qui est dans MSYS 1.0 - le dernier message de validation pour ce fichier dit "Importer Cygwin 1.3.4", qui date de 2001!

Cygwin actuel et nouvelle version de MSYS - MSYS2 - ont déjà une logique différente en place, ce qui est, espérons-le, plus robuste. Ce ne sont que d'anciennes versions de Git pour Windows qui ont encore été construites à l'aide de l'ancien système MSYS défectueux.


Des solutions propres:

  • Installez Git pour Windows 2 - il est construit avec le nouveau MSYS2 correctement entreten et comporte également de nombreuses nouvelles fonctionnalités, de nombreuses corrections de bugs, des améliorations de la sécurité, etc. Si possible, il est également recommandé d'utiliser la version 64 bits . Mais la solution de contournement est automatiquement effectuée en arrière-plan pour les systèmes 32 bits, de sorte que les chances que le problème se produise devraient également être plus faibles.
  • Redémarrer simplement l'ordinateur pour nettoyer l'espace d'adressage (charger ces modules à une adresse aléatoire différente) peut fonctionner, mais en réalité, effectuez une mise à niveau vers Git pour Windows 2 pour obtenir les correctifs de sécurité.

Solutions bidouillées:

  • Changer PATH peut parfois fonctionner car il peut y avoir différentes versions de msys-1.0.dll dans différentes versions de Git ou d'autres applications basées sur MSYS, qui utilisent peut-être une adresse différente, une taille différente de ce tas, etc.
  • Rebaser msys-1.0.dll pourrait être une perte de temps, car 1) étant une DLL, elle possède déjà des informations de relocalisation et 2) "dans aucune version de Windows, rien ne garantit qu’un (...) DLL sera toujours chargé au même espace adresse "de toute façon ( source ). La seule façon dont cela peut aider est que le msys-1.0.dll lui-même se charge à l'adresse en conflit qu'il tente ensuite d'utiliser. Apparemment, c’est parfois le cas, car c’est ce que les gars de Git pour Windows font automatiquement sur systèmes 32 bits .
  • Compte tenu des constatations ci-dessus, j’ai initialement mis au point un binaire qui corrigeait le binaire msys-1.0.dll afin d’utiliser une valeur différente pour _cygheap_start, ce qui a immédiatement résolu le problème.
135
Yirkha

Version très simple de la solution de rebase:

Allez dans le dossier où git est installé, tel que:

C:\Program Files (x86)\Git\bin

En maintenant la touche Maj enfoncée et en cliquant avec le bouton droit de la souris dans le dossier, vous devriez pouvoir ouvrir une commande en tant qu'administrateur en tant qu'administrateur (grâce à https://stackoverflow.com/users/355389/darren-lewis pour cela commentaire),

Puis lancez:

rebase.exe -b 0x50000000 msys-1.0.dll

Cela a résolu le problème lorsque l'approche de redémarrage ne fonctionnait pas.

J'espère que ça aide.

32
Tisch

J'ai vu le même message d'erreur après la mise à niveau vers git1.8.5.2:

Il vous suffit de rechercher tous les msys-1.0.dll sur votre lecteur C:\ et de faire en sorte que celui utilisé par Git soit prioritaire.

Par exemple, dans mon cas, j'ai simplement changé l'ordre de:

C:\prgs\Gow\Gow-0.7.0\bin\msys-1.0.dll
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\msys-1.0.dll

En faisant passer le chemin Git C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\ en premier dans mon %PATH%, le message d'erreur a disparu.

Pas besoin de redémarrer ou même de changer de session DOS.
Une fois que le %PATH% est mis à jour dans cette session DOS, les commandes git fonctionnent.


Notez que carmbrester et Sixto Saez signalent tous les deux ci-dessous (dans les commentaires) avoir à redémarrer dans afin de résoudre le problème.
Remarque: Tout d'abord, supprimez également tout msys-1.0.dll, comme celui de %LOCALAPPDATA%

12
VonC

Si un redémarrage ne corrige pas le problème (comme suggéré par la réponse de Greg Hegwill), vérifiez que votre PATH contient une ou des installations (s) en conflit avec msys-1.0.dll (et éventuellement d'autres DLL associées).

Dans mon cas particulier, l'installation de msys par MinGW contient une copie de ce DLL dans son répertoire bin (<MinGW_Install_Path>\msys\1.0\bin) et il était répertorié dans le chemin PATH. Le répertoire cmd de Git était répertorié dans le PATH, mais pas son bin. (La version de msys-1.0.dll de Git se trouve dans le répertoire bin. Apparemment, l'installation par défaut de MSys-Git n'ajoute pas son bin au CHEMIN.)

Un correctif temporaire consistait à ajouter le répertoire bin de Git au PATH afin qu'il apparaisse avant les chemins de MinGW. (Une solution plus permanente impliquera probablement de résoudre les conflits de chemins entre msys de MinGW et Git et/ou de supprimer les installations dupliquées de msys.)

7
RobertB

Je veux juste partager mon expérience ici. Je suis tombé sur le même problème lors de la compilation croisée pour la plate-forme MTK sur une machine Windows 64 bits. MinGW et MSYS sont impliqués dans le processus de construction et ce problème est apparu. Je l'ai résolu en changeant le fichier msys-1.0.dll. Ni rebase.exe ni le redémarrage du système n'ont fonctionné pour moi.

Puisqu'aucun rebase.exe n'est installé sur mon ordinateur. J'ai installé cygwin64 et utilisé le rebase.exe à l'intérieur:

C:\cygwin64\bin\rebase.exe -b 0x50000000 msys-1.0.dll

Bien que le rebasage semblait réussi, l'erreur est restée. Ensuite, j'ai exécuté la commande rebase à l'intérieur du terminal Cygwin64 et j'ai obtenu une erreur:

$ rebase -b 0x50000000 msys-1.0.dll
rebase: Invalid Baseaddress 0x50000000, must be > 0x200000000

J'ai essayé plus tard une adresse de couple mais aucun d'entre eux ne travaillait. J'ai donc fini par changer le fichier msys-1.0.dll et le problème a été résolu.

2
radiohead

J'ai couru dans cette aujourd'hui. En réponse à la réponse de Greg Hewgill, j'ai examiné les processus en cours sur mon système pour voir si quelque chose était "bloqué" ou si d'autres utilisateurs étaient connectés à la machine et utilisaient quelque chose avec git. J'ai ensuite lancé cygwin (installé séparément) sur cette machine. Il a lancé ok. Je l'ai fermé et j'ai ensuite essayé à nouveau les extensions Git (j'essayais une opération d'extraction) et cela a fonctionné. Je ne sais pas si le lancement de cygwin a effacé quelque chose qui a été partagé, mais c’est la première fois que je rencontre cette erreur et cela a semblé résoudre le problème pour moi.

1
P_O

Cette erreur se produit très rarement sur ma machine Windows. J'ai fini par redémarrer la machine et l'erreur a disparu.

1
IgorGanapolsky

J'ai eu le même problème, après un crash de Windows 8.0 et une mise à jour, sur msys git 1.9. Je n'ai trouvé aucun msys/git dans mon chemin, je l'ai donc ajouté dans les paramètres d'environnement de l'utilisateur local Windows. Cela a fonctionné sans avoir à redémarrer.

Fondamentalement, semblable à RobertB, mais je n'avais pas aucun git/msys sur mon chemin.

Btw:

  1. J'ai essayé d'utiliser msbl.dll rebase -b blablabla, mais l'erreur "ReBaseImage (msys-1.0.dll) a échoué avec la dernière erreur = 6"

  2. si vous avez besoin de cela rapidement et que vous n'avez pas le temps de déboguer, j'ai remarqué que "Git Bash.vbs" dans le répertoire Git démarre correctement bash Shell.

1
Koshmaar

c:\msysgit\bin> rebase.exe -b 0x50000000 msys-1.0.dll

0
sebahattin çatal

La suppression de l’ancienne version de% USERPROFILE%\AppData\Local\SourceTree\app-x.x.x a fonctionné pour moi. Vous ne savez pas comment il a été connecté à Git en ligne de commande ...

0
barbalion

J'ai rencontré ce problème avec le bâtiment LPCXpresso.Si vous avez le C:\MinGW\bin dans le chemin. en quelque sorte je devais l'enlever pour se débarrasser de ce problème car un autre MinGW comme basé aussi

0
Prashanjit Ghosh

Pour résoudre ce problème, je laisse simplement Tortoise Git installer sa mise à jour.

0
Jace Browning