处理项目中.git文件夹过大的问题
出现原因: .git文件主要用来记录每次提交的变动,当我们在提交时包含大文件时,会被git记录下来, .git文件越来越大、越来越繁重。。。
下面是解决方法步骤:
一:将项目切换至master分支
// git checkout master
二:删除存储的大文件
方法(1):
#1.找出大文件的前5个
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
#2.找出大文件的文件名
git rev-list --objects --all | grep 8f10eff91bb6aa2de1f5d096ee2e1687b0eab007
#3.清除该文件的所有历史记录并强制刷新到所有分支(慎重,需要管理员权限,否则报错)
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch <your-file-name>' --tag-name-filter cat -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
#4.强制更新远程仓库(这一步执行了,就真没救了。请确认已备份。)
git push --force --verbose --dry-run
git push --force
方法(2):前提是知道要删除的大文件
#1.从提交历史中删除所有的zip文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.zip' --prune-empty --tag-name-filter cat -- --all
#2.从提交历史中删除dist文件夹中的所有文件
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch uploads/' --prune-empty --tag-name-filter cat -- --all
#3.清除残余的 objects并通过GC回收空间
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
#4.强制更新远程仓库(这一步执行了,就真没救了。请确认已备份。)
git push --force --verbose --dry-run
git push --force
三:查看瘦身后的.git文件大小
du .git -lsh