git仓库瘦身

1、git rev-list --objects --all | grep “$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk ‘{print$1}’)”

f846f156d16f74243b67e3dabec58a3128744352 assets/img/recent-badge.psd
4a1546e732b2e2a352b7bf220c1a22ad859abf89 assets/img/album/me/IMG_0276.JPG
f72d04efe6d0b41b067f9fbbc62455f28d3670d2 assets/img/album/me/IMG_0389.JPG
49bdf300ddf57d1946bc9c6570d94a38ac9d6a50 assets/img/album/me/IMG_0813.JPG
9c073d4177af5d2e43ada41f92efb18d9462a536 assets/img/album/me/IMG_0891.JPG
写到large-files.txt

2、cat large-files.txt| awk ‘{print $2}’ | tr ‘\n’ ’ ’
assets/img/recent-badge.psd assets/img/album/me/IMG_0276.JPG assets/img/album/me/IMG_0389.JPG assets/img/album/me/IMG_0813.JPG assets/img/album/me/IMG_0891.JPG

3、写到large-files-inline.txt

4、git filter-branch -f --prune-empty --index-filter "git rm -rf --cached --ignore-unmatch cat large-files-inline.txt" --tag-name-filter cat – --all

至此已经干掉了那些大文件,来看看瘦身了多少吧! 注意 filter-branch 之后 .git 目录下会有大量的备份。 需要克隆一份当前仓库来看效果:git clone --no-hardlinks file:///Users/harttle/harttle.land /tmp/harttle.land

也可以进入项目目录通过 du -d 1 -h 查看磁盘占用的大小。

5、git push origin --force --all

到此为止我们更改的都是本地仓库,现在把这些改变 Push 到远程仓库中去!

参考连接:https://harttle.land/2016/03/22/purge-large-files-in-gitrepo.html#header-5