Git 拉取 GitHub 失败、配置代理及 DNS 问题排查总结
在开发过程中,有时会遇到使用 Git 拉取仓库时报错的情况。本文记录一次 Git 无法拉取 GitHub 仓库的完整排查过程,包括代理配置、DNS 问题分析及解决方法,并作出补充总结,供类似情况参考。
一、问题现象
执行如下命令时:
git pull --tags origin main报错信息如下:
fatal: unable to access 'https://github.com/SSF0/vue3-example.git/': Failed to connect to github.com port 443 after 2331 ms: Couldn't connect to server开着代理,浏览器可以正常访问 GitHub,后面开启 Clash for Windows(TUN 模式)后依然无法拉取。
二、尝试使用 Git 配置代理
执行以下命令手动为 Git 配置代理:
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890- 7890 是 Clash for Windows || ClashX 的默认端口
配置后 Git 拉取成功。
疑问:为什么系统开了 Clash 的全局/TUN 模式 Git 还是无法访问,而浏览器却可以?
原因:Git 在命令行下无法通过代理连接到 GitHub,虽然浏览器可以访问,但 Git 使用的是独立的网络配置,它不会自动继承系统或浏览器的代理设置。
三、进一步报错信息分析(SSH 模式)
执行如下命令尝试使用 SSH 拉取:
git fetch --tags origin报错信息如下:
ssh: connect to host github.com port 22: Connection refused
fatal: Could not read from remote repository.说明连接 SSH 端口 22 被拒绝,进一步排查网络连接:
Test-NetConnection github.com -Port 22输出结果显示尝试连接了本地地址(::1 和 127.0.0.1),而非 GitHub 的外部 IP:
WARNING: TCP connect to (::1 : 22) failed
WARNING: TCP connect to (127.0.0.1 : 22) failed
...
RemoteAddress : ::1
...
TcpTestSucceeded : False执行 ping github.com 命令,返回如下内容:
正在 Ping github.com [::1] 具有 32 字节的数据:
来自 ::1 的回复: 时间<1ms ...说明:github.com 被错误解析为本地回环地址 ::1,即 DNS 解析存在严重问题。
四、解决方法
方法一:手动修改 hosts 文件
windows 编辑 C:\Windows\System32\drivers\etc\hosts 文件,添加以下内容: macOS 编辑 /etc/hosts 文件,添加以下内容:
140.82.113.4 github.com再次执行 ping github.com:
ping github.com返回:
正在 Ping github.com [140.82.113.4] ...Git 拉取命令再次执行,问题解决。
五、问题成因分析
DNS 错误解析
系统 DNS 将github.com解析为了本地地址::1,导致 Git 请求根本没有到达 GitHub,而是打到本地。Clash for Windows 的 DNS/网络路由问题
Clash 的 TUN 模式并不一定代理系统级 DNS 请求,尤其在某些网络环境下可能出现 DNS 被污染或 DNS 请求仍走本地路径的情况。SSH 默认端口(22)被公司网络或防火墙屏蔽
很多公司网络环境下 22 端口是不通的,建议使用 HTTPS 而非 SSH 进行 Git 操作。
六、建议与补充总结
推荐 DNS 设置
为了避免 DNS 被污染或解析错误,建议配置可靠的公共 DNS:
Google DNS:
- 8.8.8.8
- 8.8.4.4
Cloudflare DNS:
- 1.1.1.1
- 1.0.0.1
可在网络设置中手动指定。
建议使用 HTTPS 拉取 GitHub 仓库
在不保证 SSH 端口通畅的情况下,推荐使用 HTTPS:
git remote set-url origin https://github.com/your-repo.gitClash 用户建议
- 启用 TUN 模式 时,建议检查 DNS 是否由 Clash 接管;
- 或者在配置文件中显式开启 DNS 代理;
- 若无法解决,可使用
hosts文件作为临时解决方案。
七、参考命令汇总
# 设置代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 查看当前代理配置
git config --global --get http.proxy
git config --global --get https.proxy
# 使用 Test-NetConnection 检查端口连通性(Windows)
Test-NetConnection github.com -Port 22
# 清空 DNS 缓存
ipconfig /flushdns
# 使用 HTTPS 替代 SSH 拉取仓库
git remote set-url origin https://github.com/your-repo.git八、总结
本次问题的根本原因是 DNS 错误将 github.com 解析为本地地址(::1),加上代理工具未能正确处理 Git 请求,导致 Git 无法访问远程仓库。最终通过修改 hosts 文件绕过 DNS 解析问题成功解决。
长期解决方案应从以下方面入手:
- 配置可靠的 DNS
- 正确设置代理规则
- 避免依赖 SSH(尤其是在公司防火墙环境中)
- 学会使用
hosts文件快速定位和绕过网络解析问题