优化 Git 仓库的额外提示
当你发现 .git
目录有点大了,随手 Google 一下“optimize git repo”,“reduce repository size”之类的关键词然后照做就行,无非是删多余分支以及历史中的大文件然后 gc,repack 什么的。但这里有几点额外提示:
注意远程服务器的更改
按大多数教程完成操作后,本地的体积减小了:
# 折腾一番然后 git push --force (小心!)
$ ~/misc/apps/dua # 1.57 MB .git
但你或许会遇到从远程 Clone 得到仓库体积不变的情况:
git clone https://github.com/kkocdko/kblog .
$ ~/misc/apps/dua # 3.92 MB .git
这有很多可能的原因。例如本地删了分支但远程没删,对于 GitHub 可以在 github.com/user/repo/branches
删掉,其他平台也类似。
也可能是某个 Commit 打了 Tag,造成一些我们希望不可达并被 Trim 掉的 Object 变为可达。在 GitHub 上尝试访问这种 Tag 会显示为:
这时候记得删掉(或备份重建)所有 Tag 就行了。当然若是自己的服务器或者不关心 GitHub 上的 Star 数量那自然删库重新 Push 上去万事大吉。
有关 git-filter-repo
newren/git-filter-repo 挺好用,值得尝试。但在使用前如果你已经执行过 gc,repack 等操作,那么我建议先将 pack 文件解开
mv .git/objects/pack/ ./git_objs/
git unpack-objects < ./git_objs/*.pack
rm -rf ./git_objs/
之后再执行 --analyze
等操作时,速度会更快一些。当然最后别忘了再 repack 回来。
commit-graph 相关报错
重写了一些历史 Commit 后,偶尔会出现以下报错:
failed to parse commit ... from object database for commit-graph
....89 more
这时只需 git commit-graph write
就行了。