刪除git倉庫中大文件的提交記錄

如果在git中不小心提交了體積很大的文件,那麼就算刪除了這些文件後再次提交,也仍然會導致.git文件夾過大(我們只是提交了一個“刪除”,而不是把文件徹底刪除了)。
首先,可以通過命令

git verify-pack -v .git/objects/pack/pack*.idx |sort -k 3 -g | tail -30

來查看git倉庫中的大文件token,sort -k 3代表着將token按照第三列(即所佔用內存)排序,tail 用來輸出結尾的若干行,此處爲30,代表着輸出結尾的30行。
接下來我們就會得到佔用內存最大的30個提交的token,根據他們的token,可以查找這些提交分別是哪些文件,用以下命令:

git rev-list --objects --all | grep <token-of-the-commit-from-last-step>

當我們知道哪個文件是最大的文件(即需要刪除的文件提交)後,就可以用以下的命令重寫涉及到該文件的所有提交了。

git filter-branch --force --prune-empty --index-filter 'git rm --cached --ignore-unmatch <the-file-path-got-from-last-step>' --tag-name-filter cat -- --all

最後,回收內存

rm -Rf .git/refs/original
rm -Rf .git/logs/
git gc
git prune

參考

徹底刪除git中沒用的大文件 - 簡書
git 刪除歷史紀錄(已提交)中的大文件 - CSDN

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章