终端下 GitHub 仓库 clone 龟速问题
前提:自己有可用的代理,这里以ip:port为127.0.0.1:1080为例。
1. 是真的慢!
在使用 ssh 协议方式 git clone
自己在 GitHub 上的代码库时,经常是这样的:
$ git clone git@github.com:xsddz/notes.nand2tetris.git
Cloning into 'notes.nand2tetris'...
remote: Enumerating objects: 958, done.
Receiving objects: 8% (80/958), 33.03 MiB | 10.00 KiB/s
Receiving objects: 8% (80/958), 33.12 MiB | 9.00 KiB/s
10KiB/s 的往下走,有时还会经常卡半天,敲多少回车都没用。
2. 并没有卵用...
网上查阅资料,大都是说要这样设置,
git config --global http.proxy "http://127.0.0.1:8080"
git config --global https.proxy "http://127.0.0.1:8080"
或者这样,使用sock5,
git config --global http.proxy "socks5://127.0.0.1:1080"
git config --global https.proxy "socks5://127.0.0.1:1080"
但是,我在设置之后,发现并没有卵用。
另,如果要查看 git 的配置文件位置,可以这样,
$ git config --list --show-origin
file:/Library/Developer/CommandLineTools/usr/share/git-core/gitconfig credential.helper=osxkeychain
file:/Users/zhangwu/.gitconfig user.email=zhangwu@xxx.com
file:/Users/zhangwu/.gitconfig color.ui=true
file:/Users/zhangwu/.gitconfig format.pretty=format:%Cred%h%Creset - %C(yellow)%d%Creset %Cgreen(%ad) %C(bold blue)<%an>%Creset %s
file:/Users/zhangwu/.gitconfig log.date=iso
file:.git/config core.repositoryformatversion=0
...
3. 真的快了!!
后来我才明白,上面这些都是设置的 http/https 代理,只对走 http/https 协议的网络请求有效,比如下面这样,
$ git clone https://github.com/xsddz/notes.nand2tetris.git
那么,对于使用 ssh 协议方式,该怎么办呢?于是我又查阅了资料,发现需要这样设置,
// 修改 ~/.ssh/config 文件(不存在则新建),添加以下内容,其中
// 1) ProxyCommand 为ssh的一个配置指令, 用于 ssh 客户端与服务器之间的隧道通信;
// 2) nc 为系统自带的 netcat 工具;
// 3) -X 5 表示使用 socks5 代理,后面跟上对应的 ip:port;
// 4) %h 和 %p 原样保留。
Host github.com
ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p
于是奇迹出现了,
$ git clone git@github.com:xsddz/notes.nand2tetris.git
Cloning into 'notes.nand2tetris'...
remote: Enumerating objects: 958, done.
remote: Total 958 (delta 0), reused 0 (delta 0), pack-reused 958
Receiving objects: 100% (958/958), 186.01 MiB | 256.00 KiB/s, done.
Resolving deltas: 100% (420/420), done.
Updating files: 100% (476/476), done.