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?
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.
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:
En cas de problème, exécutez les commandes en tant que Administrateur
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 .
Il peut y avoir plusieurs raisons. Dans mon cas, il s’agissait de quelques autres modules chargés à une adresse en conflit:
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.
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.
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.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 .msys-1.0.dll
afin d’utiliser une valeur différente pour _cygheap_start
, ce qui a immédiatement résolu le problème.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.
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%
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.)
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.
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.
Cette erreur se produit très rarement sur ma machine Windows. J'ai fini par redémarrer la machine et l'erreur a disparu.
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:
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"
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.
c:\msysgit\bin> rebase.exe -b 0x50000000 msys-1.0.dll
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 ...
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
Pour résoudre ce problème, je laisse simplement Tortoise Git installer sa mise à jour.