我的 Hugo 博客最近一年来托管在 Github 上,但随着 Hugo 版本升级,在多次重构中,产生大量无效碎片文件。同时我博客之前所有的图片文件在转换为 webp 的过程中亦生成了大量垃圾文件,导致 Github 仓库体积过大,已接近 1GB 的警示线。为此今天特地对仓库进行了清理。
Github 存储库大小官方限制
建议仓库保持较小,理想情况下小于 1 GB,强烈建议小于 5 GB。较小的仓库克隆速度更快,使用和维护更容易。如果您的仓库过度影响我们的基础架构,您可能会收到来自 GitHub 支持的电子邮件,要求您采取纠正措施。我们力求灵活,特别是对于拥有很多协作者的大型项目,并且尽可能与您一起找到解决方案。您可以有效地管理仓库的大小和整体运行状况,以免您的仓库影响我们的基础架构。
正规瘦身方式
1. 清理未跟踪的文件
首先,确保你已经清理了所有未跟踪的文件。你可以使用以下命令来查看和清理未跟踪的文件:
|
|
2. 删除不需要的大文件
如果你曾经在仓库中提交过一些大文件,这些文件可能会占用大量的存储空间。可以使用 git filter-repo
来重写 Git 历史记录,删除不需要的文件。
安装
git filter-repo
:1
pip install git-filter-repo # 需要先安装 Python
删除大文件:
1
git filter-repo --path <file-path> --invert-paths
例如,删除名为
largefile.zip
的文件:1
git filter-repo --path largefile.zip --invert-paths
3. 压缩 Git 仓库
Git 提供了 git gc
命令来压缩仓库,删除不需要的对象。
|
|
4. 进一步压缩 Git 仓库
Git 提供 git repack
用于打包仓库中的对象,可以进一步优化仓库的存储和性能。
|
|
5. 清理远程仓库
如果你已经删除了不需要的文件并压缩了本地仓库,你可能还需要清理远程仓库。
强制推送本地仓库到远程仓库:
1
git push --force
清理远程仓库的引用:
1
git remote prune origin
总结
通过清理未跟踪的文件、删除不需要的大文件、压缩 Git 仓库、清理远程仓库可以一定程度减小 Git 仓库的大小。
我在使用上边方法后,发现仓库瘦身效果仍然不明显,只从 935MB 降到了 880MB,与预期目的差距甚远,只能下剂猛药重新来过了。
不正规清理方式
对于个人博客来说,提交历史其实没啥太大作用,毕竟都是些文字图片信息,几乎不需翻旧账。那么只需要把远程仓库清空就行。
删库重建
在 Github 仓库中删库重建,然后绑定新仓库上传。
该方法适合仓库没有连接其他服务的情况。如果是通过 Github 仓库连接到 Vercel Cloudflare 或者其他第三方服务中进行部署的,建议就别用了,重新部署也麻烦,可以选择下边重置大法。
重置原仓库
备份本地仓库,可以用命令也可以直接复制粘贴需要的文件夹。
1
git clone /d/hugo/user /d/hugo/user # 自己的文件路径
随便找个地方新建一个文件夹,里边随便塞个文件,然后设置为 Git 仓库。
1 2
cd /d/hugo/new # 自己的文件路径 git init
添加远程仓库。
1
git remote add origin https://github.com/user/user.github.io #
重置仓库。
1 2
git add -A git commit -m "Initial commit"
强制推送到原仓库。
1
git push -f origin master
重新绑定原仓库上传
找到原来备份的文件夹,重复上边 2-5 步即可。
总结
Hugo 中,最容易制造垃圾文件的是 public 和 resources 两个文件夹,我之前在使用 hugo 命令调试时,经常采取直接删除这两个文件夹的方式管理。但两个文件夹里边都是几千文件量,把 git 历史记录都给搞烂了。
这次选择在博客根目录新建一个 .gitignore
文件,将上边两个文件夹排除在外。文件中填写内容如下:
|
|
Tips
resources 文件夹如果不上传的话,会导致 Github Actions 或 Vercel 部署时间比较长,因为需要在服务器上进行图片转换。不过图片少的话,没啥影响。