我已经安装了两个带有最新版本的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
所以我遵循了这些指示,但没有运气。有什么建议吗?
答案 0 :(得分:49)
我遇到了同样的问题。
我只是重新启动我的电脑又恢复了工作。
找到问题的原因并没有帮助,但至少你可以继续工作。
答案 1 :(得分:24)
TL; DR:转到 GitHub AppData 文件夹并删除 PortableGit 文件夹,然后重新启动GitHub
C:\Users\[username]\AppData\Local\GitHub
PortableGit
开头的文件夹,并以字母和数字的随机字符串结尾(原创“回答”)
我尝试了很多东西,但我不知道到底有什么用处。我重新启动GitHub,重新启动计算机,卸载并重新安装GitHub,卸载了我最近安装但最终不需要的其他几个程序,删除了AppData \ Local目录中的GitHub文件夹,下载并安装了cygwin,可能还有其他一些东西我忘了。
最后一次尝试是在文件资源管理器中找到所有cygwin1.dll文件,并将它们重命名为cygwin1x.dll,然后重新启动计算机。在我这样做之后,它再次起作用。
我在这里猜对了,但我会说下载并安装cygwin 然后重启我的电脑诀窍。
答案 2 :(得分:21)
我最近才开始体验这一点,上面没有一个答案适用于我的案例 - 我没有安装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-ProcessMitigation
或Set-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 Path
和User 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"
复制到这些位置。
C:\Program Files\Git\bin;
位于C:\Windows\system32;
之前。
bash.exe
在该文件夹中-并且它与MSYS,Cygwin或Git-SCM不能很好地配合使用。要通过Win Bash进行选择,Git Bash必须在列表上更高。C:\msys64\usr\bin\msys-2.0.dll
复制到所有其他位置,则最后会丢失该漂亮的附加文本,该文本显示出您位于“ (master)
” 上的分支
C:\msys64\usr\bin
添加到路径中,则同样会发生,它所查找的依赖项必须相对于其通常驻留的目录。cygheap
问题,我在运行时用https://docs.microsoft.com/en-us/sysinternals/downloads/listdlls检查了所引用的dll。
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 set PATH="C:\cygwin64\bin;"
"C:\cygwin64\bin\bash.exe"
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 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 "C:\Windows\System32\bash.exe"
重复该过程。listdlls -r bash
msys-2.0.dll
)listdlls -r -v -d msys-2.0.dll
答案 13 :(得分:-21)
由于它是基础不匹配,你可以尝试变基:
git rebase <branch>