VSCode + WSL Remote + Git:同步更改需要永远

问题描述 投票:0回答:5

我正在远程使用 VSCode 进入位于 WSL 2 VM 中(符号链接)的项目文件夹。我使用 SSH 和终端从 Bitbucket 克隆了我的存储库。

在左下角,它指示

WSL: Ubuntu
,所以我目前正在远程使用它。一切都好
如果我单击 Git 分支指示器,我可以看到本地分支和远程分支。一切都好

问题是当我在本地提交后单击同步所有内容时,它会永远旋转。好吧,不是真的,我在永远发生之前失去了耐心......目前当前测试大约 30 分钟。

如果我

git push
进入终端,一切都会按预期进行。

有人知道为什么要这样做吗?我该如何解决这个问题?

我的 Git 输出到 VSCode 中不断返回这个

git rev-parse --show-toplevel

我对 user.name 和 user.email 都做了
git config

SSH 密钥在 Bitbucket 上设置。 Windows 和 WSL 2 使用相同的公钥/私钥。

谢谢你

git visual-studio-code windows-subsystem-for-linux
5个回答
11
投票

2021-02-05 更新

这个问题最近得到了很多人的关注,我觉得我需要给出更彻底的解释。最初的答案是在 WSL 2 仍处于测试阶段时编写的。现在一切都已发展,从 SSH 密钥中删除密码可能会导致一些漏洞。因此,在进一步讨论之前,请先看一下这篇文章 可以使用带有空密码的 SSH 密钥吗?

问问自己删除它是否安全。

不知道原来的问题是否还有问题。在我写完这个问题后不久,我就放弃了 WSL for Web dev。

原答案

我解决了我的问题。因此,对于那些想要尝试 WSL 2 并遇到此问题的人来说,问题在于 SSH 密钥的密码。

https://code.visualstudio.com/docs/remote/troubleshooting#_resolving-hangs-when-doing-a-git-push-or-sync-on-an-ssh-host

解决在 SSH 主机上执行 Git 推送或同步时挂起的问题
如果使用 SSH 克隆 Git 存储库并且 SSH 密钥有密码,则 VS Code 的拉取和同步功能可能会在远程运行时挂起。

使用不带密码的 SSH 密钥、使用 HTTPS 克隆或从命令行运行 git push 来解决该问题。

如果您想删除密码,请使用此问题中提到的

$ ssh-keygen -p
https://stackoverflow.com/a/112409/5543999


1
投票

您还可以使用 ssh-agent 来解决此问题。

将以下内容添加到您的 ~/.bashrc 中,每当您打开终端时,系统都会提示您解锁密钥(如果未解锁)。

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

来源:https://docs.github.com/en/github/authenticating-to-github/working-with-ssh-key-passphrases#auto-launching-ssh-agent-on-git-for-windows

此外,您可以按如下方式配置添加到 ssh-agent 的密钥的过期时间 - https://unix.stackexchange.com/questions/122511/configuring-the-default-timeout-for-the-ssh-agent


0
投票

宁愿从命令行进行推送和拉取,也不愿删除密码!


0
投票

将您添加到 VS Code 中的 Github 相关扩展一一删除。然后你就会看到它工作了。


0
投票

在这种情况下,删除密码是最简单的选择,但您也可以查看相关问题:

microsoft/vscode-remote-release
问题2369

它包括由 Elsie Hupp 发现的最近的解决方法(2021 年 2 月):

我找到了一个潜在的解决方法:SSH 代理转发

在 SSH 配置中,对于远程 VS Code 主机,添加以下内容:

    ForwardAgent yes

(缩进很重要。)

对我来说,使用 VS Code 设置为 SSH 的主机称为 alpha,因此文件的部分如下所示:

Host alpha
    ForwardAgent yes

如果您想对所有远程主机执行此操作,您可以将其添加到

Host *
部分(尽管这显然是一个边际安全风险):

Host *
    ForwardAgent yes

它的作用是使用您用来连接到远程主机的 SSH 代理,并为来自远程的任何 SSH 连接(例如连接到 Git)回收 SSH 密钥。
因为当您连接到 VS Code 远程时,VS Code 会很高兴地提示您输入 SSH 密钥的密码,因此您可以在初次连接时输入密码,而无需在与 Git 交互时重新输入。

显然,在代理转发时您可以使用多个本地 SSH 密钥,但我无法对此进行测试。一般来说,我还无法测试这一点,但它似乎很有希望。


alexisbg 在同一期中添加

为了解决这个问题,我为

ssh-add
创建了一个包装器,我想分享:
ssh-agent-add-id

它不会每次都提示输入密码,而是检查密钥是否已添加到 SSH 代理。

它可以与打开工作区时触发的 VS Code 任务集成,使用

"runOn": "folderOpen"
属性。
如果需要,它将在新的终端面板中提示输入密码。
如果没有,面板将自动关闭。

© www.soinside.com 2019 - 2024. All rights reserved.