本篇文章主要基于小靳同学解决gitpush/pull/clone操作时的443错误/GitHub无法访问问题, 作者记录一下自己的理解

问题引入

作者萌新在刚学会git后就开始用git对大作业进行版本控制,但是在git push的时候,总是会遇到很糟心的timeout,具体报错如下:

1
Failed to connect to github.com port 443 after 21074 ms: Timed out

一开始感觉很玄学,虽然知道github是处于一种科学与非科学的量子叠加态的,但是不论是科学还是非科学上网都会有这样的报错,可能需要反复push好几次才有可能有一次成功。于是作者查阅了一些相关的资料,有了一点解决的方法,希望能够帮助到与作者有相似情况的读者。相比于小靳同学的文章,我这里只介绍我自己实践验证后成功的方式。

解决方法

1、在自己的科学上网的软件上可以很容易查找到自己的端口号,例如 V2某 的界面中就非常直观可以看到端口一列,在cla某的general第一行就是端口号。其他方式的科学上网端口号位置可以自己搜索

2、(可选) 就是在给git设置代理之前,先检查是否已经有代理了,在git中输入以下指令检查代理设置情况

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

3、设置git代理,指令如下:

1
2
git config --global http.proxy 'http://127.0.0.1:7890' // 7890替换成自己的端口号
git config --global https.proxy 'http://127.0.0.1:7890' // 7890替换成自己的端口号

这两个指令分别将git的http和https协议的代理为本地的http代理。通过这个设置,我们执行git push操作的时候,git会根据这个代理来建立网络连接。如果没有这个设置,git会直接连接到远程仓库进行push操作,这种情况下只有网络环境可以直接访问外网才能稳定的实现push操作。

4、(可选)使用2中的检查代理设置指令可以检查3中的代理是否设置成功

结语

解决gitpush/pull/clone操作时的443错误/GitHub无法访问问题 一文中的情况3下面,还有一个设置socket代理的指令,由于我对socket代理不是很熟悉,所以本文没有提到相关设置。但是有一点值得一提,socket代理和http代理本身是互斥的,一个简单的例子:如果先给git设置了本地socket代理,再设置本地http代理,后设置的本地http代理将会覆盖前面的本地socket代理,最后效果就等价于只设置了本地http代理。因此对于使用socket代理还是http代理的问题,读者可以选择自己比较熟悉的一种方式去设置。