tutorial - Extensiones de Git: Error de Win32 487: No se pudo reservar espacio para el montón de cygwin, error de Win32 0
git push (14)
Extensiones Git: Todo funcionaba bien hasta ayer.
Pero de repente recibo este error cuando intento extraer algunos repositorios utilizando las 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
Está sucediendo para todos los repositorios que he clonado. Pero, mi git bash está funcionando bien. No tengo ni idea de lo que está pasando. ¿Alguna idea de por qué esto está sucediendo?
tl; dr: Instala Git de 64 bits para Windows 2 .
Detalles técnicos
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
Este síntoma por sí mismo no tiene nada que ver con las bases de imágenes de los ejecutables, las secciones de memoria compartida de Cygwin dañadas, las versiones en conflicto de DLL, etc.
Es un código de Cygwin que no puede asignar una porción de memoria de ~ 5 MB para su montón en esta dirección fija 0x68570000, mientras que aparentemente solo estaba disponible un agujero de aproximadamente ~ 2.5 MB. El código relevante se puede ver en la fuente msysgit .
¿Por qué esa parte del espacio de direcciones no es gratis?
Puede haber muchas razones. En mi caso, se cargaron otros módulos en una dirección conflictiva:
La última dirección sería alrededor de 0x68570000 + 5 MB = 0x68C50000, pero hay estas DLL relacionadas con WOW64 cargadas desde 0x68810000 hacia arriba, que bloquean la asignación.
Siempre que hay alguna DLL compartida, Windows en general intenta cargarla en la misma dirección virtual en todos los procesos para guardar algún proceso de reubicación. Es solo una cuestión de mala suerte que estos componentes del sistema se hayan cargado de alguna manera en una dirección conflictiva esta vez .
¿Por qué hay Cygwin en tu Git?
Debido a que Git es un paquete completo que consta de algunos comandos de bajo nivel y muchas utilidades útiles, y se desarrolla principalmente en sistemas similares a Unix. Para poder construirlo y ejecutarlo sin reescritura masiva, necesita al menos un entorno parcial similar a Unix.
Para lograrlo, las personas han inventado MinGW y MSYS, un conjunto mínimo de herramientas de compilación para desarrollar programas en Windows de manera similar a Unix. MSYS también contiene una biblioteca compartida, esta msys-1.0.dll
, que ayuda con algunos de los problemas de compatibilidad entre las dos plataformas durante el tiempo de ejecución. Y muchas partes de eso han sido tomadas de Cygwin, porque alguien ya tenía que resolver los mismos problemas allí.
Entonces, no es Cygwin, es el DLL de tiempo de ejecución de MinGW lo que se está comportando raro aquí.
En Cygwin, este código realmente ha cambiado mucho desde lo que está en MSYS 1.0: ¡el último mensaje de confirmación para ese archivo dice "Importar Cygwin 1.3.4", que es de 2001!
Tanto Cygwin actual como la nueva versión de MSYS - MSYS2 - ya tienen una lógica diferente, lo que se espera sea más robusta. Solo se trata de versiones antiguas de Git para Windows que aún se han construido utilizando el antiguo sistema MSYS roto.
Soluciones limpias:
- Instale Git para Windows 2 : está construido con el MSYS2 nuevo, mantenido correctamente y también tiene muchas características nuevas, muchas correcciones de errores, mejoras de seguridad, etc. Si es posible, también se recomienda utilizar la versión de 64 bits . Pero la solución alternativa de rebase se realiza automáticamente detrás de escena para sistemas de 32 bits, por lo que las posibilidades de que el problema ocurra allí también deberían ser menores.
- El simple reinicio de la computadora para limpiar el espacio de direcciones (cargar estos módulos en una dirección aleatoria diferente) podría funcionar, pero en realidad, simplemente actualice a Git para Windows 2 para obtener las correcciones de seguridad, si no es otra cosa.
Soluciones hacky:
- El cambio de
PATH
veces puede funcionar porque puede haber diferentes versiones demsys-1.0.dll
en diferentes versiones de Git u otras aplicaciones basadas en MSYS, que quizás usen una dirección diferente, un tamaño diferente de este montón, etc. - Rebasar msys
msys-1.0.dll
puede ser una pérdida de tiempo, porque 1) es una DLL, ya tiene información de reubicación y 2) "en cualquier versión del sistema operativo Windows no hay garantía de que una (...) DLL siempre se cargue en el mismo espacio de direcciones "de todos modos ( source ). La única forma en que esto puede ayudar es si elmsys-1.0.dll
se carga en la dirección en conflicto que está intentando usar. Aparentemente, ese es el caso a veces, ya que esto es lo que los chicos de Git para Windows están haciendo automáticamente en sistemas de 32 bits . - Teniendo en cuenta los hallazgos anteriores, en un principio binario
msys-1.0.dll
binariomsys-1.0.dll
para usar un valor diferente para_cygheap_start
y eso resolvió el problema de inmediato.
Cygwin utiliza secciones persistentes de memoria compartida, que en ocasiones pueden corromperse. El síntoma de esto es que algunos programas de Cygwin comienzan a fallar, pero otras aplicaciones no se ven afectadas. Dado que estas secciones de memoria compartida son persistentes, a menudo se necesita reiniciar el sistema para eliminarlas antes de que se pueda resolver el problema.
Este error ocurre muy raramente en mi máquina de Windows. Terminé reiniciando la máquina, y el error desapareció.
He visto el mismo mensaje de error después de actualizar a git1.8.5.2:
Simplemente haga una búsqueda de todos msys-1.0.dll
en su unidad C:/
y haga que el que usa Git sea lo primero.
Por ejemplo, en mi caso simplemente cambié el orden 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
Al hacer que la ruta Git C:/prgs/git/PortableGit-1.8.5.2-preview20131230/bin/
primero en mi %PATH%
, el mensaje de error desapareció.
No es necesario reiniciar o incluso cambiar la sesión de DOS.
Una vez que se actualiza el %PATH%
en esa sesión de DOS, los comandos de git simplemente funcionan.
Tenga en cuenta que carmbrester y Sixto Saez informan a continuación (en los comentarios) que deben reiniciarse para solucionar el problema.
Nota: Primero, también elimine cualquier msys-1.0.dll
, como uno en %LOCALAPPDATA%
La eliminación de la versión anterior de% USERPROFILE% / AppData / Local / SourceTree / app-xxx funcionó para mí. No estoy seguro de cómo estaba conectado a la línea de comandos git ...
Me encontré con esto hoy. Dirigido por la respuesta de Greg Hewgill, observé los procesos en ejecución en mi sistema para ver si algo estaba "atascado" o si otros usuarios habían iniciado sesión en la máquina haciendo algo con git. Luego lancé cygwin (instalado por separado) en esta máquina en particular. Se lanzó bien. Lo cerré y luego volví a intentar las Extensiones Git (estaba intentando una operación de extracción) y funcionó. No estoy seguro de si el lanzamiento de cygwin eliminó algo que se compartió, pero esta es la primera vez que me topé con este error y esto pareció solucionarlo.
Me he encontrado con este problema con el LPCEXpresso building.si tiene el C: / MinGW / bin en el PATH. de alguna manera tuve que eliminarlo para deshacerme de este problema, ya que algunos otros MinGW también están basados
Para solucionar este problema, simplemente dejo que Tortoise Git instale su actualización.
Si un reinicio no corrige el problema (como lo sugiere la respuesta de Greg Hegwill), verifique su PATH para ver si hay alguna instalación conflictiva de msys-1.0.dll (y posiblemente otras DLL relacionadas).
En mi situación particular, la instalación de msys de MinGW tiene una copia de esa DLL en su directorio bin
( <MinGW_Install_Path>/msys/1.0/bin
), y se incluyó en el PATH. El directorio cmd
de Git estaba listado en la RUTA, pero su bin
no estaba. (La versión de Git de msys-1.0.dll está en el directorio bin
. Aparentemente, la instalación predeterminada de MSys-Git no agrega su ubicación a la RUTA.)
Una solución temporal fue agregar el directorio bin
de Git a la RUTA para que aparezca antes de las rutas de MinGW. (Es probable que una solución más permanente implique resolver los conflictos de ruta entre los msys y Git de MinGW y / o eliminar las instalaciones de msys duplicadas).
Solo quiero compartir mi experiencia aquí. Encontré el mismo problema al compilar de forma cruzada para la plataforma MTK en una máquina con Windows de 64 bits. MinGW y MSYS están involucrados en el proceso de construcción y surgió este problema. Lo resolví cambiando el archivo msys-1.0.dll
. Ni rebase.exe
ni el reinicio del sistema funcionaron para mí.
Ya que no hay rebase.exe instalado en mi computadora. Instalé cygwin64 y usé el rebase.exe
dentro de:
C:/cygwin64/bin/rebase.exe -b 0x50000000 msys-1.0.dll
Aunque la rebasación parecía exitosa, el error se mantuvo. Luego rebase
comando rebase
dentro del terminal Cygwin64 y obtuve un error:
$ rebase -b 0x50000000 msys-1.0.dll
rebase: Invalid Baseaddress 0x50000000, must be > 0x200000000
Más tarde probé un par de direcciones pero ninguno de ellos funcionó. Así que terminé cambiando el archivo msys-1.0.dll
y resolví el problema.
Tuve el mismo problema, después de un error y actualización de Windows 8.0, en msys git 1.9. No encontré ningún msys / git en mi ruta, así que lo agregué en la configuración de entorno local del usuario de Windows. Funcionó sin reiniciar.
Básicamente, similar a RobertB, pero no tenía ningún git / msys en mi camino.
Por cierto
Intenté usar rebase -b blablabla msys.dll, pero tuve el error "ReBaseImage (msys-1.0.dll) falló con el último error = 6"
Si necesita esto rápidamente y no tiene tiempo de depuración, me di cuenta de que "Git Bash.vbs" en el directorio de Git inicia correctamente el shell bash.
Verison muy simple de la solución de rebase:
Vaya a la carpeta donde está instalado git, como por ejemplo:
C:/Program Files (x86)/Git/bin
Al mantener presionada la tecla Mayús y hacer clic con el botón derecho en la carpeta, debería poder abrir un símbolo del sistema como administrador desde allí (gracias a https://.com/users/355389/darren-lewis por ese comentario),
Entonces corre:
rebase.exe -b 0x50000000 msys-1.0.dll
Esto lo solucionó para mí cuando el enfoque de reinicio no funcionó.
Espero eso ayude.
Yo tuve el mismo problema. Encontré la solución aquí http://jakob.engbloms.se/archives/1403
c:/msysgit/bin>rebase.exe -b 0x50000000 msys-1.0.dll
Para mi la solución fue ligeramente diferente. Era
C:/Program Files (x86)/Git/bin>rebase.exe -b 0x50000000 msys-1.0.dll
Antes de reajustar dlls, debe asegurarse de que no esté en uso:
tasklist /m msys-1.0.dll
Y hacer una copia de seguridad:
copy msys-1.0.dll msys-1.0.dll.bak
Si el comando rebase falla con algo como:
ReBaseImage (msys-1.0.dll) falló con el último error = 6
Deberá realizar los siguientes pasos en orden:
- Copia la dll a otro directorio
- Rebase la copia usando los comandos de arriba
- Reemplace la dll original con la copia.
Si algún problema ejecuta los comandos como administrador
c: / msysgit / bin> rebase.exe -b 0x50000000 msys-1.0.dll