Extensions Git: Tout fonctionnait bien jusqu'à hier.
Mais tout à coup, je reçois cette erreur lorsque j'essaie de tirer certains référentiels en utilisant 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 produit pour tous les référentiels que j'ai clonés. Mais, mon git bash fonctionne bien. Je n'ai aucune idée de ce qui se passe. Une idée de pourquoi cela se produit?
git
cygwin
git-extensions
Uchia Itachi
la source
la source
Réponses:
Cygwin utilise des sections de mémoire partagée persistantes, qui peuvent parfois être endommagées. Le symptôme de cela est que certains programmes Cygwin commencent à échouer, mais d'autres applications ne sont pas affectées. Étant donné que ces sections de mémoire partagée sont persistantes, un redémarrage du système est souvent nécessaire pour les effacer avant que le problème puisse être résolu.
la source
J'ai eu le même problème. J'ai trouvé une solution ici http://jakob.engbloms.se/archives/1403
Pour moi, la solution était légèrement différente. C'était
Avant de rebaser les DLL, vous devez vous assurer qu'elles ne sont pas utilisées:
Et faites une sauvegarde:
Si la commande rebase échoue avec quelque chose comme:
Vous devrez effectuer les étapes suivantes dans l'ordre:
En cas de problème, exécutez les commandes en tant qu'administrateur
la source
tl; dr: installez Git 64 bits pour Windows 2 .
Détails techniques
Ce symptôme en soi n'a rien à voir avec les bases d'images d'exécutables, les sections de mémoire partagée de Cygwin corrompues, les versions conflictuelles des DLL, etc.
C'est le code Cygwin qui n'alloue pas un gros morceau de mémoire de ~ 5 Mo pour son tas à cette adresse fixe 0x68570000, alors que seul un trou de ~ 2,5 Mo était apparemment disponible. Le code pertinent peut être vu dans la 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 d'autres modules chargés à une adresse conflictuelle:
La dernière adresse serait d'environ 0x68570000 + 5 Mo = 0x68C50000, mais il y a ces DLL liées à WOW64 chargées à partir de 0x68810000, qui 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 un traitement de relocalisation. C'est juste une question de malchance que ces composants du système se soient en quelque sorte chargés à une adresse conflictuelle cette fois .
Pourquoi y a-t-il Cygwin dans votre Git?
Parce que Git est une suite riche composée de quelques commandes de bas niveau et de nombreux utilitaires utiles, et principalement développée sur des systèmes de type Unix. Afin de pouvoir le construire et l'exécuter sans réécriture massive, il a besoin au moins d'un environnement partiel de type Unix.
Pour ce faire, les gens ont inventé MinGW et MSYS - un ensemble minimal d'outils de construction pour développer des programmes sur Windows à la manière Unix. MSYS contient également une bibliothèque partagée, celle-ci
msys-1.0.dll
, qui résout certains des problèmes de compatibilité entre les deux plates-formes lors de l'exécution. Et de nombreux éléments ont été extraits de Cygwin, car quelqu'un devait déjà résoudre les mêmes problèmes là-bas.Ce n'est donc pas Cygwin, c'est la DLL d'exécution de MinGW qui se comporte bizarrement ici.
Dans Cygwin, ce code a en fait beaucoup changé depuis ce qui se trouve dans MSYS 1.0 - le dernier message de validation pour ce fichier dit "Import Cygwin 1.3.4", qui date de 2001!
Les deux Cygwin actuelle et la nouvelle version de MSYS - MSYS2 - ont déjà une logique différente en place, ce qui est plus robuste , espérons. Ce ne sont que les anciennes versions de Git pour Windows qui ont encore été construites en utilisant l'ancien système MSYS cassé.
Solutions propres:
Solutions hacky:
PATH
peut parfois fonctionner car il peut y avoir différentes versions demsys-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
peut être une perte de temps, car 1) étant une DLL, il contient déjà des informations de relocalisation et 2) "dans n'importe quelle version de Windows OS, il n'y a aucune garantie qu'une (...) DLL se charge toujours au même espace d'adressage" de toute façon ( source ). La seule façon dont cela peut aider est que si lemsys-1.0.dll
lui - même se charge à l'adresse conflictuelle qu'il essaie ensuite d'utiliser. Apparemment, c'est parfois le cas, car c'est ce que les gars de Git pour Windows font automatiquement sur les systèmes 32 bits .msys-1.0.dll
binaire pour utiliser une valeur différente_cygheap_start
et cela a résolu le problème immédiatement.la source
cmder/vendor/git-for-windows
répertoire et renommé l'ancien dossiergit-for-windows-x86
. Si vous ouvrezcmder/vendor/git-for-windows
, vous verrez un dossiermingw32
, qui est votre indice que vous utilisez 32 bits. Dans le Git x64, vous verrez un dossiermingw64
.Version très simple de la solution de rebase:
Accédez au dossier dans lequel git est installé, tel que:
En maintenant la touche Maj et clic droit dans le dossier, vous devriez pouvoir ouvrir une invite de commande en tant qu'administrateur à partir de là (merci à https://stackoverflow.com/users/355389/darren-lewis pour ce commentaire),
Exécutez ensuite:
Cela m'a corrigé lorsque l'approche de redémarrage ne fonctionnait pas.
J'espère que ça aide.
la source
J'ai vu le même message d'erreur après la mise à niveau vers git1.8.5.2:
Effectuez simplement une recherche de tout
msys-1.0.dll
sur votreC:\
disque et faites en sorte que celui utilisé par Git passe en premier.Par exemple, dans mon cas, j'ai simplement changé l'ordre de:
En faisant
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\
passer le chemin Git en premier dans mon%PATH%
, le message d'erreur a disparu.Pas besoin de redémarrer ou même de changer la session DOS.
Une fois le
%PATH%
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 afin de résoudre le problème.
Remarque: Tout d' abord, enlever tout aussi
msys-1.0.dll
, comme celui%LOCALAPPDATA%
la source
Si un redémarrage ne résout pas le problème (comme suggéré par la réponse de Greg Hegwill), vérifiez votre chemin d'accès pour les installations en conflit du msys-1.0.dll (et éventuellement d'autres DLL connexes).
Dans ma situation particulière, l'installation de msG par MinGW a une copie de cette DLL dans son
bin
répertoire (<MinGW_Install_Path>\msys\1.0\bin
), et elle a été répertoriée dans le CHEMIN. Lecmd
répertoire de Git était répertorié dans le PATH, mais cebin
n'était pas le cas. (La version Git de msys-1.0.dll se trouve dans lebin
répertoire. Apparemment, l'installation par défaut de MSys-Git n'ajoute pas sonbin
au PATH.)Un correctif temporaire consistait à ajouter le
bin
répertoire de Git au PATH afin qu'il apparaisse avant les chemins de MinGW. (Un correctif plus permanent impliquera probablement de trier les conflits de chemin entre les msys de MinGW et Git et / ou de supprimer les installations msys en double.)la source
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 modifiant le
msys-1.0.dll
fichier. Ni lerebase.exe
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é l'
rebase.exe
intérieur:Bien que le rebasage ait semblé réussi, l'erreur est restée. Ensuite, j'ai exécuté la
rebase
commande à l'intérieur du terminal Cygwin64 et j'ai obtenu une erreur:Plus tard, j'ai essayé une adresse de couple mais aucun d'eux n'a fonctionné. J'ai donc fini par changer le
msys-1.0.dll
fichier et cela a résolu le problème.la source
J'ai rencontré ça aujourd'hui. Guidé par la réponse de Greg Hewgill, j'ai examiné les processus en cours d'exécution sur mon système pour voir si quelque chose était «bloqué» ou si d'autres utilisateurs étaient connectés à la machine en faisant quelque chose avec git. J'ai ensuite lancé cygwin (installé séparément) sur cette machine particulière. Il a lancé ok. Je l'ai fermé, puis j'ai essayé à nouveau les extensions Git (j'essayais une opération de traction) 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 semble la corriger pour moi.
la source
J'ai eu le même problème, après un crash et une mise à jour de Windows 8.0, sur msys git 1.9. Je n'ai trouvé aucun msys / git sur mon chemin, je l'ai donc ajouté dans les paramètres d'environnement de l'utilisateur local de Windows. Cela a fonctionné sans redémarrer.
Fondamentalement, similaire à RobertB, mais je n'avais aucun git / msys sur mon chemin.
Btw:
J'ai essayé d'utiliser rebase -b blablabla msys.dll, mais l'erreur "ReBaseImage (msys-1.0.dll) a échoué avec la dernière erreur = 6"
si vous en avez besoin 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 avec succès le shell bash.
la source
c:\Program Files (x86)\Git\bin
au chemin et maintenant je suis en or.Cette erreur se produit très rarement sur ma machine Windows. J'ai fini par redémarrer la machine et l'erreur a disparu.
la source
J'ai rencontré ce problème avec le bâtiment LPCEXpresso. Si vous avez le C: \ MinGW \ bin dans le CHEMIN. en quelque sorte, je devais le supprimer pour se débarrasser de ce problème car certains autres MinGW comme basés trop
la source
Pour résoudre ce problème, je laisse simplement Tortoise Git installer sa mise à jour.
la source
c: \ msysgit \ bin> rebase.exe -b 0x50000000 msys-1.0.dll
la source
La suppression de l'ancienne version de% USERPROFILE% \ AppData \ Local \ SourceTree \ app-xxx a fonctionné pour moi. Je ne sais pas comment il était connecté à la ligne de commande git ...
la source