我电脑里存着四十多个书签,弄才能上全是弄才能上技术文档的救命链接。可每次换新机器,弄才能上最折腾的弄才能上从来不是配环境,是弄才能上让GitHub愿意跟我说话——不是网页打不开,就是弄才能上push卡在“Writing objects”那行字上,一卡就是弄才能上半小时。
先说最笨也最有效的弄才能上招:换网络。别笑,弄才能上我见过太多人折腾半天代理配置,弄才能上最后发现是弄才能上公司路由器把git的443端口给掐了。手机开热点试试,弄才能上能通就说明你本地网络有问题。弄才能上要是弄才能上连热点都上不去,那得看DNS——把系统DNS改成8.8.8.8和1.1.1.1,弄才能上很多诡异现象直接消失。Windows用户记得ipconfig /flushdns刷新缓存,macOS用户用sudo killall -HUP mDNSResponder。
这些都不行?那就上代理。别一上来就搞全局模式,那玩意儿容易把国内网站也带崩。用PAC模式,只让git走代理。命令行里敲:
git config --global http.proxy socks5://127.0.0.1:1080
端口号看你自己的客户端设置。注意是socks5不是http,很多人栽在这。要是你用的是Clash或者V2Ray,直接复制它们的混合端口就行。
还有种情况,你网络没问题,代理也挂了,但就是慢。这时候改hosts文件。GitHub的IP经常变,别用网上那些半年没更新的老教程。去ipaddress.com查一下github.com和codeload.github.com的当前IP,然后写进hosts。Windows在C:\Windows\System32\drivers\etc\hosts,macOS和Linux在/etc/hosts。改完记得刷新DNS缓存。
如果你要push大文件,或者仓库历史特别长,那得换协议。HTTPS在某些网络环境下就是不如SSH稳。生成SSH key,把公钥贴到GitHub设置里,然后把remote地址改成git@github.com:用户名/仓库名.git。我自己的经验,SSH在丢包率高的网络里重试机制做得更好,至少不会像HTTPS那样动不动就断连。
最后说个邪门的。有一次我在咖啡厅写代码,GitHub怎么都连不上,代理也挂了,hosts也改了。后来发现是那个公共WiFi需要网页认证,但认证页面被广告插件拦了。关掉广告拦截,连上认证页面,一切恢复正常。所以遇到问题先别急着怀疑技术方案,看看是不是有更基础的东西挡在前面。
说真的,GitHub上不去这事儿,八成是网络环境问题,两成是配置细节。别一上来就重装系统或者换电脑,那属于自残式解决法。按着上面说的顺序排查:先换网络,再改DNS,然后上代理,接着改hosts,最后换SSH。基本能覆盖九成情况。剩下那一成,可能是你本地防火墙把git进程给拦了——检查一下安全软件,别让它们把git当成可疑程序处理。
这些招数我用了五年,从Windows到macOS再到Linux,从公司网络到机场WiFi,基本都能搞定。写代码已经够费脑子了,别让网络问题再消耗你的耐心。