博主在利用git迁移网站过程中把附近全加了进去,git大小暴涨几百M,以后clone都要带着几百M很是难受。
但git已经commit了不少版本,几百M文件的commit夹在中间。
于是寻找方法去除,最后结合国内外网友(关键还是国外)文章,顺利解决。
过程中遇到的最大问题就是,文件确实从commit中去除了,但.git的目录大小并未发生变化。。
从所有commit中去除掉一个文件的方法:
1 2 3 |
git filter-branch --index-filter \ 'git rm --cached --ignore-unmatch path/to/mylarge_50mb_file' \ --tag-name-filter cat -- --all |
清理git的占用空间,网上很多网友照搬照抄,大致方法是:
1 2 |
rm -Rf .git/refs/original # careful git gc --aggressive --prune=now # danger |
你会发现实际上du -sh .git
并没有减少大小!
真正清理git占用空间的方法
先去掉remote,我个人git也了解的很浅,感觉之所以文件清不掉,可能是因为还有一些引用存在:
1 2 3 |
git remote rm origin #去掉远程仓库 rm -rf .git/refs/original/ .git/refs/remotes/ .git/*_HEAD .git/logs/ git -c gc.reflogExpire=0 -c gc.reflogExpireUnreachable=0 -c gc.rerereresolved=0 -c gc.rerereunresolved=0 -c gc.pruneExpire=now gc |
最后一句是关键,是否感受到了来自git的嘲讽?
这么操作之后我的.git终于变回了15M。
另外一个简单的办法
再建一个远程仓库,把第一步删掉文件之后的库往上push,然后删掉本地库,重新clone一遍下来,.git目录就变小啦~ 曲线实现。。
参考
https://stackoverflow.com/questions/8740187/git-how-to-remove-file-from-historical-commit
https://stackoverflow.com/questions/1904860/how-to-remove-unreferenced-blobs-from-my-git-repo