问题描述, git clone 拉取远程项目失败:
新手上github,如果用git clone <项目地址> 命令拉取开源项目, 经常会遭遇失败问题
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
error: 2959 bytes of body are still expecte
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
问题解析, 网络不行:
这通常意味着在数据传输过程中发生了意外断开。这个问题可能由多种原因引起,包括网络问题、服务器问题或Git配置问题。因为众所周知的原因, 这个问题在本地遭遇很多。
三次尝试, 解决方案:
(1) 增加Git的HTTP缓冲区大小:可以尝试增加Git操作时的缓冲区大小,这可以通过以下命令完成:
git config --global http.postBuffer 524288000
(2) 增加Git的网络超时设置:可以通过调整Git的网络超时设置来给予更长的时间来完成数据传输:
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
尝试后问题没解决, 继续的方案:
(3) 使用浅克隆:如果不需要完整的项目历史,可以执行浅克隆以减少下载的数据量:
git clone --depth 1 https://github.com/username/repository.git
尝试成功.
答案解析, 浅克隆:
-
git clone
:这是 Git 用来克隆远程仓库到本地的命令。 -
--depth 1
:这是一个选项,用于指定克隆时的深度。这里设置为 1,意味着只克隆最新的一次提交历史。这通常被称为浅克隆(shallow clone)。 -
浅克隆优点:
-
速度:浅克隆可以加快克隆速度,因为你不需要下载整个项目的历史记录。
-
空间:减少磁盘空间的使用,因为不包括完整的提交历史。
-
便利性:如果你只需要最新版本的代码,这是一个快速获取代码的方式。
-
-
缺点:
-
历史记录:没有完整的提交历史,这对于需要查看项目历史或进行某些类型的历史分析是不足的。
-
分支和标签:浅克隆默认不包括分支和标签信息,除非你特别指定。
-
无法推送:如果你是想为项目做贡献,浅克隆的仓库不能直接推送到远程仓库,因为缺少完整的历史记录。
-
延伸, 克隆完整仓库 :
如果你已经克隆了浅仓库并想要转换为完整仓库,可以使用以下命令:
cd <your repository>
git fetch --unshallow
通过两次拉取的方式最终完整可以拉到了整个项目.
延伸, 能否使用
延伸, 能否使用 --depth 2
或更多
可以使用 --depth 2
或更高的数字来指定更深的克隆。这将克隆更多的提交历史,但不会是完整的历史记录。例如:
-
--depth 2
:这将克隆最新的两次提交。--depth 5
:这将克隆最新的五次提交。
使用更大的深度可以提供更多的历史记录,这在需要查看或回溯到较近的特定提交时很有用,但又不需要完整的历史记录。
选择克隆的深度取决于你的需求:
-
如果你只需要最新的代码,
--depth 1
是合适的。
如果你需要查看最近的几次提交或进行一些基于最近提交的比较,可以选择更高的深度。
如果你需要完整的历史记录,不要使用--depth
选项,直接使用git clone
命令。