Extensiones Git: Todo estaba funcionando bien hasta ayer.
Pero de repente recibo este error cuando intento extraer algunos repositorios usando 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 funciona bien. No tengo idea de lo que está pasando. ¿Alguna idea de por qué sucede esto?
git
cygwin
git-extensions
Uchia Itachi
fuente
fuente
Respuestas:
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 es necesario reiniciar el sistema para eliminarlas antes de que se pueda resolver el problema.
fuente
Yo tuve el mismo problema. Encontré la solución aquí http://jakob.engbloms.se/archives/1403
Para mí la solución fue ligeramente diferente. Era
Antes de reajustar dlls, debe asegurarse de que no esté en uso:
Y haz una copia de seguridad:
Si el comando rebase falla con algo como:
Deberá realizar los siguientes pasos en orden:
Si hay algún problema, ejecute los comandos como administrador
fuente
tl; dr: Instale Git de 64 bits para Windows 2 .
Detalles técnicos
Este síntoma por sí solo no tiene nada que ver con bases de imágenes de ejecutables, secciones de memoria compartida de Cygwin corruptas, versiones conflictivas de DLL, etc.
Es el código de Cygwin que no puede asignar una gran parte de memoria de ~ 5 MB para su almacenamiento dinámico en esta dirección fija 0x68570000, mientras que aparentemente solo hay un agujero ~ 2.5 MB de gran tamaño disponible allí. El código relevante se puede ver en la fuente msysgit .
¿Por qué esa parte del espacio de direcciones no es gratuita?
Puede haber muchas razones. En mi caso, fueron algunos otros módulos cargados en una dirección en conflicto:
La última dirección sería alrededor de 0x68570000 + 5 MB = 0x68C50000, pero hay estas DLL relacionadas con WOW64 cargadas desde 0x68810000 en adelante, que bloquean la asignación.
Cada vez que hay una DLL compartida, Windows en general intenta cargarla en la misma dirección virtual en todos los procesos para guardar algunos procesos 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 en conflicto esta vez .
¿Por qué hay Cygwin en tu Git?
Porque Git es un conjunto rico que consta de algunos comandos de bajo nivel y muchas utilidades útiles, y desarrollado principalmente en sistemas tipo Unix. Para poder construirlo y ejecutarlo sin una reescritura masiva, necesita al menos un entorno similar a Unix parcial.
Para lograr eso, 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, esto
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 la DLL de tiempo de ejecución de MinGW lo que se está comportando raro aquí.
En Cygwin, este código ha cambiado mucho desde lo que hay 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 es de esperar que sea más robusto. Solo las versiones antiguas de Git para Windows se han creado utilizando el antiguo sistema MSYS roto.
Soluciones limpias:
Soluciones Hacky:
PATH
veces puede funcionar porque puede haber diferentes versiones demsys-1.0.dll
diferentes versiones de Git u otras aplicaciones basadas en MSYS, que tal vez usen diferentes direcciones, diferentes tamaños de este montón, etc.msys-1.0.dll
podría ser una pérdida de tiempo, porque 1) al ser 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 ( fuente ). La única forma en que esto puede ayudar es si elmsys-1.0.dll
mismo se carga en la dirección en conflicto que está tratando de 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 .msys-1.0.dll
binario para usar un valor diferente_cygheap_start
y eso resolvió el problema de inmediato.fuente
cmder/vendor/git-for-windows
directorio y cambié el nombre de la carpeta anterior agit-for-windows-x86
. Si abrescmder/vendor/git-for-windows
, verás una carpetamingw32
, que es tu pista de que estás usando 32 bits. En el x64 Git, verá una carpetamingw64
.Versión muy simple de la solución de rebase:
Vaya a la carpeta donde está instalado git, como:
Al mantener presionada la tecla Mayús y hacer clic derecho en la carpeta, debería poder abrir un símbolo del sistema como administrador desde allí (gracias a https://stackoverflow.com/users/355389/darren-lewis por ese comentario),
Entonces corre:
Esto me lo solucionó cuando el enfoque de reinicio no funcionó.
Espero eso ayude.
fuente
He visto el mismo mensaje de error después de actualizar a git1.8.5.2:
Simplemente haga una búsqueda de todo
msys-1.0.dll
en suC:\
disco, y haga que el que use Git sea lo primero.Por ejemplo, en mi caso simplemente cambié el orden de:
Al hacer que el camino de Git sea lo
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
%PATH%
se actualiza en esa sesión de DOS, los comandos 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 elimina cualquiera
msys-1.0.dll
, como uno en%LOCALAPPDATA%
fuente
Si un reinicio no corrige el problema (como sugiere la respuesta de Greg Hegwill), verifique su RUTA en busca de instalaciones conflictivas 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
bin
directorio (<MinGW_Install_Path>\msys\1.0\bin
), y fue incluida en la RUTA. Elcmd
directorio de Git figuraba en la RUTA, perobin
no lo estaba. (La versión de msit-1.0.dll de Git está en elbin
directorio. Aparentemente, la instalación predeterminada de MSys-Git no la agregabin
a la RUTA).Una solución temporal fue agregar el
bin
directorio de Git a la RUTA para que aparezca antes de las rutas de MinGW. (Una solución más permanente probablemente implicará resolver los conflictos de ruta entre el msys de MinGW y los de Git y / o eliminar las instalaciones de msys duplicadas).fuente
Solo quiero compartir mi experiencia aquí. Me encontré con el mismo problema al realizar una compilación 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 este problema apareció. Lo resolví cambiando el
msys-1.0.dll
archivo. Ni elrebase.exe
reinicio del sistema funcionó para mí.Como no hay rebase.exe instalado en mi computadora. Instalé cygwin64 y usé el
rebase.exe
interior:Aunque el rebase parecía exitoso, el error permaneció. Luego ejecuté el
rebase
comando dentro del terminal Cygwin64 y obtuve un error:Más tarde probé un par de direcciones pero ninguno de ellos funcionó. Así que terminé cambiando el
msys-1.0.dll
archivo y resolvió el problema.fuente
Me encontré con esto hoy. Dirigido por la respuesta de Greg Hewgill, miré 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 probé las Extensiones Git nuevamente (estaba intentando una operación de extracción) y funcionó. No estoy seguro de si el lanzamiento de cygwin borró algo que se compartió, pero esta es la primera vez que me encontré con este error y esto pareció solucionarlo.
fuente
Tuve el mismo problema, después de un bloqueo y actualización de Windows 8.0, en msys git 1.9. No encontré ningún msys / git en mi camino, así que lo agregué en la configuración del entorno del usuario local 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, noté que "Git Bash.vbs" en el directorio Git inicia con éxito bash shell.
fuente
c:\Program Files (x86)\Git\bin
a la ruta y ahora soy dorado.Este error ocurre muy raramente en mi máquina Windows. Terminé reiniciando la máquina, y el error desapareció.
fuente
He encontrado este problema con el edificio LPCEXpresso. Si tienes el C: \ MinGW \ bin en la RUTA. de alguna manera tuve que eliminarlo para deshacerme de este problema, ya que algunos otros MinGW también se basan
fuente
Para solucionar este problema, simplemente dejo que Tortoise Git instale su actualización.
fuente
c: \ msysgit \ bin> rebase.exe -b 0x50000000 msys-1.0.dll
fuente
Eliminar 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 comando git ...
fuente