在国内执行 git clone https://github.com/golang/go.git
操作,又慢又不稳定,搜索后发现可以使用代理这个问题。
准备工作
首先,你需要准备好代理工具,一般的代理工具都有 Sock5
和 HTTP
两种代理方式。
常见的代理软件使用的端口有:7890
, 1080
,下文的 {port}
参数都需要修改为对应的端口号。
笔者会按照 Windows
和 类 Unix
系统介绍为 git
设置代理的方法,由于相似处很多,请按需查看。
Windows
下
为 HTTP
协议设置代理
在 GitHub上,通过第一种方式克隆仓库,这里走的就是 HTTP
协议,修改起来也很简单:
命令行设置
- 通过代理软件
HTTP
的端口 在终端中执行以下命令:
# {port} 修改为代理软件的端口
git config --global https.https://github.com.proxy https://127.0.0.1:{port}
- 通过代理软件
Sock5
的端口 在终端中执行以下命令:
# {port} 修改为代理软件的端口
git config --global https.https://github.com.proxy socks5://127.0.0.1:{port}
可以发现,两者的命令极其相似,格式都为:
git config --global https.https://github.com.proxy {protocol}://{ip}:{port}
所以,凭个人喜好使用就好。
另外,如果代理软件并不在本地运行,那么就将 127.0.0.1
修改为代理软件服务器的 ip
(需要有访问权限)。
修改 .gitconfig
文件
如果不喜欢在命令行中操作,也可以直接修改 C:/Users/${your username}/.gitconfig
文件,在文件末尾添加以下内容:
- 通过代理软件
HTTP
的端口
[https "https://github.com"]
# {port} 修改为代理软件的端口
proxy = https://127.0.0.1:{port}
- 通过代理软件
Sock5
的端口
[http "https://github.com"]
# {port} 修改为代理软件的端口
proxy = socks5://127.0.0.1:{port}
取消代理
通过命令行:
git config --global --unset https.https://github.com.proxy
也可以修改 C:/Users/${your username}/.gitconfig
文件,删除或注释 [https "https://github.com"]
区域的内容。
为 SSH
协议设置代理
在 GitHub上,通过第二种方式克隆仓库,走的就是 SSH
协议:
修改 .ssh/config
文件
找到 ~/.ssh
目录下的 config
文件(如果没有找到这个文件,那么新建即可)。
- 通过代理软件
HTTP
的端口config
文件末尾添加以下内容:
Host github.com
Hostname ssh.github.com
# git 在 window 下使用的代理软件为 connect
# -H为HTTP协议, -S指Socks 5协议
# {port} 修改为代理软件的端口
ProxyCommand connect -H 127.0.0.1:{port} %h %p
# 服务对应端口
Port 443
- 通过代理软件
Sock5
的端口config
文件末尾添加以下内容:
Host github.com
Hostname ssh.github.com
# git 在 window 下使用的代理软件为 connect
# -H为HTTP协议, -S指Socks 5协议
# {port} 修改为代理软件的端口
ProxyCommand connect -S 127.0.0.1:{port} %h %p
# 服务对应端口
Port 443
验证
先打开 git bash
,然后执行:
ssh -T git@github.com`
结果类似:
$ ssh -T git@github.com
Hi niluan304! You've successfully authenticated, but GitHub does not provide shell access.
类 Unix
系统
为 HTTP
协议设置代理
在 GitHub上,通过第一种方式克隆仓库,这里走的就是 HTTP
协议,修改起来也很简单:
命令行设置
- 通过代理软件
HTTP
的端口 在终端中执行以下命令:
# {port} 修改为代理软件的端口
git config --global https.https://github.com.proxy https://127.0.0.1:{port}
- 通过代理软件
Sock5
的端口 在终端中执行以下命令:
# {port} 修改为代理软件的端口
git config --global https.https://github.com.proxy socks5://127.0.0.1:{port}
可以发现,两者的命令极其相似,格式都为:
git config --global https.https://github.com.proxy {protocol}://{ip}:{port}
所以,凭个人喜好使用就好。
另外,如果代理软件并不在本地运行,那么就将 127.0.0.1
修改为代理软件服务器的 ip
(需要有访问权限)。
修改 .gitconfig
文件
如果不喜欢在命令行中操作,也可以直接修改 ~/.gitconfig
文件,在文件末尾添加以下内容:
- 通过代理软件
HTTP
的端口
[https "https://github.com"]
# {port} 修改为代理软件的端口
proxy = https://127.0.0.1:{port}
- 通过代理软件
Sock5
的端口
[http "https://github.com"]
# {port} 修改为代理软件的端口
proxy = socks5://127.0.0.1:{port}
取消代理
通过命令行:
git config --global --unset https.https://github.com.proxy
也可以修改 ~/.gitconfig
文件,删除或注释 [https "https://github.com"]
区域的内容。
为 SSH
协议设置代理
在 GitHub上,通过第二种方式克隆仓库,走的就是 SSH
协议:
修改 .ssh/config
文件
找到 ~/.ssh
目录下的 config
文件(如果没有找到这个文件,那么新建即可)。
- 通过代理软件
HTTP
的端口config
文件末尾添加以下内容:
Host github.com
Hostname ssh.github.com
# git 在 Linux 和 Mac 下使用的代理软件为 netcat,简称nc。
# -X 5 指代理协议Socks 5, -X 4 指代理协议Socks 4, -X connect指代理协议Socks HTTP
ProxyCommand nc -v -X 127.0.0.1:xxxx %h %p
# 服务对应端口
Port 443
- 通过代理软件
Sock5
的端口config
文件末尾添加以下内容:
Host github.com
Hostname ssh.github.com
# git 在 Linux 和 Mac 下使用的代理软件为 netcat,简称nc。
# -X 5 指代理协议Socks 5, -X 4 指代理协议Socks 4, -X connect指代理协议Socks HTTP
ProxyCommand nc -v -X 5 127.0.0.1:xxxx %h %p
# 服务对应端口
Port 443
验证
先打开 git bash
,然后执行:
ssh -T git@github.com
结果类似:
$ ssh -T git@github.com
Hi niluan304! You've successfully authenticated, but GitHub does not provide shell access.
如果遇到错误,可以删除 .ssh
目录中 known_hosts
文件后重试。