但是当我尝试使用
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正常工作。
我不知道发生了什么。为什么会这样?
#1 楼
Cygwin使用永久共享内存部分,该部分有时可能会损坏。其症状是某些Cygwin程序开始失败,但其他应用程序不受影响。由于这些共享内存部分是持久性的,因此通常需要重新引导系统才能清除它们,然后才能解决问题。评论
万一它对任何人都有帮助,我将PATH中的GitExtensions位移到了第一位,这似乎为我解决了这个问题。 (我把git / cmd放在第二位-不知道这是否是它的一部分)。比重新启动或.dll改组容易一些。
– jinglesthula
16 Dec 2'在19:04
没有可执行文件可以终止以释放内存吗?完全重新引导系统似乎有点过头了。另外,下面的答案(stackoverflow.com/a/31970708/88409)解释了问题的实质,它与损坏的内存无关。
– Triynko
17年2月13日在15:48
#2 楼
我有同样的问题。我在这里找到了解决方案http://jakob.engbloms.se/archives/1403c:\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替换为副本。
如果遇到任何问题,请以管理员身份运行命令
评论
就我而言,我的rebase.exe位于/ mingw下的子目录中,因此该命令最终为:c:/ msysgit / mingw / bin / rebase -b 0x50000000 msys-1.0.dll,当我在c中运行它时: / msysgit / bin目录。
– Robert Oschler
14年7月14日在2:21
我混这个错误ReBaseImage(msys-1.0.dll)失败,最后一个错误= 6
–TheJKFever
14年7月16日在22:31
@TheJKFever您需要以管理员身份在命令提示符下运行它,因为它将修改msys-1.0.dll。首先对dll进行备份,将其复制到msys-1.0.dll.bak,然后以管理员身份运行命令。它为我工作。
– Nikolaos Georgiou
2014年8月5日在7:15
Windows 8.1告诉我尝试重新设置基准时无法在此PC上运行此可执行文件
–朱尔斯·格林
2015年3月7日在6:34
我在Win10 64位Pro上没有rebase.exe,但是调用以下命令就可以了(VS2010):“ C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 \ editbin.exe “ / REBASE:BASE = 0x50000000 msys-1.0.dll
– PaulBußmann
17年5月5日在9:06
#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,但是有这些WOW64-从0x68810000向上加载的相关DLL会阻止分配。
只要有一些共享的DLL,Windows通常都会尝试在所有进程中的相同虚拟地址处加载它,以节省一些重定位处理。不幸的是,这些系统组件这次以某种方式在冲突的地址加载了。
为什么Git中存在Cygwin?
因为Git是一个丰富的套件,由一些底层命令和许多有用的实用程序组成,并且大多在类Unix系统上开发。为了能够在不进行大量重写的情况下构建并运行它,它至少需要部分类似Unix的环境。
为了实现这一点,人们发明了MinGW和MSYS-最少的构建在Windows上以类Unix方式开发程序的工具。 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系统构建。
清洁解决方案:
为以下版本安装Git Windows 2 –它是用正确维护的新MSYS2构建的,还具有许多新功能,大量错误修复,安全性改进等。如果可能的话,也建议使用64位版本。但是对于32位系统,变基解决方法是在幕后自动执行的,因此发生此问题的可能性也应降低。
只需重新启动计算机即可清理地址空间(以不同的随机方式加载这些模块)地址)可能有用,但实际上,只需升级到Windows 2的Git即可获得安全修复程序。
骇人的解决方案:
更改
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
使用不同的值,并立即解决了问题。评论
感谢您的好奇评论!事实证明,它已经以一种或另一种方式修复了一段时间,并且正确的解决方案似乎是将Git用于基于MSYS2的Windows 2(以及更新的Cygwin代码)。
–伊尔卡
15年8月18日在4:43
谢谢,很高兴知道。我正在使用git-extensions捆绑的版本,不管是什么。重新启动已修复它,因此我将忽略它,直到更新结束。 :-)
–蒂姆·阿贝尔
15年8月18日在8:51
完善的,有据可查的答案!并针对此问题找到适当的永久解决方案,而不是当前接受的答案。
–SørenBoisen
2015年12月9日,11:01
关于这个问题的更多细节-github.com/git-for-windows/git/wiki/32-bit-issues
–库纳尔
17年4月12日在20:05
Windows的x64 Git为我和cmder工作。谢谢!这一直让我发疯,尤其是与cmder一起工作时。我基本上将x64 Git文件夹复制到cmder / vendor / git-for-windows目录,并将旧文件夹重命名为git-for-windows-x86。如果打开cmder / vendor / git-for-windows,将会看到mingw32文件夹,这是您使用32bit的线索。在x64 Git中,您会看到一个文件夹mingw64。
– cmeza
17年8月7日在20:44
#4 楼
变基解决方案的非常简单的版本:转到安装git的文件夹,例如:
C:\Program Files (x86)\Git\bin
按住shift并向右单击该文件夹,您应该可以从那里以管理员身份打开命令提示符(感谢https://stackoverflow.com/users/355389/darren-lewis的评论),
然后运行:
rebase.exe -b 0x50000000 msys-1.0.dll
当重新启动方法不起作用时,此问题为我修复。
希望它会有所帮助。
评论
为我工作。只要确保您以管理员身份运行命令提示符即可。
–达伦·刘易斯(Darren Lewis)
16-2-3在14:29
这对我也有用,请注意,我不知道您如何可以右键单击并将cmd.exe加载为admin,所以我从启动处右键单击启动cmd.exe,然后选择以admin身份启动start,然后将cd插入目录,然后运行命令。有效!
– edencorbin
17年5月5日在18:00
#5 楼
升级到git1.8.5.2后,我看到了相同的错误消息:只需在
msys-1.0.dll
驱动器上搜索所有C:\
,然后让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%
中的一个评论
我在路径中的其他任何地方都没有msys-1.0.dll,但是看起来您就在那儿-在列表中将路径的git部分移到更高位置确实为我解决了问题。谢谢你! -厌倦了重新启动修复。
– carmbrester
2014年1月28日在21:19
我的“额外” msys-1.0.DLL文件在C:\ Users \中,您的登录名\ AppData \ Local来自另一个应用程序。删除该应用程序并重新启动对我来说解决了这个问题
– Sixto Saez
2014-09-25 16:46
@SixtoSaez有趣。我已经编辑了答案,使重新启动步骤更加明显。
–VonC
2014年9月25日下午16:51
可能还需要重新启动的用户才需要这样做(与错误的DLL加载不同的问题)
–乔治·比尔比利斯(George Birbilis)
2015年11月29日15:50
#6 楼
如果重新启动不能解决问题(如Greg Hegwill的回答所建议),则检查PATH是否存在与msys-1.0.dll(以及其他相关DLL)冲突的安装。在在特殊情况下,MinGW的msys安装在其
bin
目录(<MinGW_Install_Path>\msys.0\bin
)中具有该DLL的副本,并且该副本在PATH中列出。 Git的cmd
目录在PATH中列出,但没有列出。 (Git的msys-1.0.dll版本位于bin
目录中。显然,MSys-Git的默认安装不会将其bin
添加到PATH中。)临时修补程序是添加Git的
bin
目录到PATH,以便它出现在MinGW的路径之前。 (一个更永久的修复程序可能涉及清理MinGW的msys与Git的路径冲突和/或删除重复的msys安装。)评论
重新启动并没有为我修复它!路径中确实有一些重复的条目。 Tks很多。
– Reginaldo Santos
16-10-20在14:01
#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 Extensions(我尝试了一次pull操作),它成功了。不知道cygwin的启动是否清除了共享的东西,但这是我第一次遇到此错误,这似乎可以解决我的问题。#9 楼
在Windows 8.0崩溃和更新后,在msys git 1.9上,我遇到了同样的问题。我在路径中没有找到任何msys / git,因此我将其添加到Windows本地用户环境设置中。它没有重启就可以工作。基本上类似于RobertB,但是我的路径中没有git / msys。
Btw:
我尝试使用rebase -b bla mbla.sys,但出现错误“ ReBaseImage(msys-1.0.dll)失败,最后一个错误= 6”。
如果您需要此功能并且没有时间调试,我会注意到“ Git目录中的“ Git Bash.vbs”成功启动bash shell。
评论
我的情况也一样。重新设置为管理员失败。在路径中添加了c:\ Program Files(x86)\ Git \ bin,现在我很高兴。
–乔恩·克罗威尔
15年3月30日在16:01
评论
Cygwin很奇怪,并且使用持久共享内存部分。您是否尝试过重启系统?@GregHewgill:几天以来没有重启。马上就做。
@GregHewgill:解决了。谢谢,也许如果您将其发布为答案,也会对其他人有所帮助。
只是想说这个错误不是特定于git的,在糟糕的日子里,cygwin会以相同的方式在任何可执行文件上崩溃,而没有明显的原因。
OP,您应该将选择的答案更改为@Yirkha的答案,因为那可以解决问题的根本原因。它可能为将来的读者省去了一些徒劳的尝试(就像我发生的那样)。