git 仓库瘦身
折腾完之后看看少了三分之二,嗯,很舒服。😎
git 仓库瘦身
2022-11-04 17:22:38
ox1 问题
某天克隆一个仓库
git clone https://github.com/SunSeekerX/uni-plugin-android-starter.git
Cloning into 'uni-plugin-android-starter'...
remote: Enumerating objects: 1832, done.
remote: Total 1832 (delta 0), reused 0 (delta 0), pack-reused 1832
Receiving objects: 100% (1832/1832), 158.61 MiB | 9.75 MiB/s, done.
Resolving deltas: 100% (780/780), done.
158.61 MiB
很显眼,要不是有加速,不知道要克隆到何年何月。很明显 .git
工作文件夹提交了不该提交的东西。因为 git 是不会删除文件的,历史所有东西都在 .git
目录存着,以防止有回退找文件的一天。
除去 .git
文件夹之外的体积只有不到 50mb,所以肯定是有优化空间的。
0x2 清理工具
是
git filter-branch
绝佳的替代品。
这是一个 java 工具,所以需要 java 环境,把 jar 包下载下来放在你知道的地方。比如我 D:\app\bfg-1.14.0.jar
克隆仓库
git clone --mirror git://example.com/some-big-repo.git
然后到工程外面的一级目录下执行。
java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
- 100M 是删除多大以上的文件 100M 表示删除大于 100M 的文件
运行命令
java -jar D:\app\bfg-1.14.0.jar --strip-blobs-bigger-than 1M .\uni-plugin-android-starter.git\
# mac 示例
java -jar ~/app/bfg-1.14.0.jar -b 10k uni-plugin-ios-starter
运行完成之后直接进入项目目录
cd some-big-repo.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
最后推送上去
受保护的分支 会导致失败。要继续,您必须移除分支保护、推送,然后重新启用受保护的分支。
# 使用了 --mirror,同时会更新 tag
git push
# 直接克隆的整个仓库
git push origin --force 'refs/heads/*'
要从标签版本中删除大文件,请强制将您的更改推送到 GitLab 上的所有标签
受保护的标签 会导致失败。要继续,您必须移除标签保护、推送,然后重新启用受保护的标签。
git push origin --force 'refs/tags/*'
提示❗
提交了之后需要告知开发的小伙伴重新拉下项目,不能把自己本机的提交上来,不然你的工作就会被覆盖了。因为本质上是对 git 历史提交做了修改。小伙伴是无法使用 git pull
同步你的修改的。
0x3 结果
折腾完之后看看少了三分之二,嗯,很舒服。😎