删除.git下的大文件
文章目录
今天在准备将之前一个工程文件压缩打包一下,发现压缩时间很长,怀疑工程内部的git版本管理文件夹.git占比大造成的。利用ncdu命令进行查看,发现.git文件夹使用了80M,看来是之前提交的一些大的文件造成的,虽然后期那些文件删除了,但是在git版本管理中因为已经提交了几个版本,所以还存在。于是Google如何删除.git中的大文件。
使用Git命令的方式
进入工程文件夹,开始查看占用最大的5个文件
1
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
对查找出的文件进行删除
1
git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat - - --all
更新提交到远程仓库,然后删除本地文件
1
2
3git push origin --force --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all && git gc --prune=now
使用工具的方式
一个由scala编写的工具对git大文件进行清理 BFG Repo-Cleaner
使用–mirror的方式克隆当前的工程
1
git clone --mirror git://example.com/some-big-repo.git
使用Java的jar命令启动bfg.jar开始扫描仓库大于20M的文件
1
java -jar bfg.jar --strip-blobs-bigger-than 20M some-big-repo.git
进入–mirror方式克隆的目录,执行清除操作
1
git reflog expire --expire=now --all && git gc --prune=now --aggressive
执行下面的命令,等待上传到远程仓库完成更新。由于是使用的–mirror的方式克隆的仓库,push操作会提交到所有分支
1
git push
我这里推荐工具的方式进行删除操作,速度快,不易出错。