当前位置:   article > 正文

Git提交到Gitee,版本库中有大文件报错 error: File: xxxxxx的解决办法_git推送大文件报错

git推送大文件报错

 

目录

一、问题原因

二、解决办法

1、查询异常文件名

2、查询异常文件名所在历史版本信息

3、删除该文件在版本库中的所有记录

4、再次提交成功

5、清理引用

三、用到的命令解析


  如果您对GIT不是了解,推荐从头开始看本栏目系列文章。本系统文章包括安装GIT、在命令行创建版本库GIT分支操作推送至Github;在IDEA中创建版本库GIT分支操作提交Github提交Gitee提交Gitlab安装Gitlab

一、问题原因

当Git仓库中有大文件,然后推送到Gitee时会报错error: File: xxxx,如下图

如果使用了下命令任然不能解决问题,那您可以参考后面的办法。

git rm --cached xxx/bigfile.file

git commit -m xxxxx

二、解决办法

1、查询异常文件名

复制提示错误的文件号(错误的文件号在前面问题中已经用红线标出,如a4be1305975be5fcb748379b7f6fc0bcacceb3ca),使用git log命令查询是那个文件导致出错(假如是xxx/bigfile.file)。

执行命令:git rev-list --objects --all | grep a4be1305975be5fcb748379b7f6fc0bcacceb3ca

2、查询异常文件名所在历史版本信息

根据文件名(上面查询结果中可以看到,如xxx/bigfile.file)查询出在那些历史版本包含该文件

执行命令:git log --pretty=oneline --branches --  xxx/bigfile.file

3、删除该文件在版本库中的所有记录

执行删除命令:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch xxx/bigfile.file' --prune-empty --tag-name-filter cat -- --all

执行成功后如下图所示,会删除所有版本中的记录。您可以重复执行第1、2来检验是否删除成功。

4、再次提交成功

执行命令:git push origin master --force

5、清理引用

git reflog expire --expire=now --all

git gc --prune=now

三、用到的命令解析

1、git rm --cached xxx/bigfile.file

从 Git 的索引中删除 xxx/bigfile.file 文件的跟踪。但不会删除实际的物理文件。也就是说只在git版本库中删除,硬盘上这个文件还在。

  • rm:表示删除。
  • --cached:表示只从 Git 的索引中删除文件,而不删除实际物理文件。
  • xxx/bigfile.file:表示要删除的文件路径。

2、git commit -m xxxxx

将当前更改的提交保存到 Git 的版本历史中。注意这里是本地库,远程库要用git push命令。

  • commit:表示提交更改。
  • -m xxxxx:表示指定提交的消息,xxxxx 是你自定义的提交消息内容。

3、git rev-list --objects --all | grep a4be1305975be5fcb748379b7f6fc0bcacceb3ca

在所有对象中搜索与指定哈希值匹配的对象。

  • rev-list:列出对象的提交历史。
  • --objects:显示提交历史中的对象。
  • --all:在所有分支上搜索对象。
  • |:管道操作符,将前一个命令的输出传递给后一个命令。
  • grep a4be1305975be5fcb748379b7f6fc0bcacceb3ca:使用 grep 过滤出包含指定哈希值的对象。

4、git log --pretty=oneline --branches --  xxx/bigfile.file

显示包含 xxx/bigfile.file 文件的提交历史。

  • log:显示提交日志。
  • --pretty=oneline:以一行的简洁格式显示提交历史。
  • --branches:仅显示分支上的提交历史。
  • --:用于区分选项和路径参数。
  • xxx/bigfile.file:要显示提交历史的文件路径。

5、git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch xxx/bigfile.file' --prune-empty --tag-name-filter cat -- --all

使用指定的过滤器重写 Git 存储库的历史记录。

  • filter-branch:重写存储库的历史记录。
  • --force:强制执行重写操作。
  • --index-filter:指定对索引进行操作的过滤器。
  • 'git rm --cached --ignore-unmatch xxx/bigfile.file':要执行的过滤器命令,用于删除指定文件。
  • --prune-empty:删除空的提交。
  • --tag-name-filter cat:指定对标签进行处理的过滤器。
  • --:用于区分选项和路径参数。
  • --all:对所有引用进行操作。

6、git push origin master --force

将本地 master 分支的提交强制推送到名为 origin 的远程存储库。

  • push:将本地提交推送到远程存储库。
  • origin:远程存储库的名称。
  • master:要推送的本地分支。
  • --force:强制推送,覆盖远程存储库中的任何冲突或更改。

7、git reflog expire --expire=now --all

过期所有引用日志,即清除过去的引用更改历史,只保留当前的引用状态。这有助于减小存储库的大小,并清理不再需要的引用信息。

  • push:将本地提交推送到远程存储库。
  • origin:远程存储库的名称。
  • master:要推送的本地分支。
  • --force:强制推送,覆盖远程存储库中的任何冲突或更改。

8、git gc --prune=now

运行垃圾收集(garbage collection)并立即删除无用的对象。

  • gc:垃圾收集,清理无用的对象。
  • --prune=now:立即删除不再需要的对象。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/806611
推荐阅读
相关标签
  

闽ICP备14008679号