从 WSL2 内部克隆特定的 Git 存储库失败

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

我最近在安全企业网络(带有代理和防火墙)上运行 Windows 10 22H2 的系统上,在 Windows Subsystem for Linux version 2 中设置了 Ubuntu 24.04 LTS Noble Numbat。它运行得非常好,我似乎可以通过 ping、DNS、HTTP(S) 和 SSH 完全访问网络。例如,我可以使用 APT 安装软件。然而,我面临一个主要问题:我可以克隆一些 Git 存储库,但不能克隆其他 Git 存储库。我必须使用基于密钥的身份验证通过 SSH 克隆存储库,当我无法克隆存储库时,在等待几分钟后会收到以下错误消息:

Cloning into 'Foo'...
client_loop: send disconnect: Broken pipe
fatal: the remote end hung up unexpectedly

使用

ssh -T
访问 git 服务器效果很好,就像 nslookup 其主机名、ping 它并使用
curl
从中获取网页一样。我可以从 Git 服务器克隆一些其他存储库。

我已尝试了所有常见建议的修复方法,但似乎都不起作用。以下是我尝试过但失败的事情的列表:

  • IPQoS
    设置为
    throughput
    并在
    ServerAliveInterval
    中设置
    ~/.ssh/config
    ,如下所示:
    Host *
       ServerAliveInterval 600
       IPQoS throughput
    
  • networkingMode=mirrored
    中设置
    /etc/wsl.conf
    并重新启动分发(使用 8 秒规则),如下所示:
    [wsl2]
    networkingMode=mirrored
    
  • 将 Git 的 http.postBuffer 设置增加到 1048576000(存储库相当大)
  • 将发行版的 MTU 从 1500 字节增加到 9000 字节
  • 检查并禁用主机系统配置的防火墙

应用这些想法后,我仍然遇到完全相同的错误。在环境变量

GIT_SSH_COMMAND
设置为
ssh -vvv
的情况下运行 Git 表示连接已设置并且用户(我)已成功通过身份验证,但最终会以几乎相同的通知结束,即远程端意外挂断。

在同一台计算机上,我可以通过 SSH 在本机 Windows、MSYS2 和在 VMWare Workstation Player 中运行的虚拟机中克隆有问题的存储库。

这里可能出了什么问题?我怎样才能知道呢?我真的很困惑...

提前感谢您的输入!

git ssh windows-subsystem-for-linux
1个回答
0
投票

正如你所说,

回购相当大

所以克隆很可能只是超时了。我不熟悉 WSL 细节,但是

http.postBuffer
对 SSH 会话的影响为零,并且仅当到任何服务器的路由中的所有节点也处于该设置时,将 MTU 更改为巨型帧才会起作用(否则你只会被降到 1500 或其他什么,并且伴随着很多额外的碎片)。

相反,请考虑部分克隆。这里的详细信息可能取决于您的目标:

  • 如果您要克隆它用于常规开发工作,那么“无斑点”克隆将是最好的; Git 将获取所有可到达的提交和树,然后根据需要获取 blob。无斑点克隆看起来像
    git clone --filter=blob:none <url>
  • 如果您正在为构建过程(等)克隆它,您需要完整的历史记录,但在完成后将丢弃存储库,那么“无树”克隆可以很好地工作; Git 将获取所有可到达的提交,然后根据需要获取树和 blob。无树克隆看起来像
    git clone --filter=tree:0 <url>
  • 如果您为构建过程(等)克隆它,您只需要最新版本,并且在完成后将丢弃存储库,那么经典的“浅”克隆将获取存储库的最新版本,而不会获取其他任何内容。浅克隆看起来像
    git clone --depth=n <url>
    (其中
    n
    是要获取的提交数量 - 实际上大多数人只需要 1)。

GitHub 有一篇关于部分克隆的优秀博客文章,我建议进一步阅读。

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