今天和学长合作写项目的开始,一开始把项目clone下来,还pull了一遍,都没有问题
等到我的部分写完准备推的时候在pull和push完全卡住了,一直连接超时,尝试了好久才解决
遂总结一下经验,,
适用场景:git push、git pull、git fetch
等与远程仓库通信的操作无响应、长时间卡住、报超时或连接被拒绝。
定位问题
- 确认远程地址使用的协议和端口
1 | git remote -v |
看是SSH还是HTTPS,端口是多少(22/443)
- 查看命令的调试信息
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 | # DNS 解析 |
常见场景与解决方法
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 | # 测试 443 端口 SSH 是否可用 |
HTTPS 443端口也不通
可能原因:
- 防火墙/代理只允许浏览器流量,拦截了 Git 客户端。
- 系统设置了全局代理(
http_proxy/https_proxy)但代理不可用。
临时取消无效代理:
1 | env | grep -i proxy |
或者配置git代理:
1 | # HTTP代理 |
WSL2网络栈故障
ping正常,nc或git偶尔成功偶尔卡死,重启wsl和winsock
1 | # 在 Windows 管理员 PowerShell 中执行 |
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" |