Featured image of post 如何为 Hugo 博客的 Github 仓库瘦身

如何为 Hugo 博客的 Github 仓库瘦身

我的 Hugo 博客最近一年来托管在 Github 上,但随着 Hugo 版本升级,在多次重构中,产生大量无效碎片文件。同时我博客之前所有的图片文件在转换为 webp 的过程中亦生成了大量垃圾文件,导致 Github 仓库体积过大,已接近 1GB 的警示线。为此今天特地对仓库进行了清理。

Github 存储库大小官方限制

建议仓库保持较小,理想情况下小于 1 GB,强烈建议小于 5 GB。较小的仓库克隆速度更快,使用和维护更容易。如果您的仓库过度影响我们的基础架构,您可能会收到来自 GitHub 支持的电子邮件,要求您采取纠正措施。我们力求灵活,特别是对于拥有很多协作者的大型项目,并且尽可能与您一起找到解决方案。您可以有效地管理仓库的大小和整体运行状况,以免您的仓库影响我们的基础架构。


正规瘦身方式

1. 清理未跟踪的文件

首先,确保你已经清理了所有未跟踪的文件。你可以使用以下命令来查看和清理未跟踪的文件:

1
2
3
git clean -n  # 查看哪些文件将被删除
git clean -f  # 删除未跟踪的文件
git clean -fd # 删除未跟踪的文件和目录

2. 删除不需要的大文件

如果你曾经在仓库中提交过一些大文件,这些文件可能会占用大量的存储空间。可以使用 git filter-repo 来重写 Git 历史记录,删除不需要的文件。

  1. 安装 git filter-repo

    1
    
    pip install git-filter-repo # 需要先安装 Python
    
  2. 删除大文件:

    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 命令来压缩仓库,删除不需要的对象。

1
git gc --prune=now --aggressive

4. 进一步压缩 Git 仓库

Git 提供 git repack 用于打包仓库中的对象,可以进一步优化仓库的存储和性能。

1
git repack -a -d -f

5. 清理远程仓库

如果你已经删除了不需要的文件并压缩了本地仓库,你可能还需要清理远程仓库。

  1. 强制推送本地仓库到远程仓库:

    1
    
    git push --force
    
  2. 清理远程仓库的引用:

    1
    
    git remote prune origin
    

总结

通过清理未跟踪的文件、删除不需要的大文件、压缩 Git 仓库、清理远程仓库可以一定程度减小 Git 仓库的大小。

我在使用上边方法后,发现仓库瘦身效果仍然不明显,只从 935MB 降到了 880MB,与预期目的差距甚远,只能下剂猛药重新来过了。


不正规清理方式

对于个人博客来说,提交历史其实没啥太大作用,毕竟都是些文字图片信息,几乎不需翻旧账。那么只需要把远程仓库清空就行。

删库重建

在 Github 仓库中删库重建,然后绑定新仓库上传。

该方法适合仓库没有连接其他服务的情况。如果是通过 Github 仓库连接到 Vercel Cloudflare 或者其他第三方服务中进行部署的,建议就别用了,重新部署也麻烦,可以选择下边重置大法。

重置原仓库

  1. 备份本地仓库,可以用命令也可以直接复制粘贴需要的文件夹。

    1
    
     git clone /d/hugo/user /d/hugo/user # 自己的文件路径
    
  2. 随便找个地方新建一个文件夹,里边随便塞个文件,然后设置为 Git 仓库。

    1
    2
    
     cd /d/hugo/new # 自己的文件路径
     git init
    
  3. 添加远程仓库。

    1
    
     git remote add origin https://github.com/user/user.github.io #
    
  4. 重置仓库。

    1
    2
    
     git add -A
     git commit -m "Initial commit"
    
  5. 强制推送到原仓库。

    1
    
     git push -f origin master
    

重回新仓库

重新绑定原仓库上传

找到原来备份的文件夹,重复上边 2-5 步即可。

总结

Hugo 中,最容易制造垃圾文件的是 public 和 resources 两个文件夹,我之前在使用 hugo 命令调试时,经常采取直接删除这两个文件夹的方式管理。但两个文件夹里边都是几千文件量,把 git 历史记录都给搞烂了。

这次选择在博客根目录新建一个 .gitignore 文件,将上边两个文件夹排除在外。文件中填写内容如下:

1
2
 public/
 resources/

Tips

resources 文件夹如果不上传的话,会导致 Github Actions 或 Vercel 部署时间比较长,因为需要在服务器上进行图片转换。不过图片少的话,没啥影响。

Built with Hugo, Powered by Github.
全站约 325 篇文章 合计约 924879 字
本站已加入BLOGS·CN