关于git代理的使用姿势

光华路程序猿

共 4502字,需浏览 10分钟

 ·

2021-04-06 12:44

上午用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'

或者你想精细化区分httphttps代理

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通常支持httpsssh两种协议,因为使用协议不同,它们代理的配置也有很大差异。

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.sslCAInfohttp.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.proxyhttp.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中,如果没有可以创建一个。配置格式如下:

对于需要认证的代理需要安装下ncatmacbrew 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查阅,相信很多问题可以迎刃而解。





如果阅读过程中发现本文存疑或错误的地方,可以关注公众号留言。如果觉得还可以 帮忙点个在看😁





浏览 47
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报