GitHub代理要分三条路设置:浏览器靠系统代理或扩展,git 命令行靠 git 自己的代理配置或环境变量,包管理器靠各自的代理设置。想省事,可以用规则分流让 GitHub 相关域名自动走代理,再用 TUN 覆盖不读代理设置的工具。设置后,用一次 clone 或 ls-remote 验证是否生效。
GitHub代理怎么设置,几乎是每个程序员都要折腾一遍的事:浏览器里明明能打开,到了终端里 git clone 却慢得像在爬;好不容易设好了 git,又发现 npm、pip 依旧很慢。原因很简单:**不同的工具,走的是不同的网络路径,代理要各管各的。**这篇把三条路径讲清楚,再给你一套“按规则自动分流”的省事办法,最后教你怎么验证。
先搞清楚:三条路径,三种设置
| 路径 | 典型使用 | 读不读系统代理 | 怎么设置 |
|---|---|---|---|
| 浏览器 | 打开 GitHub 网页、下载 Release | 读 | 系统代理,或浏览器扩展 |
| git 命令行 | clone、pull、push | 默认不读 | git 的代理配置,或环境变量 |
| 包管理器与其他工具 | npm、pip、go 等 | 各不相同 | 各自的代理设置或环境变量 |
这张表是整件事的地图:设置之前,先问自己“我要让哪条路走代理”。关于系统代理为什么不是万能的,读 开了系统代理没反应。
第一条路:浏览器
浏览器通常会读取系统代理,所以最简单:在客户端里打开系统代理,浏览器就会走客户端。如果只想让 GitHub 走代理,可以靠客户端的规则分流,让 GitHub 相关域名走代理,其余直连。规则分流的原理见 规则分流是什么。
第二条路:git 命令行
git 有两种常用的设置办法。
**办法一:git 自己的代理配置。**示例里的端口是占位,请换成你的客户端实际使用的端口:
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 --unset http.proxy
git config --global --unset https.proxy
**办法二:环境变量。**在当前终端里临时设置,关闭终端就失效。macOS 或 Linux 可以这样:
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
Windows 的 PowerShell 写法略有不同:
$env:https_proxy = "http://127.0.0.1:7890"
$env:http_proxy = "http://127.0.0.1:7890"
两种办法各有适用场景:全局配置省事但容易忘记取消,环境变量更灵活、影响范围小。
第三条路:包管理器和其他工具
包管理器常常有自己的代理设置,也常常读环境变量。思路是:
- 先查这个工具的官方文档,看它支持哪种代理设置方式;
- 优先用它自己的配置,其次用环境变量;
- 设置之后用一个小任务验证,比如下载一个小的包。
具体命令随工具而异,这里不一一列举,避免写出不准确的内容。关于 GitHub 本身的使用说明,可以参考 GitHub 官方文档。
想省事:让规则分流替你决定
逐个工具设置,容易遗漏。更省心的办法是:
- **用规则分流。**让 GitHub 相关域名走代理、国内网站直连,浏览器这一路无需额外设置;
- **用 TUN 补上不读代理的工具。**TUN 在网络层接管流量,连 git 这类不读系统代理的命令行也能被覆盖,原理见 TUN 模式是什么意思;
- **代价要心里有数。**TUN 需要更高权限,也更容易与其他软件冲突,建议先用前两条路径,确有需要再开。
自己动手:怎么验证真的走了代理
设置完成后,别只凭感觉,做一次验证:
| 验证项 | 做法 | 通过的标志 |
|---|---|---|
| git 能否访问 | 用 git 列出一个公开仓库的远程引用 | 命令能较快完成,没有超时 |
| 客户端是否看到连接 | 在客户端的连接或日志页面查看 | 出现 GitHub 相关域名的记录 |
| 取消代理后对比 | 取消 git 代理,再执行同一命令 | 明显变慢或失败,说明之前确实生效 |
| 浏览器访问 | 打开仓库页面和 Release 下载 | 页面正常、下载顺畅 |
对比取消前后的差别,是最有说服力的验证方式。
GitHub代理常见故障与对策
| 现象 | 常见原因 | 先做什么 |
|---|---|---|
| 浏览器能开,git 不行 | git 没有配置代理 | 按上文设置,并验证 |
| 设置了代理,git 报连接失败 | 端口与客户端不一致,或客户端没在运行 | 核对端口,确认客户端已启动 |
| 取消代理后 git 反而更慢 | 国内直连本身就慢 | 用规则分流,只让需要的域名走代理 |
| SSH 方式 clone 不走代理 | SSH 不读 HTTP 代理配置 | 改用 HTTPS 方式,或在 SSH 配置里单独设置 |
| 打开 GitHub 页面异常 | 网络或节点问题 | 读 GitHub 打不开或很慢怎么办 |
不同的使用场景,推荐怎么配
| 你的场景 | 推荐的组合 | 理由 |
|---|---|---|
| 只在浏览器里看仓库、下载 Release | 系统代理加规则分流 | 最省事,不用碰命令行 |
| 日常 clone、pull、push | git 代理配置,或规则分流加 TUN | 命令行默认不读系统代理 |
| 在服务器或容器里拉代码 | 环境变量,限定在当前会话 | 影响范围小,容易清理 |
| 临时拉一个仓库 | 一次性环境变量 | 用完即走,不留痕迹 |
| 长期开发,多种工具混用 | 规则分流加 TUN | 一次设置,覆盖面广 |
选择的原则是:影响范围越小越好,能临时就别永久,能局部就别全局。全局的 git 代理配置虽然方便,却容易在不需要时忘记取消,反而拖慢国内仓库的访问。
取消与回退:别忘了收尾
设置代理很容易,忘记取消也很容易。下面几个收尾的习惯,值得养成:
- 临时设置的环境变量,关掉终端即失效,不必特意处理;
- 全局的 git 代理,用完在不需要时取消,或者改成只对 GitHub 域名生效;
- 换了客户端或端口之后,回头检查 git 配置里的端口是否还对得上;
- 定期用一次 git config 的列表命令,看看有没有遗留的代理设置。
这样既能让 GitHub 访问顺畅,又不会让国内的代码托管访问被无谓地拖慢。
几个常见的误解
- **“浏览器能用,终端也一定能用。”**两者路径不同,要分别设置;
- **“设了全局代理就一劳永逸。”**国内站点也被代理会变慢,建议用规则分流;
- **“公开的订阅或节点能用来加速 GitHub。”**来路不明的节点存在安全风险,不建议使用;
- **“代理设置得越多越好。”**只设置需要的那几条路径,减少遗忘和冲突。
下一步
程序员的整体选机场思路,读 程序员选机场;想按条件筛选,用 选机场向导,再翻 机场推荐榜 核对资料。GitHub代理怎么设置,抓住三条路径、一次验证、规则分流这三件事,就不再手忙脚乱。
- 命令与设置项因系统、git 版本和客户端不同而有差异,本文给的是通用写法,请以官方文档和你所用客户端为准。
- 示例里的端口是占位,请换成你的客户端实际使用的端口。
- 本文不提供任何机场的速度数据,爱梯子没有 GitHub 访问速度的测试记录。
爱梯子榜单里排在前面的几家
名次看的是资料完整度和跟进程度,不是测速成绩。价格、线路一律照档案原样摆出来,付款前请到官网结账页再核一遍。
| 名次 | 机场 | 最低一档 | 流量 | 线路 | |
|---|---|---|---|---|---|
| 第 1 名 | 无忧链接 | ¥6.6/月 按年付费 | 40GB/月 | IPLC、IEPL | 官网入口 |
| 第 2 名 | 暮光加速 | 折合 ¥9.1/月 按年付费 | 70GB | IEPL | 官网入口 |
| 第 3 名 | 微风网络 | ¥27/月 按月付费 | 200GB | IEPL | 官网入口 |
| 第 4 名 | 飞猫云 | 折合 ¥7/月 按年付费 | 50GB | IPLC | 官网入口 |
| 第 5 名 | Firefly | 约¥8/月起 按年付费 | 60GB | IPLC | 官网入口 |
| 第 6 名 | 灵动云 | 折合 ¥8.3/月 按年付费 | 70GB | IEPL | 官网入口 |
看完整的机场推荐榜 → 数据来自机场档案,价格以官网结账页为准。
本文引用的官方来源
这篇的几个常见问题
为什么浏览器能打开 GitHub,git clone 却很慢或失败?
因为浏览器和 git 走的是不同的网络路径。浏览器可以读取系统代理,git 命令行默认不读,除非你给它配置代理或设置环境变量。所以浏览器里的代理生效,并不意味着终端里的 git 也走了代理,需要单独设置和验证。
git 代理设置,是用 HTTP 代理还是 SOCKS?
取决于你的客户端提供什么。多数客户端会同时开放 HTTP 和 SOCKS 两种本地代理端口,git 两种都支持,配置时的写法略有不同。选一个你的客户端实际监听的端口,并保持与客户端设置一致。
用 SSH 方式 clone,代理怎么设?
SSH 方式不走 HTTP 代理设置,需要在 SSH 的配置里单独指定代理方式,或者改用 HTTPS 方式 clone。具体写法请查 git 与 SSH 的官方文档。如果你不想折腾,用 TUN 让更多程序的流量被接管,也是一种思路。
设置了代理,怎么确认真的生效了?
用一条只读命令验证最直接,比如用 git 访问一个公开仓库并列出远程引用,看是否能快速完成;同时在客户端的连接日志里,看是否出现了 GitHub 相关域名的连接记录。两处都对得上,说明代理已生效。