Contents that posted a long time ago may be obsolete and may not reflect my current opinion.
当我们的 Git 仓库越来越大,或者不小心提交了二进制大文件,如何快速找出仓库内的「罪魁祸首」?
实践
实际上非常简单,一条命令就能搞定。
git rev-list --objects --all \ # |
注意,在 macOS 使用此命令需要安装
brew install coreutils --with-default-names
。若你已经安装但并没有使用
--with-default-names
选项,则需要替换numfmt
为gnumfmt
。
或许有人说,使用 du
命令也可以实现。但这样会缺少 gitignore 的支持,并且无法查找到已删除但存在于提交历史的文件。
备选
另外,在码云还看到一种方法;但相比前面的方法略逊,不能显示文件大小,也没有完全采用管道处理,是否足够严谨有待考证。作为备选命令吧。
git rev-list --objects --all | grep -E "`git verify-pack -v .git/objects/pack/*.idx | sort -r -n -k 3 | head -10 | awk '{print$1}' | sed ':a;N;$!ba;s/\n/|/g'`" |