SSF0SSF0
首页
前端
  • Node
  • Go
  • Python
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
  • 开源项目
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • Python
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
  • 开源项目
Timeline
Github
标签
分类
  • Bash

    • Bash 获取路径在不同类型电脑的区别
  • Git

    • Git 使用 ssh 与 https 的区别
    • Git 回滚、重置与变基
    • 文件名大小写发生变化的坑
    • Git 提交信息规范解读与实践指南
    • Git 历史邮箱统一
    • Git 拉取 GitHub 失败、配置代理及 DNS 问题排查总结
    • Git 实战教程:如何使用 Cherry-pick 或直接覆盖让两个分支同步公共功能
  • Docker

    • Docker 命令大全
    • nginx 镜像部署静态文件
    • Docker 运行命令说明
    • 使用 node 镜像运行本地项目
    • 挂载和卷的区别
    • Docker 打包多平台镜像
    • Docker 使用 mysql
    • Docker 容器网络访问问题总结
    • Docker 容器绑定ip问题
  • VuePress

    • 使用 VuePress 搭建个人博客概括
  • CI/CD

    • blog 使用 Github-Actions 部署 docker 服务器
    • GitHub Actions项目部署国内服务器文件传输时间优化
  • 服务器

    • 腾讯云使用 ssh 连接服务器(Linux 实例)
    • ssl 证书安装到 docker 服务器
    • 操作系统与架构
    • ssh 连接时长问题
    • Oracle 服务器基础知识
    • OCI 专属网络拓扑图
    • 甲骨文-宝塔面板无法访问问题
    • 甲骨文服务器防火墙问题排查记录
    • 甲骨文重启后宝塔面板无法访问
  • hosts 文件指南
  • Cloudflare DNS与代理
  • 跨平台定时任务设置指南
  • Edge 浏览器连不上代理?一场由插件引发的“夺权”与 v2rayN 的深度探索
  • 二级域名访问异常排查记录
  • 软件走代理时如何抓包
  • JetBrains AI 使用
  • Clash 代理工作原理详解

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 拉取命令再次执行,问题解决。


五、问题成因分析

  1. DNS 错误解析
    系统 DNS 将 github.com 解析为了本地地址 ::1,导致 Git 请求根本没有到达 GitHub,而是打到本地。

  2. Clash for Windows 的 DNS/网络路由问题
    Clash 的 TUN 模式并不一定代理系统级 DNS 请求,尤其在某些网络环境下可能出现 DNS 被污染或 DNS 请求仍走本地路径的情况。

  3. 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.git

Clash 用户建议

  • 启用 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 文件快速定位和绕过网络解析问题

最后更新时间:
贡献者: 何风顺
上一页
Git 历史邮箱统一
下一页
Git 实战教程:如何使用 Cherry-pick 或直接覆盖让两个分支同步公共功能