WSL Ubuntu16环境执行git clone克隆Gitlab仓库卡在计数对象阶段如何解决
问题诱因
- SSH连接MTU不匹配:WSL默认网络栈继承Windows的MTU设置,若Gitlab服务器的MTU小于本地设置,传输大包时会被丢弃,无丢包重传触发时就会无限卡在对象计数阶段,是WSL环境下Git拉取的常见问题。
- 本地Git缓存残留:删除本地仓库时未清理用户目录下的Git临时缓存、全局缓存数据,新旧缓存冲突导致拉取流程阻塞。
- WSL1网络栈缺陷:Ubuntu 16适配的WSL1版本未完整实现TCP窗口缩放功能,拉取仓库过程中TCP窗口占满后无法继续传输数据。
- SSH密钥权限异常:删除仓库操作时误修改了
~/.ssh目录或对应密钥文件的权限,SSH连接建立后服务端权限校验不通过,停止返回数据但不会主动断开连接。
解决思路
- 调整WSL网卡MTU值:执行
ifconfig eth0 mtu 1400临时修改网卡MTU,测试克隆是否正常,若生效可将该命令写入~/.bashrc实现开机自动配置。 - 清理Git全局缓存:执行
git gc --prune=all清理全局残留缓存,也可直接删除~/.gitcache目录后重试克隆。 - 改用HTTPS协议克隆:将SSH协议克隆地址替换为HTTPS地址,绕过SSH的网络适配问题,示例命令:
git clone https://gitlab.xxxx.xxx:xxxxxxx/xxxx/anxxxx-xxx.git - 修正SSH密钥权限:依次执行
chmod 700 ~/.ssh、chmod 600 ~/.ssh/id_rsa修正目录和密钥的权限,之后执行ssh -T git@gitlab.xxxx.xxx测试SSH连通性,确认返回正常欢迎信息后再重试克隆。 - 升级WSL版本:若上述方案均无效,可将WSL1升级到WSL2,WSL2的独立网络栈兼容性更强,可解决绝大多数老旧Ubuntu版本的网络适配问题。
内容的提问来源于stack exchange,提问作者Mahboob
相关产品推荐
相关产品推荐

