平常使用repo拉代码,repo sync 后发现 .repo文件非常大,一般有150G,而项目的全代码也不会超过40G,所以有必要去减少.repo文件的大小。
通过一番查找,下面这个文件比较大:
.repo/project-objects/
而这些文件下面,pack文件是最大的文件.一般都是1-6G。
.repo/project-objects/***.git/objects/pack/pack-5ac231755ddcbc2727aca987f32e61bad220c0fe.pack
所以想办法将他们删除。删除命令如下:
find .repo/ -name "*pack" -type f |xargs -I {} du -s {}|sort -k 1 -n|tail -10|awk '{print $2}'| xargs -I {} rm -vf {}
或者进入.repo目录执行命令
find . -name "*pack" -type f |xargs -I {} du -s {}|sort -k 1 -n|tail -10|awk '{print $2}'| xargs -I {} rm -vf {}
上面的命令解释一下:
- 首先扫描.repo下所有以pack文件名结尾的文件
- 根据扫描的文件分别计算他们的占用大小。
- 再将它们进行排序
- 选出最大的10个文件
- 通过awk工具筛选出第2列的文件路径
- 将文件删除,并现实删除结果
网上其他人的方法都是在git 压缩,比如命令 git gc --aggressive.但是对于repo来说,效果不明显。我的这个方法可以放心使用,不会导致git 提交不了。
通过这个方法能有效的减少.repo文件的总大小,一般可以从100G的大小减少到20G左右,甚至不足1GB。
2018.11.20
有一个问题,就是你下次repo sync时,那些删除的文件会再次下载。如果您有方法保证删除的文件不再同步,请留言。