配置Git代理的方式,具体取决于你使用的是 HTTP 代理、HTTPS 代理还是 SOCKS 代理。下面是不同方式的配置步骤:

1. 配置全局代理

你可以通过配置 Git 的全局代理来使 git clonegit push 都使用代理。以下是几种不同类型代理的配置方法:

1.1 HTTP/HTTPS 代理

1
2
git config --global http.proxy http://proxyuser:proxypassword@proxy.server.com:port
git config --global https.proxy https://proxyuser:proxypassword@proxy.server.com:port

如果你的代理不需要用户名和密码,则可以省略 proxyuser:proxypassword@ 这一部分。例如:

1
2
git config --global http.proxy http://proxy.server.com:port
git config --global https.proxy https://proxy.server.com:port

1.2 SOCKS 代理

如果你使用的是 SOCKS 代理(如 Shadowsocks 或其他 SOCKS5 代理),你可以配置如下:

1
2
git config --global http.proxy socks5://proxyuser:proxypassword@proxy.server.com:port
git config --global https.proxy socks5://proxyuser:proxypassword@proxy.server.com:port

同样,如果代理不需要认证:

1
2
git config --global http.proxy socks5://proxy.server.com:port
git config --global https.proxy socks5://proxy.server.com:port

2. 为单个仓库配置代理

如果你只想为特定的仓库配置代理,你可以在该仓库的目录下运行以下命令:

1
2
git config http.proxy http://proxyuser:proxypassword@proxy.server.com:port
git config https.proxy https://proxyuser:proxypassword@proxy.server.com:port

3. 移除代理配置

如果你不再需要使用代理,可以使用以下命令移除全局代理配置:

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy

如果是为单个仓库配置的代理,可以在该仓库目录下运行:

1
2
git config --unset http.proxy
git config --unset https.proxy

4. 使用环境变量配置代理

你也可以通过设置环境变量来配置代理,这种方法无需在 Git 配置中显式指定:

1
2
export http_proxy=http://proxyuser:proxypassword@proxy.server.com:port
export https_proxy=https://proxyuser:proxypassword@proxy.server.com:port

5. 通过 SSH 使用代理(仅适用于 SSH 代理)

上述代理只适用于 HTTPS 仓库,如果需要连接 SSH 仓库,通常需要配置 SSH 客户端(如 ssh)来使用代理。在 ~/.ssh/config 文件中添加以下内容:

1
2
Host github.com
ProxyCommand nc -x proxy.server.com:port %h %p

这里 proxy.server.com 是你的代理服务器地址,port 是端口号。ncnetcat,用于建立代理连接。

像我的 Debian12 系统中国呢的 netcat 并不含有 -x 的参数(如下所示),所以我们需要使用另外的工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ nc -h
[v1.10-47]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-C Send CRLF as line-ending
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').

根据你提供的 nc 选项说明,你使用的 Netcat 版本(v1.10-47)不支持 -x 选项,这个版本的 Netcat 没有直接支持 HTTP 代理的功能。你可以使用以下几种方法来调整你的 ProxyCommand 配置:

6. 使用 connect-proxy 工具

通过以下命令安装 connect-proxy

1
sudo apt-get install connect-proxy

然后将你的 .ssh/config 文件修改为:

1
2
Host github.com
ProxyCommand connect-proxy -H proxy.server.com:port %h %p

这里,proxy.server.com:port 是你的 HTTP 代理服务器的地址和端口。

7. 使用 corkscrew 工具

使用 corkscrew 工具。命令安装 corkscrew

1
sudo apt-get install corkscrew

然后在 .ssh/config 文件中使用:

1
2
Host github.com
ProxyCommand corkscrew proxy.server.com port %h %p

这同样要求你替换 proxy.server.com:port 为你的代理服务器的实际地址和端口。