使用git-filter-repo 清除大文件

  1. 安装python

    下载 Python
    访问 Python 官网

  2. 安装 git-filter-repo(需提前安装 Python,安装非常简单)
    执行命令: pip install git-filter-repo
  3. 在项目目录下打开命令行
    执行命令: pip install git-filter-repo
    在 .git\filter-repo\analysis./path-all-sizes.txt 查看大文件

    image

     有日期的是当前文件中已被git删除过(不代表历史记录里没有),present是未被删除的

  4. 删除文件

    执行命令: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
  5. 使所有引用日志(reflog)立即过期(以便后续的垃圾回收可以清理这些日志)
    执行命令:git reflog expire --expire=now --all

    参数说明:

    • --expire=now:将所有引用日志标记为立即过期
    • --all:对所有引用(分支、标签等)生效
  6. 执行垃圾回收,清理未使用的对象并优化仓库

    执行命令:git gc --aggressive --prune=now

    参数说明:

    • --aggressive:执行更彻底的优化(耗时较长)
    • --prune=now:立即清理所有过期的对象
  7. 推送到远程
    强制将本地仓库的分支推送到远程,覆盖远程仓库分支的历史记录:
    git push --force origin --all
    强制将本地仓库的tag推送到远程,覆盖远程仓库tag的历史记录
    git push --force origin --tags

 

 

 

posted @ 2025-10-15 09:31  风花一世月  阅读(12)  评论(0)    收藏  举报