关于git代理的使用姿势
上午用git下载两个带测试集、训练集的AI工程,不使用Proxy,确实给恶心的不要不要的。。。
通常使用代理主要原因无非有二:
访问速度实在令人发指 unable to access '...' Couldn't resolve host '...'
的情况,没办法只能科学上网解决
正常我们从github
获取repo
通常是这样的
Cloning into 'xxx'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (9/9), done.
Receiving objects: 16% (359/2241), 100.01 KiB | 29.00 KiB/s
下载速度只有29kib/s
,对于稍微大点儿的repo
来说显然等的让人焦心。好在一般工作都会提供一些代理,用上代理访问github repo
速度就有了质的飞跃:
Cloning into 'xxx'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (9/9), done.
Receiving objects: 96% (2171/2241), 10.05 MiB | 4.85 MiB/s
好比单车变火箭🚀。
因为之前使用的代理比较粗暴裸着没有认证,所以使用起来比较简单:
alias proxy='export all_proxy=http://yourproxydomain:port'
或者你想精细化区分http
和https
代理
alias httpProxy='export http_proxy=http://yourproxydomain:port'
alias httpsProxy='export https_proxy=http://yourproxydomain:port'
都不需要进行git config
配置。不过最近裸着的代理终于给加上认证了,直接使用上面的方式来download github
的repo就不好使了。
既然有了认证,那么使用代理自然需要用户名密码,上面代理需要改成如下配置:
alias proxy='export all_proxy=http://username:password@yourproxydomain:port'
alias httpProxy='export http_proxy=http://username:password@yourproxydomain:port'
alias httpsProxy='export https_proxy=http://username:password@yourproxydomain:port'
有了上面配置访问网址啥的没啥问题,但是git clone
时会失败:
Cloning into 'xxx'...
fatal: unable to access 'https://github.com/xxx/xxx.git/': Proxy CONNECT aborted
因为有了认证代理,git
需要设置下认证方法为basic
git config --global http.proxyAuthMethod 'basic'
这样使用终端代理配置加上git代理方法的设置问题就解决了。以上这些仅是个人的配置,如果你觉得麻烦,网上也有很多插件供你选择使用。
当然git
也专门提供了关于代理配置,我们可以不设置终端代理让git
自己走代理,接下来一起来看看吧
git代理配置
git
通常支持https
和ssh
两种协议,因为使用协议不同,它们代理的配置也有很大差异。
Http配置代理
git http
代理的配置比较简单,一条命令即可解决:
git config --global http.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
或者你也可以对指定域名进行代理:
git config --global http.https://domain.com.proxy http://proxyUsername:proxyPassword@proxy.server.com:port
git config --global http.https://domain.com.sslVerify false
如果你使用了中间人Https代理,需要将http.<url>.sslVerify
设置为false
。或者,你可以获取证书链的根CA,并使用http.sslCAInfo
或http.sslCAPath
来指定。
上面这些命令会最终记录在~/.gitconfig
文件中:
[http]
[http "https://domain.com"]
proxy = http://proxyUsername:proxyPassword@proxy.server.com:port
sslVerify = false
当你遇到unable to access 'https://...': Unknown SSL protocol error in connection to ...:443
你也可以针对当前repo
操作单独使用-c http.sslVerify=false
设置ssl检验开关。
git -c http.sslVerify=false clone https://domain.com/path/to/git
一旦repo
克隆成功,你也可以针对当前repo
设置sslVerify
,其设置结果作用于当前repo
的.git/config
中,注意这里没有--config
git config http.sslVerify false
查看当前的配置
展示当前全局http
配置,即~/.gitconfig
中的http
部分
git config --global --get-regexp http
取消代理或ssl verification配置
使用--unset
可删除特定属性的配置。如取消http.proxy
或http.sslVerify
:
git config --global --unset http.proxy
git config --global --unset http.https://domain.com.proxy
git config --global --unset http.sslVerify
git config --global --unset http.https://domain.com.sslVerify
ssh代理配置
git ssh
的代理配置保存在~/.ssh/config
中,如果没有可以创建一个。配置格式如下:
对于需要认证的代理需要安装下
ncat
。mac
下brew install nmap
即可。
# 例如github.com的配置
# User、Hostname、Port 为ssh登录的服务器配置
# 注意的是这里的 User 应该是 git,而不是你在该网站上注册的用户名。 其他网站可以根据具体情况设置
Host github.com
User git
Hostname github.com
Port 22
Proxycommand /usr/bin/ncat --proxy proxy.server.com:port --proxy-type http --proxy-auth proxyUsername:proxyPassword %h %p
如果Host
设置为*
,则此配置会应用到没有独立配置的ssh连接中。--proxy-type
可以设置代理使用的协议,如:http ,socks4,socks5
这样就可以愉快使用代理了。当然感兴趣也可以man git-config
查阅,相信很多问题可以迎刃而解。
如果阅读过程中发现本文存疑或错误的地方,可以关注公众号留言。如果觉得还可以 帮忙点个在看😁