.git 缩小体积
之前用LFS传了一些文件,却发现github对LFS有1G的限额,就又都从仓库里删了,操作了好多次,这也导致了我的.git
文件夹变得很大,其中主要是一些一直存储着的文件的索引和内容,即使在本地仓库中删除了这些文件,在.git
中还是会一直保存着的。
操作前提:删除所有分支,只留下一个master
1查找出大文件
1 | git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" |
通过 rev-list得到了<文件名 : ID>的对应关系,通过 verify-pack 得到了最大的5个文件ID。 用后者筛选前者便能得到最大的5个文件的文件名
2删除大文件
1 | git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch YOUR-FILE-NAME' --tag-name-filter cat -- --all |
如果你确定某一个文件夹下面都不是你需要的,那么你可以直接删除整个文件夹,比如:1
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch YOUR-FOLDER-NAME -r' --tag-name-filter cat -- --all
3回收空间
最后,虽然上面我们已经删除了文件, 但是repo里面仍然保留了这些 objects , 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间,命令如下:1
2
3rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
完成后,以强制覆盖的方式推送你的repo, 命令如下:1
2
3
4
5
6git push --force --all
git remote -v
git remote remove origin
git remote add origin
git push -u origin --all