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

时间:2019-09-19 19:04:23

标签: git visual-studio-code windows-subsystem-for-linux

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

在左下角,它指示 while (sc.hasNext()) { String queryWord = sc.next(); int qValue = 0; for(char c : queryWord.toCharArray()) { qValue += map.get(c); } if(qValue > sValue && qValue < eValue) { System.out.println("inside"); } else if(qValue > sValue && qValue > eValue) { System.out.println("before"); } else { System.out.println("after"); } } ,所以我目前正在远程使用它。一切都好
如果单击Git分支指示器,则可以看到本地分支和远程分支。一切都很好

问题是,当我单击以同步本地提交后的所有内容时,它将永久旋转。好吧,不是真的,我失去了耐心,直到永远发生……目前,当前测试大约需要30分钟。

如果我将WSL: Ubuntu插入终端,一切都会按预期进行。

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

我在VSCode中输出的Git不断返回此git push吗?
我为user.name和user.email做了git rev-parse --show-toplevel
在Bitbucket上设置了SSH密钥。 Windows和WSL 2使用相同的公用/专用密钥。

谢谢

4 个答案:

答案 0 :(得分:0)

我解决了我的问题。因此,对于那些想尝试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 :(得分:0)

相反,只需删除命令行中的推拉命令即可!

答案 2 :(得分:0)

您还可以使用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

答案 3 :(得分:0)

在这种情况下,删除密码是最简单的选择,但您也可以查看相关问题:microsoft/vscode-remote-release issue 2369

它包含由 recent workaround 发现的 Elsie Hupp(2021 年 2 月):

<块引用>

我想出了一个潜在的解决方法:SSH Agent Forwarding

在您的 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 密钥,但我无法对此进行测试。总的来说,我还没有能够对此进行测试,但看起来很有希望。