- 安装python
下载 Python
访问 Python 官网 - 安装 git-filter-repo(需提前安装 Python,安装非常简单)
执行命令:pip install git-filter-repo
- 在项目目录下打开命令行
执行命令:pip install git-filter-repo
在 .git\filter-repo\analysis./path-all-sizes.txt 查看大文件有日期的是当前文件中已被git删除过(不代表历史记录里没有),present是未被删除的
- 删除文件
执行命令:
git filter-repo --path '你要删除的文件路径(路径最好从上面报告内容中复制)' --invert-paths
数说明:
--path
:指定要删除的目录路径--invert-paths
:反转匹配,即删除匹配的路径,保留未匹配的路径
--path 参数说明:
-
比如从上述例子中可以看出占用空间最大的是 dist
/main.exe
文件,但是这个文件现在不用了,所以我们需要删掉。
删除历史中所有名为 dist/main.exe
的文件:git filter-repo --path dist/main.exe --invert-paths
-
删除以后会发现可能还有dist
/main.exe
的文件也需要删除,这时候就可以 使用通配符删除,native/*
表示删除native/
下所有文件:git filter-repo --path-glob dist/* --invert-paths
-
也可直接删除
native
文件夹及内部文件的资源和历史记录:git filter-repo --path dist/ --invert-paths
-
清理多个文件可多次执行此命令以后再执行后续命令
需要拷贝仓库操作,如果要强制带上 --force - 使所有引用日志(reflog)立即过期(以便后续的垃圾回收可以清理这些日志)
执行命令:git reflog expire --expire=now --all
参数说明:
--expire=now
:将所有引用日志标记为立即过期--all
:对所有引用(分支、标签等)生效
- 执行垃圾回收,清理未使用的对象并优化仓库
执行命令:
git gc --aggressive --prune=now
参数说明:
--aggressive
:执行更彻底的优化(耗时较长)--prune=now
:立即清理所有过期的对象
-
推送到远程
强制将本地仓库的分支推送到远程,覆盖远程仓库分支的历史记录:
git push --force origin --all
强制将本地仓库的tag推送到远程,覆盖远程仓库tag的历史记录
git push --force origin --tags