背景
目前看下来是,如果给 git 仓库提交大文件(具体多大算大,暂时还没有查到,我本地试 300M 的文件会有问题),则会在 .git\objects\pack 中有一个比较大的文件。提交了 300 M 的文件,这个缓存文件大概 70M 左右。
网上常用的方式是,使用 git-filter-repo 删除大文件。
操作过程
1.使用 python 的 pip 下载 git-filter-repo
pip install git-filter-repo
2.如果不知道哪个文件比较大,还需要找一下(这个步骤还没有试过,可以看参考文献)
下面命令本地没有试过
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
3.找到比较大的文件后,从 .git 中删除
git filter-repo --invert-paths --path effect.pdb --force
如果你本条 commit 只包含这个大文件,则会删除 commit。如果该 commit 包含提起的提交,则删除大文件,其他修改保留。
3.1 我本地执行上面的命令后,执行 git push 提示找不到远端仓库
我这边需要重新添加远程仓库,我看文献里面没有这个步骤,不知道是不是我这边什么配置导致的。
git remote add origin git@xxx.git
4. 把改动提交到远端
git push origin xx --force
5.其他
下次下载这个仓库,.git 里面就不会包含这个缓存文件了。
但是之前已经下载的仓库里面还保留这个文件,可以本地执行下面的命令把本地缓存清了。
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
参考文献
文章:记录删除.git记录大文件的过程
视频:别再往 git 提交大文件啦!