Extensões Git: Tudo estava funcionando bem até ontem.
Mas de repente eu recebo esse erro quando tento extrair alguns repositórios 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
Isso está acontecendo para todos os repositórios que eu clonei. Mas, meu git bash está funcionando bem. Eu não tenho ideia do que está acontecendo. Alguma idéia de por que isso está acontecendo?
git
cygwin
git-extensions
Uchia Itachi
fonte
fonte
Respostas:
Cygwin usa seções persistentes de memória compartilhada, que podem ocasionalmente ser corrompidas. O sintoma disso é que alguns programas Cygwin começam a falhar, mas outros aplicativos não são afetados. Como essas seções de memória compartilhada são persistentes, geralmente é necessário reiniciar o sistema para limpá-las antes que o problema possa ser resolvido.
fonte
Eu tive o mesmo problema. Encontrei solução aqui http://jakob.engbloms.se/archives/1403
Para mim, a solução foi um pouco diferente. isso foi
Antes de refazer as DLLs, verifique se ele não está em uso:
E faça um backup:
Se o comando rebase falhar com algo como:
Você precisará executar as seguintes etapas em ordem:
Se algum problema executar os comandos como administrador
fonte
tl; dr: Instale o Git de 64 bits para Windows 2 .
Detalhes técnicos
Esse sintoma, por si só, não tem nada a ver com bases de imagens de executáveis, seções de memória compartilhada do Cygwin corrompidas, versões conflitantes de DLLs etc.
É o código Cygwin que falha ao alocar um pedaço grande de ~ 5 MB de memória para seu heap neste endereço fixo 0x68570000, enquanto apenas um buraco ~ 2,5 MB grande estava aparentemente disponível lá. O código relevante pode ser visto na fonte msysgit .
Por que essa parte do espaço de endereço não é livre?
Pode haver muitas razões. No meu caso, foram alguns outros módulos carregados em um endereço conflitante:
O último endereço seria em torno de 0x68570000 + 5 MB = 0x68C50000, mas existem essas DLLs relacionadas ao WOW64 carregadas de 0x68810000 para cima, que bloqueiam a alocação.
Sempre que houver alguma DLL compartilhada, o Windows em geral tenta carregá-la no mesmo endereço virtual em todos os processos para salvar algum processamento de realocação. É apenas uma questão de má sorte que esses componentes do sistema tenham sido carregados de alguma forma em um endereço conflitante dessa vez .
Por que existe o Cygwin no seu Git?
Porque o Git é uma suíte rica que consiste em alguns comandos de baixo nível e muitos utilitários úteis, e principalmente desenvolvidos em sistemas similares ao Unix. Para poder construí-lo e executá-lo sem reescrever em massa, ele precisa de pelo menos um ambiente parecido com o Unix.
Para conseguir isso, as pessoas inventaram o MinGW e o MSYS - um conjunto mínimo de ferramentas de criação para desenvolver programas no Windows de maneira semelhante ao Unix. O MSYS também contém uma biblioteca compartilhada
msys-1.0.dll
, que ajuda com alguns dos problemas de compatibilidade entre as duas plataformas durante o tempo de execução. E muitas partes foram tiradas do Cygwin, porque alguém já tinha que resolver os mesmos problemas lá.Portanto, não é Cygwin, é a DLL de tempo de execução do MinGW que está se comportando de forma estranha aqui.
No Cygwin, esse código realmente mudou muito desde o que está no MSYS 1.0 - a última mensagem de confirmação desse arquivo diz "Importar Cygwin 1.3.4", que é de 2001!
O Cygwin atual e a nova versão do MSYS - MSYS2 - já possuem uma lógica diferente, o que é esperançosamente mais robusto. São apenas as versões antigas do Git for Windows que ainda foram criadas usando o antigo sistema MSYS quebrado.
Soluções limpas:
Soluções Hacky:
PATH
Às vezes, alterar pode funcionar porque pode haver versões diferentes de versõesmsys-1.0.dll
diferentes do Git ou de outros aplicativos baseados em MSYS, que talvez usem endereços diferentes, tamanhos diferentes desse heap etc.msys-1.0.dll
pode ser um desperdício de tempo, porque 1) como uma DLL, já possui informações de realocação e 2) "em qualquer versão do sistema operacional Windows, não há garantia de que uma (...) DLL sempre seja carregada no mesmo espaço de endereço" de qualquer maneira ( fonte ). A única maneira de ajudar é se omsys-1.0.dll
próprio carregamento no endereço conflitante que está tentando usar. Aparentemente, esse é o caso algumas vezes, pois é isso que os caras do Git for Windows estão fazendo automaticamente em sistemas de 32 bits .msys-1.0.dll
binário para usar um valor diferente_cygheap_start
e isso resolveu o problema imediatamente.fonte
cmder/vendor/git-for-windows
diretório e renomeei a pasta antiga paragit-for-windows-x86
. Se você abrircmder/vendor/git-for-windows
, verá uma pastamingw32
, que é sua pista de que você está usando 32 bits. No x64 Git, você verá uma pastamingw64
.Versão muito simples da solução rebase:
Vá para a pasta em que o git está instalado, como:
Mantendo Shift e clique com o botão direito do mouse na pasta, você poderá abrir um prompt de comando como administrador (graças a https://stackoverflow.com/users/355389/darren-lewis pelo comentário),
Então corra:
Isso foi corrigido para mim quando a abordagem de reinicialização não funcionou.
Espero que ajude.
fonte
Eu vi a mesma mensagem de erro após atualizar para o git1.8.5.2:
Basta fazer uma pesquisa por tudo
msys-1.0.dll
no seuC:\
disco e fazer com que o usado pelo Git seja o primeiro.Por exemplo, no meu caso, simplesmente mudei a ordem de:
Ao fazer o caminho do Git
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\
vir em primeiro lugar no meu%PATH%
, a mensagem de erro desapareceu.Não há necessidade de reiniciar ou alterar a sessão do DOS.
Depois que ele
%PATH%
é atualizado nessa sessão do DOS, os comandos git simplesmente funcionam.Observe que carmbrester e Sixto Saez relatam abaixo (nos comentários) ter que reiniciar para corrigir o problema.
Nota: Primeiro, também remova qualquer um
msys-1.0.dll
, como um%LOCALAPPDATA%
fonte
Se uma reinicialização não corrigir o problema (como sugerido pela resposta de Greg Hegwill), verifique o PATH quanto a instalações conflitantes do msys-1.0.dll (e possivelmente outras DLLs relacionadas).
Na minha situação específica, a instalação do msys do MinGW possui uma cópia dessa DLL em seu
bin
diretório (<MinGW_Install_Path>\msys\1.0\bin
) e foi listada no PATH. Ocmd
diretório do Git estava listado no PATH, masbin
não estava. (A versão do msys-1.0.dll do Git está nobin
diretório. Aparentemente, a instalação padrão do MSys-Git não a adicionabin
ao PATH.)Uma correção temporária foi adicionar o
bin
diretório do Git ao PATH para que ele apareça antes dos caminhos do MinGW. (Uma correção mais permanente provavelmente envolverá a separação dos conflitos de caminho entre os msys do MinGW e os do Git e / ou a remoção das instalações duplicadas do msys.)fonte
Só quero compartilhar minha experiência aqui. Me deparei com o mesmo problema durante a compilação cruzada para a plataforma MTK em uma máquina Windows de 64 bits. MinGW e MSYS estão envolvidos no processo de construção e esse problema surgiu. Eu resolvi alterando o
msys-1.0.dll
arquivo. Nem arebase.exe
reinicialização do sistema funcionou para mim.Como não há rebase.exe instalado no meu computador. Instalei o cygwin64 e usei o
rebase.exe
interior:Embora o rebasing parecesse bem-sucedido, o erro permaneceu. Então executei o
rebase
comando dentro do terminal Cygwin64 e obtive um erro:Mais tarde, tentei um endereço de casal, mas nenhum deles funcionou. Acabei alterando o
msys-1.0.dll
arquivo e resolvi o problema.fonte
Encontrei isso hoje. Liderado pela resposta de Greg Hewgill, observei os processos em execução no meu sistema para ver se alguma coisa estava "travada" ou se outros usuários estavam conectados à máquina fazendo algo com o git. Lancei o cygwin (instalado separadamente) nesta máquina em particular. Lançou ok. Fechei e tentei as extensões Git novamente (eu estava tentando uma operação pull) e funcionou. Não tenho certeza se o lançamento do cygwin limpou algo que foi compartilhado, mas esta é a primeira vez que encontrei esse erro e isso pareceu corrigi-lo.
fonte
Eu tive o mesmo problema, após algumas falhas e atualizações do Windows 8.0, no msys git 1.9. Não encontrei nenhum msys / git no caminho, apenas o adicionei nas configurações de ambiente do usuário local do Windows. Funcionou sem reiniciar.
Basicamente, semelhante ao RobertB, mas eu não tinha nenhum git / msys no meu caminho.
Btw:
Tentei usar rebase -b blablabla msys.dll, mas o erro "ReBaseImage (msys-1.0.dll) falhou com o último erro = 6"
se você precisar disso rapidamente e não tiver tempo para depurar, observei "Git Bash.vbs" no diretório Git, que inicia com êxito o bash shell.
fonte
c:\Program Files (x86)\Git\bin
ao caminho e agora estou dourado.Este erro ocorre muito raramente na minha máquina Windows. Acabei reiniciando a máquina e o erro desapareceu.
fonte
Eu encontrei esse problema com o LPCEXpresso building.if você possui o C: \ MinGW \ bin no PATH. de alguma forma eu tive que removê-lo para me livrar desse problema, já que outros MinGW gostam também
fonte
Para corrigir esse problema, deixei o Tortoise Git instalar sua atualização.
fonte
c: \ msysgit \ bin> rebase.exe -b 0x50000000 msys-1.0.dll
fonte
A exclusão da versão antiga de% USERPROFILE% \ AppData \ Local \ SourceTree \ app-xxx funcionou para mim. Não sei como ele foi conectado à linha de comando git ...
fonte