git 平时没做好忽略提交列表的情况下,误将无用的大文件提交至服务器,导致 clone 的时候 .git/objects/pack 目录下文件很大。比如我就提交了俩编译好的 jar 包,原来 clone 下来只有2 30M,这下整200多M了。
注意:
1.新 clone 工程,不要在原来的本地代码库中操作
2.均可以在客户端完成,不需要到服务器上去执行 GC 清理
3.直接本地新 clone 的工程下,根目录右键 -> Open Git Bash here 或者 cd 至根目录执行以下命令
# 安装,可以省去很多动作,如果不想安装,自行搜索方法
git-filter-repo pip install git-filter-repo
# 不安装大概是以下操作
# 执行以下语句
# rm -rf .git/refs/original
# git reflog expire --expire=now --all
# git fsck --full --unreachable
# git repack -A -d
# git gc --aggressive --prune=now
# git push --force
# 找出前3名最大的包
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -3
# 找出指定包下文件
git rev-list --objects --all | grep bd97bfde4d9a108d012dd1e4685ef8ad6e1ec0ea
# 删除指定包下的大文件
git filter-repo --path doc/xxx.jar --invert-paths
# 也可以删除多个
# 例:git filter-repo --path file1 --path file2 --invert-paths
# 重新添加远程仓库
git remote add origin http://xxx.xxx.xxx.xxx/xxxx.git
# 强制推送所有分支
git push --force --all origin
# 如果有标签也需要推送
git push --force --tags origin
# 远程仓库的 GC/pack 清理
git gc --aggressive --prune=now