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>FetchGit>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变得很卡怎么办?(工具 --> 选项 --> 源代码管理工具设置成无)

如何解决 Visual Studio 2019 中的这个 dll 缺失问题?