git – Git扩展:Win32错误487:无法为cygwin的堆保留空间,Win32错误0
git – Git扩展:Win32错误487:无法为cygwin的堆保留空间,Win32错误0
问题:
Git扩展:直到昨天一切正常。
但是当我尝试使用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
我克隆的所有存储库都在发生这种情况。 但是,我的git bash运行正常。 我不知道发生了什么。 知道为什么会这样吗?
Git Extensions: Everything was working fine until yesterday.But suddenly I am get this error when I try to pull some repositories using git extensions
It is happening for all the repositories which I have cloned.But, my git bash is working fine.I don’t have any idea what is going on.Any idea as to why this is happening?
解决方案:
方案1:
我有同样的问题。 我在这里找到了解决方案http://jakob.engbloms.se/archives/1403
c:\msysgit\bin>rebase.exe -b 0x50000000 msys-1.0.dll
对我而言,解决方案略有不同。 它是
C:\Program Files (x86)\Git\bin>rebase.exe -b 0x50000000 msys-1.0.dll
在重新确定dll的基础之前,应确保未使用它:
tasklist /m msys-1.0.dll
并进行备份:
copy msys-1.0.dll msys-1.0.dll.bak
如果rebase命令失败并显示类似以下内容:
ReBaseImage(msys-1.0.dll)失败,最后一个错误= 6
您需要按顺序执行以下步骤:
- 将dll复制到另一个目录
- 使用上面的命令对副本进行重新设置
- 用副本替换原始dll。
如果有任何问题,请以管理员身份运行命令
方案2:
Cygwin使用永久共享内存部分,该部分有时可能会损坏。 其症状是某些Cygwin程序开始失败,但其他应用程序不受影响。 由于这些共享内存部分是持久性的,因此通常需要重新引导系统才能清除它们,然后才能解决问题。
方案3:
tl; dr: 为Windows 2安装64位Git 。
技术细节
0 [main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x68570000, RegionSize 0x2A0000, State 0x10000
PortableGit\bin\bash.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0
这种症状本身与可执行文件的映像库,Cygwin的共享内存部分损坏,DLL的版本冲突等无关。
Cygwin代码无法在此固定地址0x68570000为其堆分配约5 MB的大内存块,而那里显然只有约2.5 MB的空洞。 相关代码可以在msysgit源代码中看到。
为什么地址空间的那部分不空闲?
可能有很多原因。 就我而言,这是在冲突的地址处加载了其他一些模块:
最后一个地址约为0x68570000 + 5 MB = 0x68C50000,但是从0x68810000向上加载的这些与WOW64相关的DLL阻止了分配。
只要有共享的DLL,Windows通常都会尝试在所有进程中将其加载到相同的虚拟地址,以节省一些重定位处理。 不幸的是,这些系统组件这次以某种方式加载到了一个有冲突的地址。
为什么您的Git中存在Cygwin?
因为Git是一个丰富的套件,由一些底层命令和许多有用的实用程序组成,并且大多是在类Unix系统上开发的。 为了能够在不进行大量重写的情况下构建并运行它,它至少需要一个类似Unix的局部环境。
为此,人们发明了MinGW和MSYS-一套最小的构建工具,用于以类似Unix的方式在Windows上开发程序。 MSYS还包含一个共享库msys-1.0.dll
,它可以解决运行时两个平台之间的一些兼容性问题。 而且其中很多部分都取自Cygwin,因为有人必须在那里解决相同的问题。
因此,这不是Cygwin,这是MinGW的运行时DLL引起的。
在Cygwin中,此代码实际上已发生了很大变化,因为MSYS 1.0中的内容已更改-该文件的最后一条提交消息为“ Import Cygwin 1.3.4”,这是从2001年开始的!
当前的Cygwin和新版本的MSYS -MSYS2-都已具有不同的逻辑,希望它更健壮。 这只是Git for Windows的旧版本,仍然使用旧的损坏的MSYS系统构建。
清洁解决方案:
- 安装适用于Windows 2的 Git-它是由正确维护的新MSYS2构建而成 ,还具有许多新功能,大量错误修复,安全性改进等。 如果可能的话,也建议使用64位版本 。 但是对于32位系统,在后台自动执行了变基解决方法 ,因此在那里发生问题的机会也应该更低。
- 只需重新启动计算机以清理地址空间(将这些模块加载到其他随机地址)可能会起作用,但实际上,只需升级到Windows 2的Git即可获得安全修复程序。
hacky解决方案:
- 更改
PATH
有时可以起作用,因为在不同版本的Git或其他基于MSYS的应用程序中可能存在不同版本的msys-1.0.dll
,它们可能使用不同的地址,此堆的不同大小等。 - 重新设置
msys-1.0.dll
可能会浪费时间,因为1)作为DLL,它已经具有重定位信息,以及2)“在任何版本的Windows OS中,无法保证将始终加载(…)DLL在相同的地址空间”( 来源 )。 唯一有帮助的方法是,如果msys-1.0.dll
本身加载在要使用的冲突地址上。 显然有时候是这样,因为Windows的Git正是在32位系统上自动执行的操作 。 - 考虑到以上情况,我本来二进制修补的结果
msys-1.0.dll
二进制来使用不同的值_cygheap_start
并立即解决的问题。
方案4:
变基解决方案的非常简单的验证:
转到安装了git的文件夹,例如:
C:\Program Files (x86)\Git\bin
通过按住shift键并右键单击该文件夹,您应该可以从此处以管理员身份打开命令提示符(感谢https://stackoverflow.com/users/355389/darren-lewis的评论),
然后运行:
rebase.exe -b 0x50000000 msys-1.0.dll
当重启方法不起作用时,这为我修复了该问题。
希望能帮助到你。
方案5:
升级到git1.8.5.2后,我看到了相同的错误消息:
只需在C:\\
驱动器上搜索所有msys-1.0.dll
,然后让Git使用的文件优先出现即可。
例如,就我而言,我只是更改了以下顺序:
C:\prgs\Gow\Gow-0.7.0\bin\msys-1.0.dll
C:\prgs\git\PortableGit-1.8.5.2-preview20131230\bin\msys-1.0.dll
通过使Git路径C:\\prgs\\git\\PortableGit-1.8.5.2-preview20131230\\bin\\
首先出现在我的%PATH%
,错误消息消失了。
无需重新启动,甚至不需要更改DOS会话。
在该DOS会话中更新%PATH%
,git命令就可以使用了。
请注意, carmbrester和Sixto Saez均在下面的报告中(在评论中)必须重新启动才能解决此问题。
注意:首先,还要删除所有msys-1.0.dll
,例如%LOCALAPPDATA%
一个。
方案6:
如果重新启动不能解决问题(如Greg Hegwill的回答所建议),则请检查您的PATH中是否存在与msys-1.0.dll(以及其他相关DLL)冲突的安装。
在我的特定情况下,MinGW的msys安装在其bin
目录( <MinGW_Install_Path>\\msys\\1.0\\bin
)中具有该DLL的副本,并且该副本在PATH中列出。 Git的cmd
目录在PATH中列出,但其bin
不在其中。 (Git的msys-1.0.dll版本位于bin
目录中。显然,MSys-Git的默认安装不会将其bin
添加到PATH。)
暂时的解决方法是将Git的bin
目录添加到PATH,以便它出现在MinGW的路径之前。 (一个更永久的修复程序可能涉及解决MinGW的msys与Git的路径冲突和/或删除重复的msys安装。)
方案7:
只想在这里分享我的经验。 在Windows 64位计算机上为MTK平台进行交叉编译时,我遇到了相同的问题。 MinGW和MSYS参与了构建过程,并且此问题突然出现。 我通过更改msys-1.0.dll
文件解决了该问题。 rebase.exe
和系统重新启动都不适合我。
由于我的计算机上没有安装rebase.exe。 我安装了cygwin64,并在其中使用了rebase.exe
:
C:\cygwin64\bin\rebase.exe -b 0x50000000 msys-1.0.dll
尽管重新设置看起来很成功,但错误仍然存在。 然后我在Cygwin64终端中运行了rebase
命令,并得到一个错误:
$ rebase -b 0x50000000 msys-1.0.dll
rebase: Invalid Baseaddress 0x50000000, must be > 0x200000000
后来我尝试了几个地址,但都不起作用。 因此,我最终更改了msys-1.0.dll
文件,它解决了该问题。
方案8:
我今天遇到了这个。 在格雷格·休吉尔(Greg Hewgill)的回答的带领下,我查看了系统上正在运行的进程,以查看是否有任何东西“卡住”,或者其他用户是否已使用git登录到计算机中。 然后,我在这台特定的计算机上启动了cygwin(单独安装)。 它启动确定。 我关闭了它,然后再次尝试了Git扩展(我正在尝试拉操作),并且它起作用了。 不知道cygwin的启动是否清除了共享的东西,但这是我第一次遇到此错误,这似乎为我解决了。
方案9:
在Windows 8.0崩溃和更新后,在msys git 1.9上,我遇到了同样的问题。 我在路径中没有找到任何msys / git,因此我将其添加到Windows本地用户环境设置中。 它没有重新启动就可以工作。
基本上,它类似于RobertB,但是我的路径中没有 git / msys。
顺便说一句:
我尝试使用rebase -b blabla msys.dll,但出现错误“ ReBaseImage(msys-1.0.dll)失败,最后一个错误= 6”
如果您需要快速并且没有时间调试,我会注意到Git目录中的“ Git Bash.vbs”成功启动了bash shell。
方案10:
此错误在我的Windows计算机上很少发生。 我最终重启了机器,错误消失了。
方案11:
如果您在PATH中有C:\\ MinGW \\ bin,则我在LPCEXpresso building中遇到了此问题。 我不得不删除它以摆脱这个问题,因为其他一些MinGW也基于
方案12:
要解决此问题,我只需让Tortoise Git安装其更新即可。
方案13:
c:\\ msysgit \\ bin> rebase.exe -b 0x50000000 msys-1.0.dll
方案14:
删除旧版本的%USERPROFILE%\\ AppData \\ Local \\ SourceTree \\ app-xxx对我有用。 不确定如何将其连接到命令行git …