0. 问题配景
最近因为工作需要,在一台新电脑(windowsPC, WSL)上搭建开发情况的时候,碰到了一个 git 错误。因为这些年都是在利用 IDE 集成的 git 操作来做控制版本,导致有相当一段时间没有利用 git 命令行操作,不免有些陌生,这次碰到的问题并不难,但照旧有必要记录一下,巩固基础,供本身和各人学习参考。
1. 问题分析
问题是在利用 git clone 命令从远端代码仓库拷贝项目到本地的时候报错的。如下所示:
- git clone https://github.com/XXX/MyGitPractice.git
- Cloning into 'MyGitPractice'...
- remote: Enumerating objects: 23, done.
- remote: Counting objects: 100% (23/23), done.
- remote: Compressing objects: 100% (10/10), done.
- error: RPC failed; curl 18 transfer closed with outstanding read data remaining
- fatal: The remote end hung up unexpectedly
- fatal: early EOF
- fatal: unpack-objects failed
复制代码 众所周知,git clone 有两种方式: HTTP 或 SSH 毗连长途呆板。
我这里利用的是 HTTP 方式,因为它相比 SSH 而言,更简朴、更常用一些(起码不需要用户名)。这个方式通常情况下都没什么问题,但是有些特殊情况就会踩坑,好比刚好就是我这次碰到的问题。我们根据命令行的操作返回结果(报错信息)来逐行分析:
- 前 3 行的信息都来自长途呆板的提示,可以看到都是顺遂完成的。
- 第 4 行是 error 信息,提示是由 RPC failed 引起的,传输关闭了,但是另有没读完的数据。
- 最后 3 行是 fatal 信息,长途呆板不测挂起 + EOF + 解包对象失败。
所以,分析问题从第 4 行开始。此中,RPC 是长途过程调用(Remote Procedure Call),失败的缘故原由 —— 要么是毗连的时候有问题,要么就是毗连以后传输数据的时候有问题。
这里开端判断是属于后者,因为提示信息有提到 “with outstanding read data remaining(另有没读完的数据)”。网上搜刮查询了一下,发现很多人说这个错误的缘故原由是要拷贝的数据量太大,导致 http 的 buffer 溢出,崩溃了。那么对应的 解决方法分为三类:
[ 方法一 ]:增加 Git 的 HTTP 缓冲区巨细。设置 http.postBuffer 的值。
- git config --global http.postBuffer 524288000
复制代码 [ 方法二 ]:化整为零,分成多次来操作,使得每次要拷贝数据的巨细变小一些。
这个方法不可行,因为要克隆的项目本身就是一个整体,而且分开多次操作也比较麻烦。
[ 方法三 ]:更换长途毗连方式,利用 SSH。
这就属于直接“更换赛道”,跳出当前问题场景,实验在新场景下告竣终极目标了。
2. 问题解决
根据上面的分析,我们需要选择一个方法来解决问题。
首先,[ 方法二 ]太麻烦直接 pass 掉。
其次,[ 方法一 ]通过更改 buffer 值又有局限性(即不能确定到底多大的buffer值是符合的,因为差别的代码仓库的数据巨细各有差别)。
所以,终极选择了[ 方法三 ],利用 SSH。究竟这种数据量太大的情况(尤其是单个文件巨细比较大的)并不常见。
具体操作:
如果没安装 ssh-server 的话,需要先安装一下(如果已安装则直接跳过):
- sudo apt install openssh-server
复制代码 然后生成 (一般都是 rsa 类型)ssh key ,(如果已生成过 key 则直接跳过):
密钥文件生成在 $HOME/.ssh下这个隐蔽目录下,默认的文件名是 “id_rsa.pub”。可以直接利用cat 命令查看并复制 ssh-key 公钥内容:
- Step1: 添加 ssh-key 公钥到 github
在GitHub的个人账号中,找到 “SSH and GPG keys” 选项,按照提示添加 ssh key。如图所示,这个是添加了以后的截图:
在本地情况可以用如下命令来验证是否成功生效,运行命令以后会提示 “本地与长途呆板的认证还没创建,是否需要继续毗连”,选择 “yes” 以后,就会出现认证成功的接待信息。结果如图所示:
- Step2: 利用SSH 方式 重新运行 git clone 命令:
至此,我们可以看到长途代码仓库已经成功的复制到本地了。
3. 问题总结
基础很重要,命令行的利用必不可少。
碰到问题,分析问题,最后选择适合本身的方法解决来问题最重要。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |