今天和学长合作写项目的开始,一开始把项目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.loggit push可以换成其他卡住的,重点看最后几行:
- 卡在
Connecting to github.com [IP] port xx.→ TCP 握手失败,端口不通或被墙 - 卡在
Authentication相关提示后 → 凭证/密钥问题 - 卡在
Trying ...→ DNS 解析或网络连接受阻
- 进行基础的网络连通性测试
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/用户名/仓库.gitHTTPS 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.proxyWSL2网络栈故障
ping正常,nc或git偶尔成功偶尔卡死,重启wsl和winsock
1
2
3
# 在 Windows 管理员 PowerShell 中执行
wsl --shutdown
netsh winsock resetSSH卡在认证阶段
反复要求密码没反应或者日志中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"