Getting Git to work with a proxy
Background
前期大部分的项目代码仓库都在 Bitbucket 上,直接使用了 Bitbucket 的 pipelines 做 CI/CD。虽然贵了点,但还是挺方便的。
但随着我们自身 DevOps 需求的不断增加,我们也逐渐基于 Jenkins+Argo 搭建了一整套自己的 DevOps 平台。
同时由于 Bitbucket 经常网络抽风,所以从去年起我们逐步将代码迁移到了 Github。悲催的是,Github 也被 重点关照 了……
据 blocky 统计,Github 从 2 月 27 日开始至今都被中国屏蔽。
开发团队小伙伴们更是苦不堪言,拉取/提交代码速度只有字节的痛苦可想而知。虽然团队已经购买了不少梯子,但在实际使用中又会因为不同协议和软件的问题,导致了挺多问题。
这里相对系统的记录一下通用配置和场景:
搭建梯子- 使用 Clash 客户端
- 终端使用代理
- Git 使用代理
- IDE 使用代理
搭建梯子
搭建梯子的方式有很多,自建和购买都很方便,此处略过。
推荐词汇:v2net
,AAEX
使用 Clash 客户端
可以使用的客户端有很多,个人比较喜欢 Clash,在此就以 Clash 举例。
安装客户端
Clash 在不同系统下需要下载不同的客户端,直接在 Github 的 release 中下载:
- Mac 客户端:https://github.com/yichengchen/clashX/releases
- Windows 客户端:https://github.com/Fndroid/clash_for_windows_pkg/releases
下载安装后设置为开机启动即可。
配置梯子
一般而言,购买梯子后会提供不同的订阅方式给不同的客户端用户,常用的包含 SS/SSR、Clash 和 Surge 等等。我们这里选择 Clash 的链接复制.
如果是 Mac 客户端,则通过以下路径打开配置:Config - Remote Config - Manage - Add
,Url 中粘贴订阅链接,Name 可以自定义方便后面选择。
如果是 Windows 客户端,则通过一下路径打开配置:Dashboard - Profiles - Download from a URL
,粘贴订阅链接并下载,
添加完成后,打开 Dashboard - Proxies 可以看到当前订阅的所有服务器节点。
测试服务器
由于节点服务器一般不够稳定,可以通过 Speed Test / Benchmark 功能测试节点连接情况,选择最优节点进行连接。
选择好节点后,打开 使用系统代理
或 Set as system proxy
即可实现科学上网。
注:在 Proxy Mode 中有三个选项 Rule、Global 和 Direct,分别代表按照规则使用代理、全局使用代理和不实用代理。因此,可以长期将 Clash 设置为系统代理并通过以上三个选项来控制本机的网络使用。
配置规则(组)
一般而言,Proxy Mode 选择 Rule 即可,默认配置会自动判断哪些流程需要走代理。如果遇到一些抽风,可以临时打开 Global 来执行代理。
但有时我们也希望可以精细配置,Mac 客户端可以通过以下路径打开配置文件所在目录:Config - open local config Folder
,找到正在使用的配置文件并打开。Windows 客户端更方便一些,既可以通过以下路径:Dashboard - Profiles
选中配置文件后 Edit in text mode
,也可以直接 Edit rules
进行可视化编辑。
配置文件中会包含以下配置,可以实现自定义:
1 | # ... |
其中规则支持以下类型:
- DOMAIN-SUFFIX:域名后缀匹配
- DOMAIN:域名匹配
- DOMAIN-KEYWORD:域名关键字匹配
- IP-CIDR:IP 段匹配
- SRC-IP-CIDR:源 IP 段匹配
- GEOIP:GEOIP 数据库(国家代码)匹配
- DST-PORT:目标端口匹配
- SRC-PORT:源端口匹配
- PROCESS-NAME:源进程名匹配
- RULE-SET:Rule Provider 规则匹配
- MATCH:全匹配
配置代理端口
Clash 也自带了代理端口的配置,允许其他程序通过代理端口访问网络,默认端口配置是 7890
,为 HTTP 和 SOCKS5 的混合端口。
- Mac 客户端可以通过
Dashboard - Setting - Mixed proxy port
进行配置。 - Windows 客户端可以通过
Dashboard - General - Port
进行配置。
注:此处不建议修改,容易造成端口冲突
终端使用代理
一般而言,终端 Terminal 如果想使用代理会需要独立的配置,Clash 也比较方便的生成了命令。
Mac 客户端可以在菜单栏点击 Copy shell command
来复制终端代理命令:
1 | # Bash |
Windows 客户端可以通过 Dahsboard - General - Port
点击终端图标进行各种终端代理命令的复制。
1 | # Powershell |
1 | REM CMD |
我们也可以将命令配置成别名作为快捷使用,以 Mac 下的 ohmyzsh 为例:
1 | # 打开文件 |
1 | # 在文件尾部添加 |
1 | # 保存后执行 |
这样我们就可以直接使用 setproxy
、setproxyhttp
和 unsetproxy
来控制终端中的代理配置。
Git 使用代理
在 Git 的使用上,每个人的使用途径和软件都会有比较大的差异。因此,这里我们只在一些常规的用法上举例说明如何让 Git 流量走代理路径。
使用 git config
大多数教程中使用 git config
命令来配置代理,但不知道什么原因我自己没有成功。这里只记录一下:
1 | # 通过 http 端口配置 |
使用 SSH 协议
个人比较习惯使用 SSH 协议使用 Git,对于 SSH 的配置这里不再赘述,可以参考 Github SSH 配置文档。
首先验证本机 SSH 是否有权限访问仓库:
1 | # 验证 Github |
返回成功信息即配置成功,接着打开 SSH 的配置文件:
1 | # 打开或新建 SSH 配置文件 |
1 | Host * |
1 | # 保存后立即生效 |
其中:
- Host * 段落是访问所有服务器 SSH 密钥配置
- Host github.com 段落是配置代理访问 Github
- Host bitbucket.org 段落是配置代理访问 Bitbucket
- Host benwk-io 段落是自定义访问服务器
注:在节点服务器出现异常时,可以直接设置 Clash 直连,避免频繁修改 SSH 这里的 config 文件
IDE 使用代理
有些小伙伴也会使用编辑器插件或 IDE 自带工具进行 Git 管理,这里只记录一下常用的 VS Code 和 Jetbrains 的配置方法。
VS Code
打开 VS Code 的 settings.json 并添加:
1 | { |
保存后即可生效。
Jetbrains
所有 Jetbrains 系列软件都是类似的配置方法,包括 IDEA、WebStorm、PyCharm 和 Android Studio 等等。它们都是需要独立配置的,包括 Toolbox 也可以独立配置代理。
IDE 里所有的配置都可以通过 Preference - Appearance & Behavior - System Settings - HTTP Proxy - Manual proxy configuration
设置。
同样可以选择 HTTP 或 SOCK5,Host name
都是 127.0.0.1
,Port number
是 7890
。
这里也可以设置 No proxy for
来过滤一些流量不走代理,不过如果我们已经在 Clash 配置过一些规则,这里不用重复设置。
对于 Toolbox 则在设置中配置 127.0.0.1:7890
即可。