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正常工作。
我不知道发生了什么。为什么会这样?

评论

Cygwin很奇怪,并且使用持久共享内存部分。您是否尝试过重启系统?

@GregHewgill:几天以来没有重启。马上就做。

@GregHewgill:解决了。谢谢,也许如果您将其发布为答案,也会对其他人有所帮助。

只是想说这个错误不是特定于git的,在糟糕的日子里,cygwin会以相同的方式在任何可执行文件上崩溃,而没有明显的原因。
OP,您应该将选择的答案更改为@Yirkha的答案,因为那可以解决问题的根本原因。它可能为将来的读者省去了一些徒劳的尝试(就像我发生的那样)。

#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/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替换为副本。

如果遇到任何问题,请以管理员身份运行命令

评论


就我而言,我的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/35538​​9/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

#10 楼

此错误在我的Windows计算机上很少发生。我最终重新启动了计算机,错误消失了。

#11 楼

如果您在PATH中有C:\ MinGW \ bin,则我在LPCXpresso建筑物中遇到了此问题。不知何故,我不得不将其删除以摆脱此问题,因为其他一些MinGW也是如此,如

#12 楼

要解决此问题,我只需让Tortoise Git安装其更新即可。

#13 楼

c:\ msysgit \ bin> rebase.exe -b 0x50000000 msys-1.0.dll

#14 楼

删除旧版本的%USERPROFILE%\ AppData \ Local \ SourceTree \ app-x.x.x对我有用。不确定如何将其连接到命令行git ...