git 查找大文件,删除大文件

7,087 阅读1分钟

Why

写公司的一个内部项目,前期没配置好.gitignore导致整个git仓库达到1.1G,查了一上午资料终于解决了,最后仓库大小只有1.1M。

How

  • 查看git仓库大小

     git count-objects -v
    

结果

count: 0
size: 0
in-pack: 663
packs: 1
size-pack: 1031
prune-packable: 0
garbage: 0
size-garbage: 0

其中size-pack就是 git 仓库大小。

  • 列出大文件

      git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -20 | awk '{print$1}')"
    

其中"tail -20"中的20表示条数。

  • 删除大文件

      git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch xxx.framework' --prune-empty --tag-name-filter cat -- --all
    

    其中”xxx.framework“是上一步中列出的大文件路径

  • push 到远程

     git push origin --force --all
    
  • 清楚缓存

      rm -rf .git/refs/original/
    
      git reflog expire --expire=now --all
    
      git gc --prune=now
    

完工。