- 記一次 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導致的。用git@github.com:替換掉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 = “1129802827@qq.com”
[url "git@github.com:"]
insteadOf = https://github.com