- 利用GitHub的版本控制来实现多台主机同步更新博客的功能
- Hexo原理的简单分析
- 通过Git版本控制实现:分支、私有仓库
- 新节点的依赖配置:
Node.js、Git、Hexo - 参考教程:Hexo博客多主机更新配置
Hexo博客搭建番外篇——多节点更新
1. Hexo原理简析
1.1 依赖分析
- 环境依赖
Node.jsGit以及GitHub Pages:通过SSH关联- 其他
Pages:如Gitee、Coding Pages MarkDown编辑器:如Typora- 云对象存储客户端:如腾讯云客户端
cosbrowser
- 资源配置依赖
- Hexo相关的基础依赖包:
hexo-generator-archive、hexo-generator-tag - Hexo后期扩展功能的包:如
hexo-helper-live2d、hexo-generator-baidu-sitemap - Hexo远程部署到GitHub的依赖包:
hexo-deployer-git - 相关的配置会保存在:源文件的
package.json中
- Hexo相关的基础依赖包:
- 安装Hexo
- Hexo客户端:
npm install -g hexo-cli - Hexo依赖包:
npm intall
- Hexo客户端:
- 博客内容依赖
- 博文:源文件的
source目录下的文件 - 主题:源文件的
themes目录下的文件
- 博文:源文件的
1.2 原理分析
Hexo静态博客
Hexo实际上是一个静态博客生成工具,会根据个人的配置、主题样式等,将其中的MarkDown文件解析生成对应的HTML、CSS、JS等文件,组成静态页面。同时可以通过SSH的方式部署到GitHub Pages上,完成远端部署,从而实现长期访问。
Hexo的源文件目录结构

Hexo的本质操作
- 解析Hexo源文件,生成对应的静态页面文件,即
public目录下的文件 - 将该文件初始化为Git目录,并根据配置关联到对应的GitHub账户及其仓库分支,即
.deploy_git目录 - 进行
git add .、git commit、git push等操作,将静态页面文件同步到远程仓库中 - 通过访问GitHub Pages,即可访问生成的静态博客
- 解析Hexo源文件,生成对应的静态页面文件,即
1.3 同步更新Hexo的方式
物理方式
使用网盘、U盘等存储介质同步Hexo源文件,即整个Hexo文件目录结构中的文件。
Git版本控制方式
- 双仓库方式
- 在GitHub上创建两个仓库,分别管理Hexo源文件,以及生成、部署的静态页面文件
- 优势:可以将管理Hexo源文件的仓库设置为私有的,避免泄露信息
- 单仓库多分支方式
- 在GitHub上的io仓库上创建新的分支,主分支与新分支分别管理Hexo源文件和网站静态页面文件
- 优势:便捷但是有安全风险
- 双仓库方式
同步原理思路
- Master分支:管理Hexo生成的静态页面文件,并用于访问博客页面
- HexoSource分支(或新的私有仓库):管理Hexo源文件(source、themes等部署文件)
- 原节点、新节点
- clone新分支或新仓库到本地,通过pull、push操作进行Hexo源文件版本控制
- 通过
hexo g -d进行博客静态页面部署
分支同步博客更新:注意本文的前提是已经搭建了Hexo博客并部署到GitHub Pages上
- 方式一:在GitHub图形界面上创建分支
- 方式二:通过终端创建分支
2. 多节点同步配置
2.1 终端方式
第一步:源文件托管到新分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28# git初始化
git init
# 添加远程仓库地址
git remote add origin https://github.com/用户名/仓库名(GitHub用户名.github.io).git
# 新建分支并切换到新建的分支
git checkout -b 分支名
# 添加所有本地文件到git
git add .
# git提交
git commit -m "提交的版本注释信息"
# 文件推送到hexo分支
git push origin 分支名
# 示例
git init
git remote add origin https://github.com/chthollists/chthollists.github.io.git
git checkout -b hexo_source
git add .
git commit -m "create hexo_source branch"
git push origin hexo_source
# 如果出现错误信息
# ERROR: Repository not found.
# fatal: Could not read from remote repository
# 则需要检查SSH是否配置成功、Git地址是否正确
git remote -v
# 如果不一致,通过该命令修改
git remote set-url origin https://github.com/用户名/仓库名.git第二步:原节点更新博客
在Hexo源文件目录下的
source/_post/目录下更新md博文,或者可以修改Hexo的配置主题等更新源文件到新分支:hexo_source
1
2
3
4
5
6
7# 先拉原来Github分支上的源文件到本地,进行合并
# 分支名后面的“--allow-unrelated-histories”是为了弹出“fatal: refusing to merge unrelated histories.”的错误
git pull origin hexo_source --allow-unrelated-histories
# 提交更新
git add .
git commit -m "update xxx"
git push origin hexo_sourceHexo部署静态文件到主分支:master
1
2
3$ hexo clean
$ hexo generate
$ hexo deploy
2.2 GitHub图形界面方式
第一步:新建分支:hexo_source

第二步:设置新分支为默认分支(非必须,也可通过命令指定分支)
- Hexo目录下的源文件和远程仓库上的文件是不同的,实际上是
public文件夹的文件通过hexo d上传到GitHub上了,其他的文件则留在本地目录下 - Hexo实际上是将源文件中的博文、主题等发送到
username.github.io远程仓库,同时把md文件转换成静态网页文件
- Hexo目录下的源文件和远程仓库上的文件是不同的,实际上是
第三步:原节点
clone新分支到本地克隆:
git clone -b 分支名 仓库地址查看分支:在
username.github.io目录下执行git branch,结果为新分支名
第四步:将Hexo源文件全部复制到
username.github.io目录下需要将
themes目录下的所有主题的.git目录,因为一个git仓库中不能包含另一个git仓库,提交主题文件夹会失败。第五步:提交更新新分支
1
2
3
4# 提交更新
git add .
git commit -m "update xxx"
git push origin hexo_source
第六步:原节点更新博文
- 通过
git pull、git push来管理新分支上的博客源文件 - 通过
hexo来将博客的博文、主题配置等部署到主分支上,提供远程访问
- 通过
第七步:新节点更新博文
新节点首先要安装
Node.js、Git、Hexo,并且要生成SSH公钥和私钥,与GitHub账户关联新节点首次使用Hexo时,需要
clone远程仓库username.github.io的新分支,即管理Hexo源文件的分支,并在本地克隆的新分支目录下,执行npm install这是由于仓库有一个
.gitignore文件,里面默认是忽略掉node_modules文件夹的,也就是说仓库的新分支并没有存储Hexo所需的插件依赖,所以需要install。克隆并安装完依赖之后,就可以和原节点一样,通过
git管理Hexo源文件的版本,通过hexo部署静态页面
注意:所有节点在更新博客时,都要先
git pull,从而保证操作的时最新版本
2.3 私有仓库隐藏源文件
分支同步方式的缺陷
如果将Hexo源文件同步至新分支,则会由于
GitPages或者CodingPages的特性,自动变为公开目录,如果其中有一些不希望别人看见的信息,则会变得不方便,所以可以新建一个私有仓库来进行同步,而不使用分支。步骤
第一步:在GitHub上新建私有仓库(会员功能,2019.1.8后免费使用)
第二步:原节点在本地创建仓库,存放Hexo源文件,并关联到GitHub上的远程私有仓库,注意
git push -u时由于第一次上传到该仓库需要带上-u参数1
2
3
4
5
6
7# 示例
git init
git remote add origin https://github.com/chthollists/HexoBlogPrivateRepo.git
git checkout -b hexo_source
git add .
git commit -m "update hexo_source flies to prviate repo"
git push -u origin master第三步:新节点
git clone该私有仓库,并更新博客,push提交,hexo g -d部署到GitHub Pages上1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 第一次同步时
git clone -b <分支,默认master> 仓库地址 <本地存放路径,可省略>
npm install
# 非第一次同步
git pull # 先拉取,避免缺少文件
# 提交更新
git commit -a -m 'content'
git push
# 部署到GitPages
$ hexo clean
$ hexo g # hexo d -g
$ hexo d -w # -w用来查看变化
3. 其他问题
3.1 新节点拉取文件
分支方式:直接
pull拉取1
git pull
私有仓库方式:使用
fetch代替pull1
2
3
4# 将远程 git 仓库上最新的内容拉取到本地,将本地库所关联的远程库更新至最新
git fetch --all
# 强制将本地库的内容指向最新远程仓库的master分支
git reset --hard origin/master
3.2 同步与主题文件的影响
主题文件中
.git的删除:rm -rf ./themes/yilia/.git由于Git仓库中不能嵌套另一个,所以Hexo源文件中的主题文件需要与GitHub上的主题仓库解除关联,即删除主题文件中的
.git文件。-
对于常用的
Next主题,除了主题目录下的.git文件,在themes/next/source/lib下还有一个.gitignore文件,该文件会使git操作忽略其中设置的文件类型,从而导致部分主题文件没有被同步到GitHub上。此时需要将themes/next/source/lib手动复制到不同节点的对应目录下。 主题的更新
由于删除了主题的
.git文件,所以主题无法通过git进行版本控制,此后需要更新主题时,可以在另一个地方git clone下来该主题的最新版本,然后将内容拷到当前主题目录。
3.3 新节点安装Hexo依赖的问题
Hexo依赖安装
- 命令:
npm install - 执行位置:Hexo源文件的根目录下
- 命令:
安装第三方插件的问题
- 受到
node的版本的影响、跨平台、兼容性的影响 - 如:
fsevent不支持node v11+版本,解决方案
- 受到
解决方法:降低新节点的
node的版本小白法:删除后重新安装
nvm方式:Node Version ManagerNode Version Manager工具用来管理多个版本的node环境,使用
nvm的命令行可以实现不同版本的node环境的切换。
3.4 参考资料
- 利用Hexo在多台电脑上提交和更新github pages博客 - 简书 (jianshu.com)
- 利用Hexo在多台电脑上提交和更新博客
- Hexo博客的跨设备同步
- 最安全的 hexo 多电脑同步博客解决方案–非新建分支 - 简书 (jianshu.com)
- Hexo博客的安装部署及多电脑同步 - 云+社区 - 腾讯云 (tencent.com)
- 多台电脑使用Hexo
发布时间: 2021-12-11 23:35:58
最后更新: 2022-01-21 23:09:05
本文标题: Hexo博客搭建番外篇——多节点更新Hexo博客
本文链接: https://chthollists.github.io/post/246f003b.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明作者和出处!