從git記錄中刪除大文件

git push error

大家一定遇到過在使用Git時,不小心將一個很大的文件添加到庫中,即使刪除,記錄中還是保存了這個文件。以後不管是拷貝,還是push/pull都比較麻煩。今天將工程上傳到github時,發現最大隻能上傳100MB大小文件,在本地git庫中有一個260MB文件,雖然已經刪除,但還保存了記錄。下面教大家如何從庫中徹底刪除無效大文件。


  • 1.查看git空間使用

    git count-objects -v
    git空間使用情況
    其中size-pack就是.git的大小,單位字節。

  • 2.查看大文件是什麼

    git verify-pack -v .git/objects/pack/pack-83eb93d4ad82019ee070697931cab9bb59fab7c4.idx | sort -k 3 -n | tail -3
    大文件列表

    簡單說明:
    * 指令是git verify-pack -v xxx.idx,所以你需要定位到idx目錄
    * tail -3  列舉出前三條
    
  • 3.我們可以看到86d73c這個文件很大,下一步找到它是什麼

    git rev-list --objects --all | grep 86d73c
    大文件名稱

  • 4.將該文件從歷史記錄的所有 tree 中移除

    git log --pretty=oneline --branches – platforms.zip

  • 5.用 filter-branch 命令重寫所有 commit 才能將文件從 Git 歷史中完全移除

    git filter-branch -f --prune-empty --index-filter ‘git rm --cached --ignore-unmatch -fr platforms.zip’ – --all
    執行結果

  • 6.現在歷史記錄中已經不包含對那個文件的引用了。不過 reflog 以及運行 filter-branch 時 Git 往.git/refs/original 添加的一些 refs 中仍有對它的引用,因此需要將這些引用刪除並對倉庫進行 repack 操作。在進行 repack 前需要將所有對這些 commits 的引用去除。

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

至此結束。

清理結果





知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。

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