红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【杂项】Git远程仓库网络抽风修复指南

今天和学长合作写项目的开始,一开始把项目clone下来,还pull了一遍,都没有问题

等到我的部分写完准备推的时候在pull和push完全卡住了,一直连接超时,尝试了好久才解决

遂总结一下经验,,

适用场景:git pushgit pullgit fetch 等与远程仓库通信的操作无响应、长时间卡住、报超时或连接被拒绝。

定位问题

  1. 确认远程地址使用的协议和端口
1
git remote -v

看是SSH还是HTTPS,端口是多少(22/443)

  1. 查看命令的调试信息
1
GIT_TRACE=1 GIT_SSH_COMMAND="ssh -vvv" git push 2>&1 | tee debug.log

git push可以换成其他卡住的,重点看最后几行:

  • 卡在 Connecting to github.com [IP] port xx.TCP 握手失败,端口不通或被墙
  • 卡在 Authentication 相关提示后 → 凭证/密钥问题
  • 卡在 Trying ...DNS 解析或网络连接受阻
  1. 进行基础的网络连通性测试
1
2
3
4
5
6
# DNS 解析
nslookup github.com
ping -c 2 github.com
# 端口连通性(SSH 22 / HTTPS 443)
nc -zv github.com 22
nc -zv github.com 443

常见场景与解决方法

SSH连接22端口超时

debug1: Connecting to github.com [IP] port 22. 后卡住

nc -zv github.com 22 也卡。

此时可能是被墙了

PlanA:改用HTTPS 443端口

将远程地址改为HTTPS

1
git remote set-url origin https://github.com/用户名/仓库.git

重新执行 push/pull,会提示输入用户名和令牌

用户名:GitHub 用户名

密码:Personal Access Token(不能用登录密码)

在 GitHub 生成 Token:Settings → Developer settings → Personal access tokens → Tokens (classic)

勾选 repo 全部权限,生成后复制过来

PlanB:SSH走443端口

1
2
3
4
# 测试 443 端口 SSH 是否可用
ssh -T -p 443 git@ssh.github.com
# 若成功(返回 "Hi xxx! ..."),修改远程地址
git remote set-url origin ssh://git@ssh.github.com:443/用户名/仓库.git

HTTPS 443端口也不通

可能原因:

  • 防火墙/代理只允许浏览器流量,拦截了 Git 客户端。
  • 系统设置了全局代理(http_proxy / https_proxy)但代理不可用。

临时取消无效代理:

1
2
3
4
env | grep -i proxy
# 如果有输出,临时取消
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy
# 再试 git push

或者配置git代理:

1
2
3
4
5
6
7
# HTTP代理
git config --global http.https://github.com.proxy http://127.0.0.1:10808
# SOCKS5代理
git config --global http.https://github.com.proxy socks5://127.0.0.1:10808
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

WSL2网络栈故障

ping正常,nc或git偶尔成功偶尔卡死,重启wsl和winsock

1
2
3
# 在 Windows 管理员 PowerShell 中执行
wsl --shutdown
netsh winsock reset

SSH卡在认证阶段

反复要求密码没反应或者日志中Permission denied (publickey)

首先检查本地密钥是否添加到ssh-agent且配对远程

1
ssh -T git@github.com

正常输出为Hi 用户名! You've successfully authenticated...

若失败重新生成密钥并传到github

1
ssh-keygen -t ed25519 -C "your_email@example.com"