瘦身.git,处理项目中.git文件夹过大的问题

处理项目中.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 ' --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 

你可能感兴趣的:(git,github)