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 部署时间比较长,因为需要在服务器上进行图片转换。不过图片少的话,没啥影响。

All textual works on this website are protected by copyright, and the authors reserve all rights. The photos on this website, unless specifically stated, licensed under the CC BY-NC-ND 4.0 license.
Built with Hugo & Stack, Powered by Github.
全站共 300 篇文章 合计 824072 字
本站已加入BLOGS·CN