大家一定遇到过在使用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目录 * sort -k 3 -n 按照第三列即文件大小列排序 * 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 国际许可协议进行许可。