VSCode + WSL远程+ Git:同步更改需要很长时间

nwlls2ji  于 2023-02-11  发布在  Git
关注(0)|答案(5)|浏览(208)

我正在使用VSCode远程到我的项目文件夹位于(符号链接)到WSL 2 VM。我克隆了我的repo从Bitbucket使用SSH和终端。
在左下角,它指示WSL: Ubuntu,所以我目前正在远程使用它。
如果我点击Git分支指示符,我可以看到本地分支和远程分支。

问题是当我在本地提交后点击同步所有内容时,它会永远旋转。嗯,不完全是,我在永远发生之前失去了耐心...目前在当前测试中大约需要30分钟。

如果我在终端中执行git push,那么一切都会按预期进行。
有人知道它为什么会这样吗?我该怎么解决这个问题?
我的Git输出到VSCode时总是返回git rev-parse --show-toplevel
我为www.example.com和www.example.com都做了git configuser.nameuser.email
SSH密钥设置在Bitbucket上。Windows和WSL 2使用相同的公钥/私钥。
"谢谢你"

lrl1mhuk

lrl1mhuk1#

    • 2021年2月5日更新**

这个问题最近引起了很多人的关注,我觉得我需要给出一个更彻底的解释。最初的答案是在WSL2还处于beta测试阶段时写的。现在一切都已经发展了,从SSH-Key中删除密码可能会导致一些漏洞。所以,在进一步讨论这个问题之前,先看看这篇文章Is it okay to use a SSH key with an empty passphrase?
问问你自己把它取下来是否安全。
我不知道最初的问题是否还有问题,我在写完这个问题后不久就放弃了WSL。

    • 原始答复**

我解决了我的问题。所以,对于那些想尝试WSL2并遇到这个问题的人来说,问题是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 -phttps://stackoverflow.com/a/112409/5543999

6xfqseft

6xfqseft2#

您也可以通过使用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

图片来源:www.example.comhttps://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

avkwfej4

avkwfej43#

宁愿只做推拉从命令行比删除密码!

8tntrjer

8tntrjer4#

在这种情况下,删除密码短语是最简单的选择,但您也可以查看相关问题:microsoft/vscode-remote-release issue 2369
其中包括Elsie Hupp最近发现的变通方案(2021年2月):
我想出了一个可能的解决方案:SSH Agent Forwarding.
在SSH配置中,为远程VS代码主机添加以下内容:

ForwardAgent yes

(The缩进很重要。)
对我来说,使用VS代码设置为SSH进入的主机称为alpha,因此文件的部分如下所示:

Host alpha
    ForwardAgent yes

如果您想对所有远程主机执行此操作,可以将其添加到Host *部分(尽管这显然是一个边际安全风险):

Host *
    ForwardAgent yes

它使用你用来连接到远程主机的SSH代理,并回收来自远程主机的任何SSH连接的SSH密钥,比如连接到Git。
因为VS Code会在你连接到VS Code遥控器时很乐意地提示你输入SSH密钥的密码,所以你可以在初始连接时输入密码,而不必在与Git交互时重新输入。
显然,代理转发时可以使用多个本地SSH密钥,但我还没有能够测试这一点,一般来说,我还没有能够测试这一点,但它似乎很有前途。

rt4zxlrg

rt4zxlrg5#

逐个删除你添加到VS代码中的Github相关扩展,然后你就会看到它在工作。

相关问题