Solução para erro no git do windows (Error: Could not fork child process: Resource temporarily unavailable (-1).)

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