VSCode + WSL Remote + Git:同步更改需要很长时间
Posted
技术标签:
【中文标题】VSCode + WSL Remote + Git:同步更改需要很长时间【英文标题】:VSCode + WSL Remote + Git : Synchronizing changes take forever 【发布时间】:2020-01-20 20:56:05 【问题描述】:我将 VSCode 远程使用到位于(符号链接)到 WSL 2 VM 的项目文件夹中。我使用 SSH 和终端从 Bitbucket 克隆了我的 repo。
在左下角,它表示WSL: Ubuntu
,所以我目前正在远程使用它。一切都好
如果我单击 Git 分支指示器,我可以看到本地分支和远程分支。一切都好
问题是,当我在本地提交后单击以同步所有内容时,它会永远旋转。好吧,不是真的,我会在永远发生之前失去耐心......目前在当前测试中大约需要 30 分钟。
如果我在终端输入git push
,一切都会按预期进行。
有人知道为什么要这样做吗?我该如何解决这个问题?
我的 Git 输出到 VSCode 中不断返回这个 git rev-parse --show-toplevel
?
我为 user.name 和 user.email 都做了git config
SSH 密钥在 Bitbucket 上设置。 Windows 和 WSL 2 使用相同的公钥/私钥。
谢谢
【问题讨论】:
【参考方案1】:2021-02-05 更新
这个问题最近得到了很多人的关注,我觉得我需要做一个更彻底的解释。最初的答案是在 WSL 2 仍处于测试阶段以进行测试时编写的。现在一切都在发展,从 SSH 密钥中删除密码可能会导致一些漏洞。所以,在进一步讨论之前,先看看这篇帖子Is it okay to use a SSH key with an empty passphrase?
问问自己删除它是否安全。
我不知道原始问题是否还有问题。写完问题后不久,我就放弃了 Web 开发的 WSL。
原始答案
我解决了我的问题。因此,对于那些想要尝试 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://***.com/a/112409/5543999
【讨论】:
使用ssh-keygen -p
删除密码已为我修复【参考方案2】:
您也可以使用 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】:在这种情况下,删除密码是最简单的选择,但您也可以查看相关问题:microsoft/vscode-remote-release
issue 2369
它包括由Elsie Hupp 找到的recent workaround(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 密钥,但我无法对此进行测试。总的来说,我还无法对此进行测试,但它似乎很有希望。
【讨论】:
【参考方案4】:与其删除密码短语,不如直接从命令行推送和拉取!
【讨论】:
以上是关于VSCode + WSL Remote + Git:同步更改需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章
带有 VSCode + WSL2 + Docker 的 Windows 上的 Git + SSH 密钥问题