使用 Git 子模块管理 Hexo 的多个主题

Hexo 有很多主题,为了便于主题的及时更新,在多个不同的主题间随时切换,使用 Git 子模块来对这些主题进行管理

1 使用方法

1.1 添加子模块

我们在本地构建好 Hexo 项目之后,一般来说,下一步就是选取一个今后自己博客使用的主题,这里以 next 为例,执行以下命令

1
2
# 添加 next 主题作为该项目的 Git 子模块
git submodule add https://github.com/theme-next/hexo-theme-next themes/next

执行之后会在本地根路径生成一个 .gitmodules 文件,文件包含了 next 子模块的信息

1.2 拉取全部代码

包含子模块的 Git 项目,推送到远端仓库时,子模块中的代码并不会随父模块一起推送(远端仓库中的子模块目录是空的)

当更换电脑,需要拉取 Hexo 笔记项目时,执行以下命令,便可拉取父模块和子模块的全部代码:

1
2
# 拉取网址就是项目对应的 Repo 地址
git clone --recursive https://github.com/your-name/your-blog

1.3 本地更新主题版本

执行以下命令

1
git submodule update --remote

2 问题

2.1 子模块主题配置文件不能直接修改

因为无论是 Push 不会推送子模块代码,Pull 也是从子模块原本的仓库中拉取,所以不能直接修改子模块中的代码

以 next 主题为例,实测在 Hexo 博客项目的根目录创建一个 _config.next.yml 能覆盖主题文件中的配置,但是它这种覆盖,貌似是将两个配置合在一起,然后外面的 _config.next.yml 比里面的 _config.yml 的优先级更高

另一种方式是通过安装 hexo 插件:hexo-theme-plus

因为我用到了 Github Action,我是在 CI 任务执行的过程中进行了主题配置文件的替换,这样也能达到主题部分自定义的目的了

3 参考