【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除
背景
上篇 blog
【Ubuntu】【Hugo】搭建私人博客:添加主题
分析了用 git submodule add 将 PaperMod 主题下载到 themes 目录中,然后进一步分析了 git submodule add 和 git clone 的区别,下面继续
搭建私人博客
上篇 blog 分析了 git submodule add 和 git clone 的一些差异,下面继续:
- 协作一致性 :用
submodule的话,所有人都可以得到完全相同的主题,而直接 clone,每个人拿到的版本可能都不一致,不利于多人协作开发 - Git 历史清晰度 :用
submodule主仓库就只记录博客内容变更,但如果用clone,每次主题更新都会污染到主仓库历史
OK,下面举个例子,来具体看下
当前 PaperMod 的版本发布了 v1.0 ~ v8.0

假设后面 PaperMod 发布了 v9.0,修复了一个安全漏洞,如果用 git submodule 的话,要更新主题,可以用如下命令进行更新
bash
cd themes/PaperMod
git fetch
git checkout v9.0
cd ../..
git add themes/PaperMod
git commit -m "Update theme to v9.0 (security fix)"
git push
只用 5 行 Git 命令,干净利落,主仓库历史清晰,只需要一条主题 commit 更新 Update theme to v9.0 (security fix)
而如果直接用 clone 的话,流程大致如下
- 首先去 Gitee 下载 v9.0 的 zip 包
- 解压,手动覆盖
themes/PaperMod所有文件 - 到主仓库
git add,发现几百个文件被修改(都是主题目录的) - 提交后,主题仓库 Git 历史里全是主题代码变更,和博客内容无关
- 如果之前改过主题某行 CSS,那么还要手动解决 merge 冲突
可以看到,直接 clone 费时易错,污染历史,还难以回滚,有很多 弊端
另外,从安全与可追溯的角度 ,用 git submodule 的话,别人知道 themes/PaperMod 是来自另一个仓库 https://gitee.com/hitweston/paper-mod.git,而用直接 clone 的话,Git 会认为这些代码也是主仓库的一部分,别人就无法知道它其实是第三方主题,在开源项目中这就很重要,得尊重原作者,明确依赖来源
OK,介绍完 git submodule 和 git clone 的区别,下面回到主仓库,终端输入
bash
git add .
git commit -m "Initial commit with PaperMod submodule"
将 PaperMod 主题 commit 更新到主仓库

在终端输入
bash
git submodule status
可以看到当前主仓库依赖的是 PaperMod 哪次 commit 信息(v8.0)

OK,更新 hugo.toml 配置文件为如下内容
bash
baseURL = "http://localhost:1313/"
languageCode = "zh-CN"
title = "我的博客"
theme = "PaperMod"
[params]
defaultTheme = "auto"
homeInfoParams.title = "欢迎来到我的博客"
homeInfoParams.content = "这里记录技术与思考。"
enableTOC = true
在终端输入
bash
hugo server -D
可以预览博客网站,这里有几个点说下,首先终端输入
bash
hugo server --help
查看命令说明如下

- 首先,Hugo 自带一个 Web 服务器,能一边构建网站,一边提供服务(不需要额外再启动像 Python http.server 那样的 Web 服务)
- 虽然 Hugo 性能很高,但也只是一个开发用的简易服务器,不支持像 Nginx/Apache 那样的高级功能,比如 HTTPS,或者反向代理等
- 默认情况下,Hugo 会把生成的 HTML/CSS/JS 等静态文件写入磁盘,然后提供服务,不过也可以用
--renderToMemory选项,让 Hugo 完全在内存中渲染,这样速度更快,但也更吃内存(没啥事儿的话,放磁盘就够了) - Hugo 会自动监听项目中的源文件,比如文章,配置,主题等,一旦保存了修改,Hugo 会立即重新构建网站(一般时间 < 100ms),并自动刷新浏览器页面,实现所见即所得的协作体验(这点很棒)
OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【Hugo】搭建私人博客:Hugo&PaperMod 兼容问题