git提交大文件无法推送到远程库

如果1 - 5点解决不了可以参考第6点,1-5使用的指令是‘rm -g’ ,第6点使用的指令是‘git rm’

git rm 与 rm 的区别

  • git rm: 来删除文件,同时还会将这个删除操作记录下来;
  • rm: 来删除文件,仅仅是删除了物理文件,没有将其从 git 的记录中剔除;

提示:即使你已经通过 rm 将某个文件删除掉了,也可以再通过 git rm 命令重新将该文件从 git 的记录中删除掉

0、某一天开发完毕正常push到远程仓库时出现了以下报错:

git push -f
╰─➤  git push -f
Enumerating objects: 175, done.
Counting objects: 100% (161/161), done.
Delta compression using up to 6 threads
Compressing objects: 100% (70/70), done.
Writing objects: 100% (91/91), 159.49 MiB | 1.95 MiB/s, done.
Total 91 (delta 53), reused 52 (delta 17)
remote: Powered by GITEE.COM [GNK-6.2]
remote: error: File: 64fd85560b0e9c67391480665f702acb9b107977 158.15 MB, exceeds 100.00 MB.
remote: Use command below to see the filename:
remote: git rev-list --objects --all | grep 64fd85560b0e9c67391480665f702acb9b107977
remote: Please remove the file from history and try again. (https://gitee.com/help/articles/4232)
To gitee.com:ithelper/yl-ios.git
 ! [remote rejected] master -> master (pre-receive hook declined)

大概意思是存在大文件158.15mb,本次push无法正常提交,需要从之前的commit记录移除大文件才行

1、那么这个移除历史commit的提交的的命令为git filter-branch --tree-filter 'rm -f 文件路径’ HEAD

  • 但是有一点要注意的是,如果文件路径包含空格字符,需要用"" 括起来,如: 文件路径 = "developer app YL 2/ZFPlayer-demo(不能pod,可直接运行).zip"
  • 我这边执行成功的命令如下,仅供参考:
    git filter-branch --tree-filter 'rm -f 'developer app YL 2/ZFPlayer-demo(不能pod,可直接运行).zip'’ HEAD

2、执行成功后提示:

it filter-branch成功后

3、如果出现quote> 的情况就是引号的问题,应该都用单引号或者都用双引号

image.png

4、如果出现Cannot create a new backup.A previous backup already exists in refs/original/Force overwriting thebackup with -f ```

  • 需要加个-f git filter-branch -f --tree-filter
image.png

5、如果出现 WARNING: Ref 'refs/heads/master' is unchanged 需要回收仓库空间

  • 更新文件引用,回收仓库空间
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
git count-objects -v

6、列出所有仓库中的对象(包括SHA值、大小、路径等),并按照大小降序排列,列出TOP 20:

100644 blob 266fa1f45993b2ff569d237c15603b78bb5b4516 97895533   "release/2.2.9/\345\212\240\345\233\272/\345\212\240\345\233\272.rar"
100644 blob b3ebda491802e3feadf005bdff51edabf4d544b0 43542403   release/2.3.0/app-vm_2.3.0.zip
100644 blob 7c76c446f6e5dde511ec259735783beca93cd11d 50990378   "release/2.2.9/\345\212\240\347\255\276/app-Vmeng-release_2.2.9_35_signed.apk"
100644 blob d4d53797f55a41fc5ed74e69dfb891bde101d6fe 50848202   "release/2.2.9/\345\212\240\345\233\272/app-Vmeng-release_2.2.9_35.apk"
100644 blob 194651cbfdb0367b4674203af622d022fca56210 49795229   "release/2.2.9/\345\212\240\347\255\276/app-Vmeng-release_2.2.9_38_signed.apk"
100644 blob 8c7b9925a6d34934f47c4faccb83c3f1e0f6d5ec 49690079   "release/2.3.0/\345\212\240\347\255\276/app-vm_2.3.0_35_signed.apk"
100644 blob a7adb94ddccffbc022e7337e10d57ff58d09255e 49660092   "release/2.2.8/\347\255\276\345\220\215/app-Vmeng-release_2.2.8_35_signed.apk"
100644 blob 49a9edcc19f942a7329acf5fcaba09c18a7483e3 49598051   "release/2.2.9/\345\212\240\345\233\272/app-Vmeng-release_2.2.9_38.apk"
100644 blob 442b417d4cc5de86e8003d037d14356ec572630a 49547911   "release/2.3.0/\345\212\240\345\233\272/app-vm_2.3.0_35.apk"
100644 blob ff99cad129bd0de5751f575567550522afeb8f58 49518473   "release/2.2.8/\345\212\240\345\233\272/app-Vmeng-release_2.2.8_20200914105410_35.apk"
100644 blob ce83787c84b2254803a1ae3683d3305c906d5171 48656635   "release/2.3.0/\345\212\240\347\255\276/app-vm_2.3.0_38_signed.apk"
100644 blob bdd0f56750ea896fc41d7e479a217adb3adcbfd7 48617097   "release/2.2.8/\347\255\276\345\220\215/app-Vmeng-release_2.2.8_38_signed.apk"
100644 blob 25d2ac6ccdaf2aa22f9dba1f1cf9b1cd5c3ab4c1 48455273   "release/2.3.0/\345\212\240\345\233\272/app-vm_2.3.0_38.apk"
100644 blob 82af183b0c8ac5179746c7bba97316d017297318 48416545   "release/2.2.8/\345\212\240\345\233\272/app-Vmeng-release_2.2.8_20200914105503_38.apk"
100644 blob 1ebe17f16596223a88e28cb1c4a531a48b1f94ba 45720176   release/2.2.9/app-Vmeng-release_2.2.9.apk
100644 blob 09ec712df308727d08ba55489cb678ab97628fcc 44637304   release/2.3.0/app-vm_2.3.0.apk
100644 blob 79aaf28894e878007e814a5c38309cef64f37904 44614399   release/2.2.8/app-Vmeng-release_2.2.8.apk

7、找到需要删除的提交记录,比如7c76c446f6e5dde511ec259735783beca93cd11d是它的 id。找出该记录对应的文件,执行以下命令:

$ git rev-list --objects --all | grep 7c76c446f6e5dde511ec259735783beca93cd11d

8、重写所有 commit,将该文件从 Git 历史中完全删除:

$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch  release/2.2.9/加签/app-Vmeng-release_2.2.9_35_signed.apk' -- --all

9、应该可以push了

 git push

建议:大文件最好用其他方式传输一份给队友,同时git的ignore文件里面写入忽略大文件的提示

image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容