随着项目版本更迭, .git/objects/pack
文件可能会变得臃肿,可以通过以下步骤将大文
件从版本历史中删除,缩减 pack 大小
-
查询版本历史中的前 10 个大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')"
-
执行命令从历史中删除指定的大文件
git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch <path/filename>" --prune-empty --tag-name-filter cat -- --all
-
执行成功后需要删除和重建索引
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
-
设置历史记录的过期时间为现在,默认为 90 天
git reflog expire --expire=now --all
-
通过 gc 清理文件并优化本地存储库
git gc --aggressive --prune=now
-
需要强制推送修改后的历史
git push --all --force origin