¿Cómo puedo solucionar el error "error fatal: se detectó una discrepancia en la base de cygheap" cuando uso git en Windows 10?

¿Cómo puedo solucionar el error "error fatal: se detectó una discrepancia en la base de cygheap" cuando uso git en Windows 10?

Cuando se usa git en Windows 10 (1803), algunos comandos dan el siguiente error:

git submodule add https://github.com/..../......git ......
      3 [main] basename (13656) C:\.....\basename.exe: *** fatal error - cygheap base mismatch detected - 0x64313400/0x11E3400.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facility
and delete all but the most recent version.  The most recent version *should*
reside in x:\cygwin\bin, where 'x' is the drive on which you have
installed the cygwin distribution.  Rebooting is also suggested if you
are unable to find another cygwin DLL.

¿Cómo puedo resolver este problema?

Respuesta1

Hay varias razones posibles para este error.

Por ejemplo, es posible que tenga una versión contradictoria de la DLL.

Sin embargo, las versiones recientes de Windows 10 tienen un conjunto de funciones de protección adicionales integradas que originalmente formaban parte de Microsoft EMET.

En particular, el ASLR (Aleatorización del diseño del espacio de direcciones) la característica de seguridad no es compatible con los ejecutables tipo UNIX incluidos con la instalación de Git para Windows.

Para solucionar este problema, abra la configuración de Protección contra exploits, cambie a la pestaña Configuración del programa y agregue los nombres de los ejecutables que figuran en los errores (es posible que tenga bastantes).

En el ejemplo dado, puedes ingresar sólo basename.exela ruta o la ruta completa si eres un poco más paranoico.

Para cada ejecutable, desactive la protección ASLR.

Para obtener más referencia, consulte el siguiente problema de GitHub:

https://github.com/desktop/desktop/issues/3096

Respuesta2

Después de habilitar ALSR obligatorio de forma predeterminada en Windows 10.

Necesito deshabilitar ForceRelocateImages en todos los ejecutables de git-bash. Para hacer esto, cree un pequeño script de PowerShell o escriba directamente en PowerShell el siguiente código. Debe ejecutar PowerShell como administrador.

Get-Item -Path "C:\Program Files\Git\usr\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }
Get-Item -Path "C:\Program Files\Git\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }
Get-Item -Path "C:\Program Files\Git\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }

Después de eso, git-bash funciona bien.

Respuesta3

Para mí, la solución fue eliminar un archivo msys-2.0.dll. El mensaje de error sobre "cygwin" es incorrecto.

Si tiene varios msys-2.0.dllarchivos en la caja, puede causar problemas. Elimínelos todos excepto el que se encuentra al lado de sus comandos git (c:\program files\git....)

O si necesita varias versiones, modifique la RUTA para que cuando use el comando git no se encuentre la versión dll de MSYS64.

Respuesta4

  1. Cambiar el nombre msysde dll podría ayudar:https://stackoverflow.com/a/74463416/2377343

  2. Podrías intentar desactivar ASLR:https://stackoverflow.com/a/76296598/2377343

información relacionada