Já fazia alguns meses desde que usei o git extensivamente no windows a última vez. Essa semana precisei usar e, para minha surpresa, alguma atualização do windows quebrou o git.
Ok, pesquisei bastante e descobri que esse problema não é exclusivo meu e tampouco novo(2016, 2017), mas aparentemente o problema é intermitente. Então, vou compartilhar aqui o erro e a solução:
O problema é o seguinte:
-
Ao tentar executar o bash é apresentada a mensagem de erro:
Error: Could not fork child process: Resource temporarily unavailable (-1).
-
Ao tentar criar uma nova branch ou usar o gitflow, é apresentado o erro:
fatal error - cygheap base mismatch detected - <endereço de memória>.
Esse erro ocorre no windows 10 - 64 e somente se o recurso Force randomization for images (Mandatory ASLR)
estiver ativado (o que é por padrão por motivos de segurança).
A solução então é adicionar os arquivos do bash usados pelo git na exceção desse recurso, mas o número de arquivos é grande e a interface só aceita adicionar os arquivos um a um, então podemos usar o powershell para resolver o problema.
Solução em powershell:
Supondo que o git esteja instalado em C:\Program Files\Git
, o seguinte script adiciona todos os arquivos necessários na exceção do ASLR:
$files = (Get-ChildItem 'C:\Program Files\Git\usr\bin\*.exe').FullName
$files.ForEach({Set-ProcessMitigation $_ -Disable ForceRelocateImages})
Esses comandos são simples, o primeiro cria uma variável $files
com o endereço completo de todos os executáveis da pasta.
O segundo adiciona à lista de exclusão do ASLR os arquivos da variável.
Fonte:
Essa solução foi proposta pelo pessoal do Mintty em 2017 e se mantém útil até hoje, inclusive sendo indicado como solução no issues do git.
Proposição da solução e explicação do ASLR no issues do Mintty
Pessoal sugerindo essa solução no issues do git