Git使用过程中遇到的那些坑

克隆成功但检出失败

原因1: 文件名过长

解决方案1:在Cmd或者GitBashHere运行以下指令

git config --global core.longpaths true

其中 --global表示全局,即对所有仓库生效,但是他只对同一个用户的仓库生效,如果要对所有用户生效(这里的用户指的是当前操作系统登录的账户),可以将 --global改为--system

读取边带包时意外断开 致命:早期EOF 致命:获取包:无效的索引包输出

错误提示:

error: 7825 bytes of body are still expected 
fetch-pack: unexpected disconnect while reading sideband packet 
fatal: early EOF 
fatal: fetch-pack: invalid index-pack output

原因1:项目太大,网速太慢

解决方案1:修改git的缓存区大小

git config --global http.postBuffer 1048576000

1048576000(1G)

解决方案2: 分段克隆 先下载一部分,再下载剩下的

首先关闭 core.compression

git config --global core.compression 0

compression 是压缩的意思,从 clone 的终端输出就知道,服务器会压缩目标文件,然后传输到客户端,客户端再解压。取值为 [-1, 9],-1 以 zlib 为默认压缩库,0 表示不进行压缩,1…9 是压缩速度与最终获得文件大小的不同程度的权衡,数字越大,压缩越慢,当然得到的文件会越小

然后使用depth这个指令来下载最近一次提交

git clone --depth 1 url

–depth 1的含义是复制深度为1,就是每个文件只取最近一次提交,不是整个历史版本。

然后获取完整库

git fetch --unshallow 

最后pull一下查看状态,问题解决

git pull --all

原因2:网络不稳定,建议切换协议,使用ssh连接

解决方案就不写了,直接百度你的git服务商如何使用ssh连接,例如我使用的是自己部署的gitlab,我就去百度一下gitlab如何使用ssh连接,你如果使用的是github,就去百度github如何使用ssh连接

涂抹过滤器LFS失败 smudge filter lfs failed

参考 : Smudge filter failed with a fresh new clone · Issue #911 · git-lfs/git-lfs (github.com)

解决方案

// 这个命令用于安装Git LFS钩子,但是跳过smudge过程。Smudge过程是指在checkout时自动将LFS指针文件替换为实际的大文件,这个过程可能会比较慢,特别是当有很多大文件时。使用--skip-smudge选项可以加快clone过程,因为它不会立即下载所有的大文件。
git lfs install --skip-smudge
// 重新克隆你的项目
git clone ...
// 在克隆完成后,使用这个命令来拉取所有的大文件。因为之前使用了--skip-smudge选项,所以这些文件不会在克隆时自动下载,现在需要手动拉取这些文件。
git lfs pull
// 这个命令用于重新启用smudge过程。--force选项确保即使之前已经安装了钩子,它也会被覆盖。这样在后续的操作中,任何新的LFS文件都会在checkout时自动下载。
git lfs install --force

RPC失败;Curl 18传输关闭,未完成的读数据仍然存在

参考

关于git拉取项目时,报RPC failed; curl 18 transfer closed with outstanding read data remaining错的解决方案-腾讯云开发者社区-腾讯云 (tencent.com)

完整报错

error: RPC failed; curl 18 transfer closed with outstanding read data remaining
error: 35 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: protocol error: bad pack header

之前在从git远程库拉取项目的时候,出现了如上错误,因为拉取时间过长才报的错,所以猜测是内存或者项目过大导致的无法拉取,所以搜了搜,网上说是解决方案有三种,一种是增大缓存区;二是浅克隆,也就是说克隆的时候,先少克隆一些,比如只克隆每个文件只取最近一次提交,不是整个历史版本,三是换协议:具体解决方案如下:

一,加大缓存区

git config --global http.postBuffer 524288000

这个大约是500M

二、少clone一些,–depth 1

git clone https://github.com/flutter/flutter.git --depth 1

–depth 1的含义是复制深度为1,就是每个文件只取最近一次提交,不是整个历史版本。

三、换协议 clone

http方式换成SSH的方式,即 https:// 改为 git:// 例如git clone https://github.com/test/test.git 换成git clone git://github.com/test/test.git

Github网络问题

科学上网后,浏览器可以访问Github,但是git无法拉取代码

提示超时

原因

git需要设置代理,此处我使用的是clash,所以代理地址是 "127.0.0.1:7890"

解决方案

设置代理

git config --global http.proxy '127.0.0.1:7890'
git config --global https.proxy '127.0.0.1:7890'

查看代理

git config --global --get http.proxy
git config --global --get https.proxy

取消代理

git config --global --unset http.proxy
git config --global --unset https.proxy
最后修改:2024 年 12 月 13 日
如果觉得我的文章对你有用,请随意赞赏