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传输关闭,未完成的读数据仍然存在
参考
完整报错
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