- 记一次 pod 安装三方库报
SSL_ERROR_SYSCALL in connection to github.com:443
错误的解决
问题
2021 6 月接手了一个 Flutter 开发的新项目,在 clone 完项目之后,首次运行提示我需要先要执行 pod install
,于是我在终端执行了 pod install
,等了好久结果报SSL_ERROR_SYSCALL in connection to github.com:443
的错误,我重新执行了pod install --verbose
, 发现pod
在安装PromiseKit
的时候报的错误,于是我在网上开始查找解决方案,噩梦就此开始....
尝试解决
百度
我将SSL_ERROR_SYSCALL in connection to github.com:443
的错误复制到百度搜索,出来了好多结果,我选了几个感觉比较靠谱的去尝试,大致归为以下几种解决方案:
-
- 如果开启了代理上网,把代理上网关闭,然后终端执行
git config --global --unset http.proxy
git config --global --unset https.proxy
然后再次尝试 pod install
-
- 打开代理上网,并在
.gitconfig
配置http
和https
的代理
打开网络偏好设置->高级->代理, 查看本机socks代理的端口号,
[http "[https://github.com](https://github.com)"] proxy = socks5://127.0.0.1:本机 socks 代理端口号
保存,关闭,再次尝试pod install
- 打开代理上网,并在
-
- 在
.gitconfig
修改git
的缓存
git config --global http.postBuffer 4194304000
然后再次尝试
- 在
以上三种都是对.gitconfig 文件中的脚本进行修改,需要注意的是文件中的格式一定要正确,注意文本的对齐方式,要与之前的保持一致
- google上搜索出来的结果不多无非也是以上几种
gem ruby cocoapods 上的操作
- 查看了
pod
的源, 然后按照网上的修改后,再尝试不行 - 更新
pod
版本到 1.10.1,然后再尝试还是不行 - 更新
gem
再尝试还是不行 -
ruby
版本由 2.6.0 升级到 2.7.3 还是不行 - 更新
xcode
到 12.3 还是不行 - 重新设置命令行,还是不行
- 删除之前安装的
cocoapods
重新安装还是不行
网络
- 看到网上有人说需要多试几次,有可能网络不行,多试几次有可能成功,我尝试了 N 多次 还是不行
- 使用公司网还是家里的网络都不行
- 不论是白天还是深夜都不行
- 使用手机热点网络还是不行
其他
- 中间关机重启了 N 次也不行
- 升级系统到最新也不行
- 我注意到在
pod install
的时候每次都是在安装promiseKit
的时候报这个错误,原因是promiseKit
有好多submodule
,在git clone
这些submodule
的时候就会有不固定的一部分submodule
在clone
的时候报出SSL_ERROR_SYSCALL in connection to github.com:443
的问题,于是我想手动把这些submodule clone
下来然后放进去,结果还是不行
.gitconfig 配置
- 对比了两位同事的
gitconfig
文件的配置,除了代理和用户信息外感觉其他没什么区别
经过了上面的各种尝试,我能想到还可以尝试的方法就是重装系统了,由于重装系统及配置相关环境和文件 copy
时间比较久,这种方法我暂时没实施
解决
在我等待合适时机重装系统的时候,转机出现了,有另外一位同事也加入了这个项目的开发,他也遇到了同样的问题,他尝试了一番后也是不行,我建议他重装系统尝试一下,然后他重装了系统,配置了相关环境之后竟然成功了。他的另一台电脑依旧不行,然后他对比了两台电脑的 .gitconfig
文件的配置,发现重装系统后的文件中多了一段[url "https://hub.fastgit.org"] insteadOf = https://github.com
的脚本,于是将这段脚本赋值到不成的电脑上再次pod install
竟然也能成功了。
这里需要注意.gitconfig
文件中的格式一定要正确,不然没用的
我将.gitconfig
文件中的完整内容贴在下面以供参考,
[core]
excludesfile = /Users/***/.gitignore_global
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[user]
name = “***”
email = “***”
[url "https://hub.fastgit.org"]
insteadOf = https://github.com
注意: 要根据用户情况修改user 中的信息和 core 中的路径
后续
在后面使用某些第三方的时候报错:fatal: could not read Username for Error: fatal: could not read Username for 'https://hub.fastgit.org': terminal prompts disable The process '/usr/bin/git' failed with exit code 128
这里是因为我们将https://github.com全局替换为https://hub.fastgit.org导致的。用[email protected]:替换掉https://hub.fastgit.org既可解决这个错误。解决后.gitconfig
文件中的内容如下:
[core]
excludesfile = /Users/jiwenzhang/.gitignore_global
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[user]
name = “zhangjiwen”
email = “[email protected]”
[url "[email protected]:"]
insteadOf = https://github.com