大家一定遇到過在使用Git時,不小心將一個很大的文件添加到庫中,即使刪除,記錄中還是保存了這個文件。以後不管是拷貝,還是push/pull都比較麻煩。今天將工程上傳到github時,發現最大隻能上傳100MB大小文件,在本地git庫中有一個260MB文件,雖然已經刪除,但還保存了記錄。下面教大家如何從庫中徹底刪除無效大文件。
-
1.查看git空間使用
git count-objects -v
其中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 國際許可協議進行許可。