为git设置代理

git clone 的速度慢到无法忍受,提供一些解决方案。

减小下载量

方案一

git clone 默认会下载项目的完整历史版本,如果你只关心最新版的代码,而不关心之前的历史信息,可以使用 git 的浅复制功能:

1
git clone --depth=1 https://github.com/bcit-ci/CodeIgniter.git

–depth=1 表示只下载最近一次的版本,使用浅复制可以大大减少下载的数据量,例如,CodeIgniter 项目完整下载有近 100MiB ,而使用浅复制只有 5MiB 多,这样即使在恶劣的网络环境下,也可以快速的获得代码。

如果之后又想获取完整历史信息,可以使用下面的命令:

1
git fetch --unshallow

方案二

如果你只是想下载最新的代码看看,你也可以直接从 GitHub 上下载打包好的 ZIP 文件,这比浅复制更快,因为它只包含了最新的代码文件,而且是经过 ZIP 压缩的。但是很显然,浅复制要更灵活一点。

使用代理

HTTP与HTTPS代理

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

使用上面的命令配置完之后,会在 ~/.gitconfig 文件中多出几行:

1
2
3
4
[http]
proxy = http://proxyuser:proxypwd@proxy.server.com:8080
[https]
proxy = https://proxyuser:proxypwd@proxy.server.com:8080

可以使用下面的命令检查配置是否生效:

1
2
$ git config --global --get http.proxy
$ git config --global --get https.proxy

如果你想取消该设置

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

在命令行中配置代理

要注意的是使用 git config –global 配置的代理只能供 git 程序使用,如果你希望让命令行中的其他命令也能自动使用代理,譬如 curl 和 wget 等,可以使用下面的方法:

1
2
$ export http_proxy=http://proxyuser:proxypwd@proxy.server.com:8080
$ export https_proxy=https://proxyuser:proxypwd@proxy.server.com:8080

这样配置完成后,所有命令行中的 HTTP 和 HTTPS 请求都会自动通过代理来访问了。如果要取消代理设置,可以:

1
2
$ unset http_proxy
$ unset https_proxy

还有一点要注意的是,使用 http_proxy 和 https_proxy 只对 HTTP 和 HTTPS 请求有效,所以当你 ping www.google.com 的时候如果 ping 不通的话,也就没什么大惊小怪的了。

检查生效的话用wget www.google.com就行了。

proxychains4

安装

1
2
3
4
5
6
7
8
9
git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure
(sudo) make && make install
cp ./src/proxychains.conf /etc/proxychians.conf
cd .. && rm -rf proxychains-ng
或者
brew install proxychains-ng //mac

修改配置

1
2
3
4
5
6
7
8
9
10
11
12
vim /etc/proxychains.conf
推荐配置
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode
[ProxyList]
socks5 127.0.0.1 1080

使用例子

1
2
3
4
proxychains4 curl https://www.twitter.com/
proxychains4 git push origin master
wget https://www.dropbox.com -v -O /dev/null //直接输入这条语句连接不了
proxychains4 wget https://www.dropbox.com -v -O /dev/null //加入proxychains4之后就可以顺利执行

参考资料

[1] git clone 太慢怎么办?
[2] 为 git 配置代理
[3] git代理配置
[4] proxychains+shadowsocks神器