检测到Cygwin / Git错误cygheap碱基错配

时间:2011-11-12 20:25:53

标签: git ssh cygwin

我已经安装了两个带有最新版本的cygwin和git的Windows服务器,并且我正在尝试将git存储库从S1克隆到S2。我可以使用RSA密钥成功地从S2跳到S1,但是当我这样做时: git clone“ssh:// root @ S1 / path / to / my / repo” 它会抛出这个输出:

    Cloning into /cygdrive/c/program files/apache software foundation/apache2.2/htdocs/myfolder...
    2 [main] git 2004 C:/cygwin/lib/git-core/git.exe *** fatal error - cygheap base mismatch detected - 0x61242860/0x6123790.
This problem is probably due to using incompatible versions of the cygwin DLL.
Search fro cygwin1.dll using the WIndows Start->Find/Search facility and delete all bu the most recent version.  The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distrubtion. Rebooting is also suggested if you are unable to find another cygwin DLL.  

--5 more errors like that one --

remote: Counting objects: 3275, done.
remote: Compressing oobjects: 100% (3106/3106), done.
fatal: write error: Broken pipe

所以我遵循了这些指示,但没有运气。有什么建议吗?

14 个答案:

答案 0 :(得分:49)

我遇到了同样的问题。

我只是重新启动我的电脑又恢复了工作。

找到问题的原因并没有帮助,但至少你可以继续工作。

答案 1 :(得分:24)

编辑:我找到了解决方案。

TL; DR:转到 GitHub AppData 文件夹并删除 PortableGit 文件夹,然后重新启动GitHub

  1. 关闭GitHub
  2. 导航到GitHub AppData文件夹: C:\Users\[username]\AppData\Local\GitHub
  3. 删除以PortableGit开头的文件夹,并以字母和数字的随机字符串结尾
  4. 重启GitHub。它将重新提取dll并解决问题!
  5. (原创“回答”) 我尝试了很多东西,但我不知道到底有什么用处。我重新启动GitHub,重新启动计算机,卸载并重新安装GitHub,卸载了我最近安装但最终不需要的其他几个程序,删除了AppData \ Local目录中的GitHub文件夹,下载并安装了cygwin,可能还有其他一些东西我忘了。

    最后一次尝试是在文件资源管理器中找到所有cygwin1.dll文件,并将它们重命名为cygwin1x.dll,然后重新启动计算机。在我这样做之后,它再次起作用。

    我在这里猜对了,但我会说下载并安装cygwin 然后重启我的电脑诀窍。

答案 2 :(得分:21)

没有Cygwin,没有GitHub

我最近才开始体验这一点,上面没有一个答案适用于我的案例 - 我没有安装Cygwin或GitHub。

相反,在我的情况下,Windows安全功能地址空间布局随机化或ASLR创建了此问题。对于不标记自身兼容的程序,默认情况下处于关闭状态 但是,我为所有程序启用了ASLR以增加安全性。缺点是git命令现在不起作用。

解决方案

解决方案是为git可执行文件排除ASLR。因为其中有很多可执行文件,我必须使用PowerShell作为管理员

Get-Item -Path "C:\Program Files\Git\usr\bin\*.exe" | %{ Set-ProcessMitigation -Name $_.Name -Disable ForceRelocateImages }

答案 3 :(得分:10)

您在问题陈述中没有提到这一点,但我假设您运行的是64位版本的Windows。 Cygwin在64位Windows上运行时遇到问题,特别是对于大型程序。我相信这是由于cygwin1.dll支持库中的内存管理问题。看起来它正在做出不可支持的假设,它将永远地并且总是被映射到每个进程中的相同地址,因此它可以在系统范围的全局变量中保留特定于进程的事物(如堆地址)。

在我充裕的空闲时间里,我一直试图追踪有问题的位。在此期间,您可以尝试重新定位cygwin1.dll本身。请注意,这是一个非常复杂的事情,比它需要的更复杂 - 甚至比重新安排所有其他事情更复杂。

答案 4 :(得分:9)

对我来说,原因是,git没有通过cygwin安装,尽管从git-scm定期下载。一旦我运行了cygwin设置,添加了git,它运行得很好。

答案 5 :(得分:5)

您是否因任何其他命令而出现此错误?使用git --version

尝试重新运行Cygwin setup.exe并重新安装cygwin1.dll(软件包是“cygwin”,在“Base”下)和你的git软件包(“devel”下的软件包“git”)并重新启动。

答案 6 :(得分:1)

我知道这是一个旧帖子,但由于这是这个问题的第一个结果,我想添加我的决议,希望它可以帮助其他人。

首先,运行cygcheck PROGRAMM,在我的情况下,我遇到了tar.exe的问题所以我跑了:cygcheck tar cygcheck命令显示了什么DLL是使用

cygcheck中的所有内容都是正确的,所以我根据Jim Schneider的评论决定从64位版本的Cygwin切换到32位版本,这最终解决了我的问题。

答案 7 :(得分:0)

对我来说,问题是存在较旧的C:\ cygwin64文件夹。重命名此文件夹是不够的。当我删除此文件夹时,问题就消失了。删除C:\ cygwin64文件夹后我也无需重启。

答案 8 :(得分:0)

在我的情况下,重新启动计算机无效。

我终于发现它是由于Msys的安装之间的冲突(当我安装命令行git实用程序时安装)。如果您的系统路径包含任何具有Msys版本的目录,请删除此类路径条目,然后重试。看起来cygwin尝试从Msys安装执行可执行文件,而.dll检测到不匹配。

答案 9 :(得分:0)

在我的情况下,环境变量中的PATH是错误的。我在路径中稍早移动了cygwin(确保它在git路径之前设置)。就这样,cygwin dll赞成git dll。

例如; C:\Program Files\Git\usr\bin;C:\cygwin\bin;...的路径 已更改为C:\cygwin\bin;C:\Program Filenter code herees\Git\usr\bin;...

环境是Win7x86,需要重新启动才能使用更新的路径。

答案 10 :(得分:0)

尝试使用以#!/ bin / sh开头的脚本从Visual Studio 2017推送到git repo时,我遇到了相同类型的错误

[repo folder]\.git\hooks\commit-msg

错误消息:

1 [main] sh (11460) c:\program files (x86)\microsoft visual studio\2017\enterprise\common7\ide\commonextensions\microsoft\teamfoundation\team explorer\Git\usr\bin\sh.exe:
 *** fatal error - cygheap base mismatch detected - 0x14DD408/0x12AD408.This problem is probably due to using incompatible versions of the cygwin DLL.
Search for cygwin1.dll using the Windows Start->Find/Search facilityand delete all but the most recent version.
The most recent version *should*reside in x:\cygwin\bin, where 'x' is the drive on which you haveinstalled the cygwin distribution.
Rebooting is also suggested if youare unable to find another cygwin DLL.      

我尝试了以上不同的解决方案,但没有成功

我要解决的问题是从复制内容:

C:\Program Files\Git\usr\bin

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin

我的计算机上的问题来自sh.exe的版本不匹配,复制这些文件可以解决问题

答案 11 :(得分:0)

我通过暂时禁用Windows Defender并重试来解决了此问题,有关详细信息,请参见https://superuser.com/a/1047031/158243

答案 12 :(得分:0)

文本下方的解决方案(对我不起作用但可能可以帮助别人的东西)

将Ruby + Devkit(MSYS2工具链)从2.6.2-1 I更新到2.6.6-2之后 出现cygheap错误,无法继续工作。我试过了 这里提到的一切。可能要花6个多小时才能解决问题。 没事。我已经准备好重新安装Windows。

  • 在磨难中我已经重启了数十次。
  • 我完全删除了Cygwin,系统上没有cygwin1.dll
  • 我重新安装了Git,GithubDesktop,Ruby,并且对MSYS2进行了大量操作。唯一的结果就是学习MSYS可以完全 替换Cygwin-无需使用Cygwin。
  • 对于Settings-> Update & Security-> Windows Security-> App & browser control-> Exploit protection settings-> System settings,我有以下设置设置为“默认关闭”
    • 强制性ASLR(强制重定位未使用/ DYNAMICBASE编译的图像)
    • 自底向上的ASLR(随机分配虚拟内存分配的位置)
    • 高熵ASLR
  • 作为Powershell ISE以管理员身份运行的计算机的唯一所有者和用户,Windows愿意告诉我Requested registry access is not allowed是否尝试运行Get-ProcessMitigationSet-ProcessMitigation。所以那是一个死胡同。
  • I tried to rebaseall the msys64 dlls with (224MB of DLLs)
    cd C:\msys64 && \usr\bin\dash /usr/bin/rebaseall -p -v
    • 在装有64GB VirtualMem的32GB RAM计算机上,它告诉我:
      rebase: Too many DLLs for available address space: Cannot allocate memory
  • 我花了很多时间调整EnvironmentVars System PathUser Path并重新启动。
    • 我了解到当涉及Path变量时,经常重复出现的“用户EnvVars覆盖系统EnvVars”是不正确的。系统路径优先,因为用户路径被附加到系统路径以使$PATH变。
      因此,下一个项目符号是某些人的解决方案,尤其是如果bash无法启动
    • 如果您安装了WSL2(Linux的Windows子系统),则可能是使用C:\Windows\System32\bash.exe而不是C:\Program Files\Git\usr\bin\bash.exe。 Win Bash不能与MSYS,Cygwin或Git-SCM配合使用。
      • 确保在系统路径环境变量中C:\Program Files\Git\bin;位于C:\Windows\system32;之前。以来 通常首先列出system32,C:\Program Files\Git\bin;应该 成为新的第一个条目。
  • 在开始检查$ Path操作及其可能加载的所有内容时,查看了bash加载的所有文件
    • %USERPROFILE%中,有:\.bashrc\.gitconfig\.bash_profile\.profile
    • C:\Program Files\Git\etc中有:\profile.d\profile.d\bash_profile.sh\profile.d\env.sh\bash.bashrc\profile
    • C:\Program Files\Git\usr\etc中,上述内容更多

解决方案

错误消息错误地引用了cygwin1.dll作为问题。 Windows的Git使用MSYS。 MSYS开发人员将文件重命名为msys-2.0.dll,但无法更新错误消息。

  • 找到您计算机上的所有msys-2.0.dll,并将后缀.bkp添加到它们中。
  • 无论在哪里找到它们,都将"C:\Program Files\Git\usr\bin\msys-2.0.dll"复制到这些位置。 VoidTools Everything screenshot of msys-2.0.dlls

确定问题的注释和步骤:

  • 如果您有WSL2,请确保系统路径环境变量中的C:\Program Files\Git\bin;位于C:\Windows\system32;之前。
    • System32应该是第一个系统路径,但是Windows bash.exe在该文件夹中-并且它与MSYS,Cygwin或Git-SCM不能很好地配合使用。要通过Win Bash进行选择,Git Bash必须在列表上更高。
  • 如果您要从C:\msys64\usr\bin\msys-2.0.dll复制到所有其他位置,则最后会丢失该漂亮的附加文本,该文本显示出您位于“ (master)Shows what branch you're on上的分支
    • 如果您决定删除所有多余的dll并仅将C:\msys64\usr\bin添加到路径中,则同样会发生,它所查找的依赖项必须相对于其通常驻留的目录。
  • 要确定cygheap问题,我在运行时用https://docs.microsoft.com/en-us/sysinternals/downloads/listdlls检查了所引用的dll。
    • 在每个步骤的单独窗口中启动一个新的cmd.exe。必须使用确切的路径来确保正确的内容正在加载。
      1. MSYS(cmd.exe窗口#1)
        • 运行set PATH="C:\msys64\usr\bin;"
        • 运行"C:\msys64\usr\bin\bash.exe"
        • 确认/c/msys64/usr/bin/ls.exe"是否有效(bcus应该加载自己的msys-2.0.dll
        • 以下内容引用的是不同的msys-2.0.dll
          • "/c/Program Files/Git/usr/bin/ls.exe"-> cygheap err
          • "/c/cygwin64/bin/ls.exe""-> cygheap err
      2. Cygwin(cmd.exe窗口#2)
        • 运行set PATH="C:\cygwin64\bin;"
        • 运行"C:\cygwin64\bin\bash.exe"
          Cygwin改变了道路。检查echo $path是否正确。
          如果未运行,请运行Path="/cygdrive/c/cygwin64/bin"
        • 确认"/cygdrive/c/cygwin64/usr/bin/ls.exe"有效
        • 以下内容引用的是不同的msys-2.0.dll
          • "/cygdrive/c/msys64/usr/bin/ls.exe"-> cygheap err
          • "/cygdrive/c/Program Files/Git/usr/bin/ls.exe"-> cygheap err
      3. Git Bash(cmd.exe窗口#3)
        • 运行set PATH="C:\Program Files\Git\usr\bin\;"
        • 运行"C:\Program Files\Git\usr\bin\bash.exe"
        • 确认"/c/Program Files/Git/usr/bin/ls.exe"有效
        • 以下内容引用的是不同的msys-2.0.dll
          • "/c/msys64/usr/bin/ls.exe"-> cygheap err
          • "/c/cygwin64/bin/ls.exe"-> cygheap err
      4. Win Bash(cmd.exe窗口#4)
        • "C:\Windows\System32\bash.exe"重复该过程。
        • 在我的计算机上,它甚至无法静默启动。这是我必须在系统路径中的system32之前加载Git Bash的原因之一
    • 打开那些控制台,检查引用的dll
    • 选择一个您想在任何地方使用的工具(最好的git-bash版本IMO)并删除其他工具。

答案 13 :(得分:-21)

由于它是基础不匹配,你可以尝试变基:

git rebase <branch>