在实际使用git的时候,因为.gitignore未及时更新, 导致误提交了二进制文件。这样,git的元数据量因大文件而迅速增大,在实际的使用中浪费太多的时间。
在这里,分享一个清理大文件的方法。
# 1. 将二进制文件放进.gitignore,防止后面两次误提交[ 建议在根目录创建 ]
echo -e '*.exe\n*.jar\n*.zip' >> .gitignore
# 2. 找出最大的10个文件及其所在的提交和路径
git rev-list --objects --all | grep "$( git verify-pack -v .git/objects/pack/*.idx |sort -k 3 -n |tail -10 |awk '{print$1}' )"
# 3. 删除大文件, 在.git所在目录执行, 依次删除大文件
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch dbupdate/src/dbupdate' --prune-empty --tag-name-filter cat -- --all
# 3. 删除所有引用备份并强制垃圾回收
rm -rf .git/refs/original
git reflog expire --expire=now --all
git gc --prune=now --aggressive
# 4. 强制push
git push origin --force --all
注意:在类似GitLib上有master分支拒绝强制push的保护,最终导致清理失败,表现上,再pull一下发现之前删除的内容又回来了。
关闭方法:
Settings > Repository > Protected branches > Allowed to force push 或 Unprotect
这样,仓库就干净了。舒坦!!!
