# gitLargeFileCommitTest **Repository Path**: yuanpengfei/git-large-file-commit-test ## Basic Information - **Project Name**: gitLargeFileCommitTest - **Description**: Gitee提交了超过100Mb文件导致push不了解决方法 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-01-16 - **Last Updated**: 2023-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gitLargeFileCommitTest #### 介绍 Gitee提交了超过100Mb文件导致push不了解决方法 1. 查看存储库中的大文件 ``` git rev-list --objects --all | grep -E `git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'` ``` 或者 ``` git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -15 | awk '{print$1}')" ``` 2. 改写历史,去除大文件 ``` git filter-branch --tree-filter 'rm -f path/to/large/files' --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force ``` 如果在`git filter-branch`操作过程中遇到如下提示,需要在`git filter-branch`后面加上参数`-f` (出现这个错误的原因是,第一次操作成功后发现仓库大小并没有减少(可能还增大了),便进行了第二次操作) ``` Cannot create a new backup. A previous backup already exists in refs/original/ Force overwriting the backup with -f ``` [附Gitee官方解决方案](https://gitee.com/help/articles/4232#article-header0) 方案一(推荐): 由于原生Git命令git filter-branch 的一些缺陷导致重写历史过程出现数据损坏: WARNING: git-filter-branch has a glut of gotchas generating mangled history rewrites. 实际使用过程中,很多用户反馈使用这个命令来清理仓库大文件的过程十分缓慢且效果不佳。 针对这些反馈,Gitee自研了一款开源Git插件式工具,目的是让用户不再为仓库瘦身头疼。 仓库地址: https://gitee.com/oschina/git-repo-clean.git 安装: 1. Linux环境 `sudo cp git-repo-clean $(git --exec-path)` 2. Windows环境 方法一:将可执行文件git-repo-clean.exe的路径放到系统$PATH路径中,大致操作步骤为: 点击Windows的[开始] --> 输入path --> 选择编辑系统环境变量--> 选择环境变量 --> 在系统变量(S)中选择Path --> 选择新建(N) --> 将刚才解压的包含git-repo-clean.exe文件的路径复制到新建的环境变量中。 方法二:也是将git-repo-clean.exe复制到 Git 的执行目录下:cp git-repo-clean.exe $(git --exec-path)。(Git可能安装在C盘某个目录中,需要特别权限才能复制) 方法三:也可以直接复制该可执行文件git-repo-clean.exe到C:\Windows\system32目录下。(不推荐使用该方法,因为可能会误操作,导致系统文件被破坏) 通过方法安装完成后,执行如下命令检测是否安装成功: `git repo-clean --version` 使用: 安装成功后,便可以像使用普通Git命令一样使用git-repo-clean工具。 执行git repo-clean, 或git repo-clean --interactive 或git repo-clean -i直接进入交互式界面 然后程序会询问用户文件筛选的条件: $ git repo-clean -i ? 选择要扫描的文件的类型,如:zip, png: * ? 选择要扫描文件的最低大小,如:1M, 1g: 1M ? 选择要显示扫描结果的数量,默认值是3: [? for help] (3) 根据这三个条件,程序会筛选出需要删除的文件,经过用户确认后程序会自动从整个commit历史中删除该文件并更新相关commit记录。 为了仓库数据的安全,在删除任何数据之前,会允许用户对仓库进行备份。 整个过程操作简单,用户只需要按照程序提示回答Yes/No就行。