Visual Studio 2019 git 问题:“无法生成 ... ssh.exe:没有这样的文件或目录”在 fetch/push 上
Posted
技术标签:
【中文标题】Visual Studio 2019 git 问题:“无法生成 ... ssh.exe:没有这样的文件或目录”在 fetch/push 上【英文标题】:Visual Studio 2019 git problem: "Cannot spawn ... ssh.exe: No such file or directory" on fetch/push 【发布时间】:2021-07-13 01:51:12 【问题描述】:无法让 VS2019 获取/推送到远程(恰好在 GitLab 上)。正确的配置是什么?
我正在使用内置的 Windows 10 OpenSSH (C:\Windows\System32\OpenSSH
)
我已经设置了环境变量GIT_SSH=C:\Windows\System32\OpenSSH\ssh.exe
通过ssh-add
将私钥加载到正在运行的ssh-agent
服务中。
我可以从普通的命令窗口(即,不是 WSL bash shell)推送/获取,让我心满意足。
从 VS2019 开始,在 repo 打开 (Git>Local Repositories>myrepo
) 的情况下,当我尝试 Git>Fetch
或 Git>Push
时,我会在输出窗口中看到以下内容:
Commit eebc0b4a created locally in repository r:\bbits\edu-bitcoin-staging
Opening repositories:
r:\bbits\edu-bitcoin-staging
Pushing master
Pushing to gitlab.com:bakins-bits/edu-bitcoin-staging.git
Error: cannot spawn C:\Windows\System32\OpenSSH\ssh.exe: No such file or directory
Error encountered while pushing to the remote repository: Git failed with a fatal error.
Git failed with a fatal error.
unable to fork
Failed to push to the remote repository. See the Output window for more details.
注意C:\Windows\System32\OpenSSH\ssh.exe: No such file or directory
- 然而,这是正确的路径:
C:\>dir C:\Windows\System32\OpenSSH\ssh.exe
Volume in drive C is P70-MSVC
Volume Serial Number is 8240-9525
Directory of C:\Windows\System32\OpenSSH
10/15/2019 06:50 AM 882,688 ssh.exe
1 File(s) 882,688 bytes
0 Dir(s) 333,358,600,192 bytes free
【问题讨论】:
【参考方案1】:我想我已经设法解决了这里的问题。内置 Windows 10 OpenSSH
是一个 64 位程序。但是在 Visual Studio 中运行的 Git 是 32 位的。 Visual Studio 使用 C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw32\bin"
中的那个(根据您的 VS 版本调整路径)。
问题是,Windows 使用虚拟文件夹来阻止 32 位程序访问 64 位库。因此,如果 32 位应用程序尝试访问 System32
文件夹,则会将其重定向到 SysWOW64
。而且那里没有OpenSSH
。您可以通过尝试从32-bit
powershell 窗口访问OpenSSH
文件夹来模拟:
> cd C:\Windows\System32\OpenSSH\
您要做的是将GIT_SSH
设置为
C:\Windows\SysNative\OpenSSH\ssh.exe
SysNative 是一个虚拟文件夹,它在物理上并不存在于您的系统中。但是通过访问它,程序不会被重定向到SysWOW64
【讨论】:
【参考方案2】:首先检查来自 VS2019 的相同推/拉是否适用于在以下会话中启动的 VS2019:
GIT_SSH
没有设置
ssh.exe
在 %PATH%
中(意思是,在启动 VS2019 之前,“where ssh
”应该先返回 C:\Windows\System32\OpenSSH\ssh.exe
,然后再返回 C:\path\to\Git\usr\bin\ssh.exe
)
我不需要为这些操作设置GIT_SSH
。
【讨论】:
对于此配置,您是否将“Credential helper”保留为“Unset”? @dav 凭证助手?这用于 HTTPS 凭据缓存。只要您使用 SSH URL,就完全不涉及凭证助手。【参考方案3】:使用它来转义“程序文件”中的空间
git config --global core.sshCommand 'C:\\PROGRA~1\\\\Git\\usr\\bin\\ssh.exe'
【讨论】:
以上是关于Visual Studio 2019 git 问题:“无法生成 ... ssh.exe:没有这样的文件或目录”在 fetch/push 上的主要内容,如果未能解决你的问题,请参考以下文章
Azure Visual Studio 2019 无法推送到 Azure DevOps Git
如何在 Visual Studio 2019 中使用 git bash 终端配置文件?
Visual Studio 2019 git 问题:“无法生成 ... ssh.exe:没有这样的文件或目录”在 fetch/push 上
Visual Studio 2017 的多个 Git 存储库
安装了git之后visual studio 2019变得很卡怎么办?(工具 --> 选项 --> 源代码管理工具设置成无)