文章

Git设置代理

Git设置代理

该文记录 Git 如何设置代理。

Git设置代理

当您在克隆或从远程仓库获取数据时,很可能因为网络状况不佳遇到很慢甚至超时的情况,那么此时您可能需要配置 Git 的代理。

1. Git 传输协议

连接到 Git 仓库最常用的传输协议可以分为两类:

  • HTTP/HTTPS 传输协议
  • SSH 传输协议
分类示例
http/httpshttps://github.com/FFmpeg/FFmpeg.git
sshgit@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>代理协议,如 httphttpssocks5
<host>代理主机,如使用本地代理主机 127.0.0.1localhost
<port>代理端口号,如 clash 使用的 78907891

常见误用:针对 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 连接已知主机的列表文件路径

V2rayhttp 为例

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-SSocks 5 协议,-HHttps 协议

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

参考

本文由作者按照 CC BY 4.0 进行授权