Git设置代理
该文记录 Git
如何设置代理。
Git设置代理
当您在克隆或从远程仓库获取数据时,很可能因为网络状况不佳遇到很慢甚至超时的情况,那么此时您可能需要配置 Git
的代理。
1. Git 传输协议
连接到 Git
仓库最常用的传输协议可以分为两类:
- HTTP/HTTPS 传输协议
- SSH 传输协议
分类 | 示例 |
---|---|
http/https | https://github.com/FFmpeg/FFmpeg.git |
ssh | git@github.com:FFmpeg/FFmpeg.git |
2. HTTP/HTTPS 传输协议的代理方法1
- 针对所有域名的仓库
1
git config --global http.proxy <protocol>://<host>:<port>
- 针对特定域名的仓库
1
git config --global http.<url>.proxy <protocol>://<host>:<port>
参数 | 含义 |
---|---|
--glboal | 指的是修改 Git 的全局配置文件 ~/.gitconfig |
<url> | 需要使用代理的远程仓库 |
<protocol> | 代理协议,如 http ,https ,socks5 等 |
<host> | 代理主机,如使用本地代理主机 127.0.0.1 或 localhost 等 |
<port> | 代理端口号,如 clash 使用的 7890 或 7891 等 |
常见误用:针对 HTTPS
传输协议(即 https://
开头)的 <url>
代理,命令写成 git config --global https.https://github.com.proxy protocol://127.0.0.1:7890
,这一写法完全是错的。请记住: Git
代理配置项正确写法为 http.<url>.proxy
,并不支持 https.<url>.proxy
这一错误写法。
2.1. 针对所有域名的 Git 仓库
以 V2ray
为例
1
2
3
4
5
// http 代理
git config --global http.proxy http://127.0.0.1:10809
// socks5 代理
git config --global http.proxy socks5://127.0.0.1:10808
3. SSH 传输协议的代理方法2
3.1. Windows
Windows
系统中配置文件通常在 C:\Users\username\.ssh\config
(%USERPROFILE%/.ssh
)中,其中 username
是你的用户名。将下面内容根据实际情况修改后添加到配置文件 config
中。
配置选项 | 含义 | 用途 |
---|---|---|
Host | 指定主机名 | 指定这个配置适用于哪个主机 |
HostName | 指定主机地址 | 指定连接的主机的 IP 地址或域名 |
Port | 指定端口号 | 指定 SSH 连接使用的端口号 |
User | 指定用户名 | 指定 SSH 连接使用的用户名 |
IdentityFile | 指定私钥路径 | 指定用于身份验证的私钥文件路径 |
ProxyCommand | 指定代理命令 | 指定 SSH 连接使用的代理命令,将连接转发到代理服务器 |
ProxyJump | 指定跳板机 | 指定使用跳板机进行 SSH 连接 |
StrictHostKeyChecking | 指定主机密钥检查方式 | 指定 SSH 连接时是否对主机的密钥进行验证 |
UserKnownHostsFile | 指定已知主机列表路径 | 指定 SSH 连接已知主机的列表文件路径 |
以 V2ray
的 http
为例
1
2
3
4
5
6
Host github.com
HostName ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa
ProxyCommand connect -H 127.0.0.1:10809 %h %p
参数 | 说明 |
---|---|
-S | -S 指 Socks 5 协议,-H 为 Https 协议 |
3.1.1. 测试代理生效
如果你能在端口 443 上通过 SSH 连接到 git@ssh.github.com
,则可覆盖你的 SSH 设置来强制与 GitHub.com 的任何连接均通过该服务器和端口运行。
打开 Git Bash
终端界面。输入 ssh -T git@github.com
来测试这是否有效:
1
2
$ ssh -T git@github.com
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide shell access.
3.2. Linux/macOS
Linux/macOS
系统中,使用 netcat
,简称 nc
。部分发行版没有安装,则需要手动进行安装。
Linux/macOS
系统中的配置文件通常在 ~/.ssh/config
。
以 V2ray
为例
1
2
3
4
5
6
Host github.com
HostName ssh.github.com
Port 443
User git
IdentityFile ~/.ssh/id_rsa
ProxyCommand nc -X connect -x 127.0.0.1:10809 %h %p
参数 | 说明 |
---|---|
-X 5 | -X 5 指代理协议 Socks 5 , -X 4 指代理协议 Socks 4 , -X connect 指代理协议 Https |
4. 问题
4.1. kex_exchange_identification
https://github.com/orgs/community/discussions/55269
https://docs.github.com/zh/authentication/troubleshooting-ssh/using-ssh-over-the-https-port