1. remote:error:File:××× exceeds 100.00 MB. \cdots remote:Please remove the file from history and try again.

  • 问题:上传文件超出远程仓库的限制
  • 解决:

方案一:撤销上一次 commit,会退到上一次 commit 前的状态,然后移除超出限制的文件,重新上传。

1
git reset HEAD^     # 撤销上一次 commit

【注意事项】
若不小心错误回退到上次版本,需要撤销 reset 操作,则可以使用以下代码查看 git HEAD 变化的历史记录。

1
git reflog

然后使用 git reset 回退到的历史记录:

1
git reset XXX   # XXX 为想要会退到的历史记录的 HEAD

当然,这种方法也能解决上传文件超出远程仓库的限制而导致的上传失败问题。

方案二:删除大文件的提交记录。

  1. 首先根据报错提示的记录 id(此处以 d0781e7d125599010f4885fa95802a1d7018cd44 为例)查询该大文件的路径:
1
git rev-list --objects --all | grep d0781e7d125599010f4885fa95802a1d7018cd44

得到该大文件路径为 data/data.mp4
2. 然后将该文件从历史记录中删除:

1
git log --pretty=oneline --branches -- data/data.mp4 
  1. 最后重写所有的提交:
1
git filter-branch --index-filter 'git rm --cached --ignore-unmatch data/data.mp4' -- --all

2. fatal: unable to checkout working tree. warning: Clone succeeded, but checkout failed.

  • 问题:成功 Clone,但是目录下的文件并没有恢复,原因在于目录中存在文件名不符合规范的文件。
  • 解决:对于由于长文件名导致的问题,可以修改 git 配置:
1
2
git config --system core.longpaths true
git config --global core.longpaths true

对于由于文件名中存在非法字符,需要修改远程仓库的文件名后在重新 pull 一下。

【注】windows 下的文件名要求:文件名、文件夹名不能包括的符号 \、/、:、*、?、"、<、>、|

3. fetch-pack: unexpected disconnect while reading sideband packet

  • 问题:使用 ssh 认证能连上 Gitee,但 git clone Gitee 上的仓库报错,git 版本及报错信息如下:
1
2
3
4
5
6
7
8
9
(base) ➜  ~ git --version                         
git version 2.33.0
(base) ➜ ~ ssh -T git@gitee.com
Hi BlueHeart0621! You've successfully authenticated, but GITEE.COM does not provide shell access.
(base) ➜ ~ git clone git@gitee.com:blueheart0621/OS.git
Cloning into 'OS'...
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
  • 原因:git 版本 2.33.0 是目前最新的,它修改了 sideband 的处理方式,导致 Gitee 服务器处理 git clone 的 ssh 连接时有问题,Gitee 的技术人员正在努力排查中(相信不久就会解决)。
  • 解决:降低 git 的 protocol 版本:
1
git config --global protocol.version 1

4. fatal: unable to access 'xxx': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

  • 问题:仓库网站证书有问题,无法通过验证。

比如最近 2021 年 9 月 30 日,Let’s Encrypt 组织使用的 IdentTrust DST Root CA X3 根证书过期,因此很多使用了 Let’s Encrypt 签发的证书但没有及时更新证书的网站都受到了影响。

  • 解决:在 git clone 时不启用证书验证:
1
GIT_SSL_NO_VERIFY="true" git clone xxx