Como posso corrigir o erro “erro fatal – incompatibilidade de base cygheap detectada” ao usar o git no Windows 10?

Como posso corrigir o erro “erro fatal – incompatibilidade de base cygheap detectada” ao usar o git no Windows 10?

Ao usar o git no Windows 10 (1803), alguns comandos apresentam o seguinte erro:

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.

Como posso resolver esse problema?

Responder1

Existem vários motivos possíveis para esse erro.

Por exemplo, você poderia realmente ter uma versão conflitante da DLL.

No entanto, as versões recentes do Windows 10 possuem um conjunto de recursos de proteção adicionais integrados que originalmente faziam parte do Microsoft EMET.

Mais notavelmente, o ASLR (Randomização de layout de espaço de endereço) o recurso de segurança não é compatível com os executáveis ​​do tipo UNIX incluídos na instalação do Git para Windows.

Para corrigir esse problema, abra as configurações do Exploit Protection, mude para a guia Configurações do programa e adicione os nomes dos executáveis ​​listados nos erros (você pode ter vários).

No exemplo dado, você pode inserir apenas basename.exeou o caminho completo se for um pouco mais paranóico.

Para cada executável, desative a proteção ASLR.

Para referência adicional, consulte o seguinte problema do GitHub:

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

Responder2

Depois de habilitar o ALSR obrigatório por padrão no Windows 10.

Preciso desabilitar ForceRelocateImages para todos os executáveis ​​​​git-bash. Para fazer isso, crie um pequeno script do PowerShell ou digite direto no PowerShell o código abaixo. Você precisa executar o 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 }

Depois disso, o git-bash funciona bem.

Responder3

Para mim, a solução foi remover um arquivo msys-2.0.dll. A mensagem de erro sobre "cygwin" está incorreta.

Se você tiver vários msys-2.0.dllarquivos na caixa, isso poderá causar problemas. Remova todos eles, exceto aquele que fica próximo aos seus comandos git (c:\program files\git....)

Ou se você precisar de várias versões, altere o PATH para que, quando estiver usando o comando git, a versão da dll MSYS64 não seja encontrada.

Responder4

  1. Renomear msysdll pode ajudar:https://stackoverflow.com/a/74463416/2377343

  2. Você pode tentar desativar o ASLR:https://stackoverflow.com/a/76296598/2377343

informação relacionada