更加通用的Hexo多端部署原理及实现,适用于各种系统之间
本文推荐在作者的个人博客网站阅读:shenying.online
一、故事背景
故事发生在大学上学期间(而不是寒假)。上学期间,宿舍条件极其恶劣,半夜断电、空间狭小。我们大学垃圾条件使用游戏本的种种弊端被无限放大:游戏本电源适配器极其臃肿,不插电的情况续航堪忧(难以超过两个小时),并且由于其结构上的臃肿,在狭小的宿舍空间每次移动、打开犹如小平房开拖拉机。
将游戏本带去图书馆学习就更是天方夜谭,在此之前我也买了一个MatePad的平板,但是平板的使用场景对一个计科学生来说也实在有限。
于是,我用在学校做临时监考工作挣的钱入了一台MacBookAir(二手只要3k左右)。与此同时,我也预知了我即将支付不起博客网站巨额服务器费用的未来,未雨绸缪将博客迁移到了Hexo框架上,从此再无数据担忧。
我在我的MacBook上第一次部署了Hexo框架,并且由于在学校的主力机是Mac,从来没有想过在我的游戏本(也就是Windows系统)上部署Hexo框架会怎样。或者说,我从来没有考虑过移植的问题。
事情的转机从我的寒假生活开始。寒假回到家中,我的ROG魔霸新锐2023游戏本再次启动(没错我就是故意写全了得瑟的😁)。之前的缺点(笨重、移动续航堪忧)瞬间不再是缺点!在家里我的游戏本也是直接化身游戏主机站桩输出,不再需要频繁移动使用。于是我将可怜的MacBook抛到一边,低刷低配的低能MacOS一边去,Windows万岁。
直到一段时间后我又开始写Hexo博客,习惯了Wordpress网页端后台直接书写博客的我一时间竟不知道如何在我的Windows上写博客。我看了几篇博客:Hexo从Mac到Windows。我本来以为这样就能解决了,抄作业嘛多简单~
结果就是,我看了好几篇类似的Mac迁移Hexo到Windows的博客,在我的电脑上按照相同的步骤最终都会在同一个步骤报错。报错!报错!还是报错。
尝试过和人机ChatGPT老师交流,无果ed。
谁知这事儿就这样撂下了,我也懒得研究了,几乎有半个寒假,我每次想在我的shenying.online上发布博客都是将阵地转移到Mac上操作。就这么麻烦的事儿我干了一个寒假,就因为跟着上面说的博客做爆了错没有成功移植(要知道我寒假主力机一直是Windows的ROG,你可以想象我正在用windows写Markdown格式的博客,但是到了发布到Gitpage的时候却不得不打开Mac再复制过去发布一遍)。
直到2月12日事情才迎来了转机,我实在无法忍受这种写博客的割裂感了!我要像Hexo(骇客)一样写博客!我不能忘记老祖宗传下来的编程教养:优雅。这么粗鲁的事情不能再干下去了,一点儿也不Hexo。
接下来就是我自己弄懂的Heox博客部署原理以及多端部署的核心思路。
二、Hexo 文件结构解读
想知道Hexo如何多端部署,先要知道Hexo是怎么工作的。首先我们来看看Hexo框架的文件结构:

看好了,别眨眼。这里的node_modules是node的用到的库,系统会根据你安装的主题啊之类的自定义自动生成,不用太关注他(意思是弄丢了也没事儿,毕竟不是核心数据)。
public是你用hexo g后生成的静态文件。相应的hexo clean会删除他。
scaffolds也是Hexo初始化会自动生成的默认文件,你写文章不会影响里面的文件所以不用管他。
source就非常重要了,我们重点来看一下。可以看到,里面存放的是最核心的文件,也就是博客网站的生命,博客文章的.md格式文件,草稿,还有一些主题生成的文件,这里以我常用的主题redefine为例,个别文件可能不一样。
themes文件夹里没什么重要的文件,不用管。

这里就要谈一下Hexo的工作机制了,Hexo本质上还是类似Vue脚手架那一套的前端框架。你可以理解为你在本地编写了source中的文件,这时候你想要发布到网页上去,Hexo就会帮你项目打包到public文件夹中并成为一个静态的前端项目,然后将public文件夹中的文件部署到Gitpage。
发现没有,这里的public的功能很像你写一个程序,编译成了exe。你把exe发送给别人让别人直接执行。
并且这里的source相当于是你的元数据,类似于数据库一样至关重要的存在。
接着说说这里的_config.yml,这是你的网站的一些配置,也就是个性化的自定义文件。如果你使用的主题,就会有主题对应的_config.yml来配置你的主题的一些个性化设置,例如这里有两个主题:config.landscape.yml和config.redefine.ym。
package.json中存放着你用npm下载的包的信息,你可以理解为npm是一个应用商店,这就是应用商店的应用列表。我看的教程中就是告诉我把原来电脑的package.json拷贝过来然后在根目录npm install。结果我按着操作,每次安装都会抱一堆警告和错误。
所以,这个文件我们也不需要。
2.1 需要的文件
综上所述,我们其实只需要关注我们博客网站的核心文件即可,我建议将他们专门备份到一个代码仓库:

没错,就是他们。你看我多谨慎。想想如果我还在使用Wordpress博客来备份还需要备份什么数据库,如果用Hexo静态博客框架就只需要把你的文章的.md文件和站点配置文件_config.yml全塞进一个仓库就行了,多方便。
当然还有一种更加优雅的方案:创建一个名为Hexo的分支,存放你的Heox本地配置文件。网上都能找到教程,点我跳转到其中一篇。
由于Hexo会将source经过框架内部的处理和美化最终生成一个public部署到Gitpage,而public又是有别于source的。比如,你好世界.md这篇文章在public中找到后已经变成了你好世界.html了。所以Github的博客托管仓库中是没有我们的source的,也找不到那些文章的.md的markdown文件。它都变成html格式了,你还怎么玩?
这些重要文件只会在你的本地计算机上,所以一定要自己及时备份起来以防后患(说不定哪天你的电脑就自己偷偷喝咖啡了呢~🔪)。
完成这些文件的备份,工作就很机械了。我的终极完美适配的思路是:按照原来你部署的方式,老老实实地从零开始部署。冷静地打开你的主题的官方文档,老老实实地把主题包括每一个插件自己安装上。
没错,你没有听错,终极的方案就是这么朴实无华。
然后的然后,把source和config相关的文件一五一十的替换。在Gitpage或者说Github的博客托管仓库中创建一个新的Branch,BranchName(分支名)就见仁见智了,比如我在Windows写博客的时候,用windows这个branch。
然后就是很是很重要的一点(我已经不知道说了多少个然后了,果然连接词还是得多学啊,Then,After that什么的,哈哈)。你最后总要hexo d然后把你的静态文件托管上去的吧,所以别傻傻的把_config.yml完全替换过去。你总得把里面的branch名字改成你新创建的branchName吧。

三、协同方案分析
完成了上述,你已经有一个专门分支了吧?我的建议是每个电脑一个分支。我来举个例子,比如你最新的进度是在Mac上写的,并且分支名是main(github由于种族问题已经将默认分支master改成了main了),这个时候你想在windows电脑上写一篇文章,然后你就写,写完之后hexo clean、hexo g、hexo d一步没落下,最终静态文件被托管到了branch windows下。
这个时候你可能又回到了mac电脑上了,就需要同步一下博客的进度。所以你需要将main分支和windows分支同步即可。
具体的,如果长期在windows上写博客,并且懒得更新原来的分支了,你可以在Gitpage将默认分支改为windows(非必需),将Gitpage的渲染的分支改为windows(必须)。
这里可以使用本方案:
下面的描述很人机因为是问的ChatGPT,不问DeepSeek是因为deepSeek服务器被打废了。
1.切换到 main 分支:
git checkout main
2.拉取 main 分支的最新更新:
git pull origin main
3.切换到 wind 分支:
git checkout wind
4.将 main 的更新合并到 wind:
git merge main
这样,wind 分支就会包含 main 分支的最新内容。如果有冲突,你需要手动解决冲突。
5.推送合并后的 wind 分支:
git push origin wind
四、补充一个更加全面的备份方案
前面不是说了嘛,hexo不会将本地的文件上传到Github博客的仓库,那如果这个本地文件丢失了岂不是糟糕?上面也提到一种最简单粗暴的备份方案,将source和config直接扔到一个仓库中。
但是,这种方案在分支备份大法前就显得不那么优雅了。
因为在本地的hexo项目中无法使用git命令,所以我们要将远程的仓库克隆下来方便我们添加一个新的分支hexo,并在hexo中专门存放我们的本地项目文件。注意,之前提到的main分支或者说默认分支都是存放的hexo打包好的静态页面文件,我就不多提了。
具体的方法:
# 1.克隆远程仓库
git clone git@github.com:CCCCOOH/CCCCOOH.github.io.git(根据自己的仓库来决定)# 2.cd到克隆下来的仓库目录下(这里省略,根据你的文件目录来),然后创建一个新的分支hexo
git branch hexo# 3.将分支切换到hexo
git checkout hexo# 4.删除原来的文件(单独留下.git),将本地的文件(建议删除public)拷贝到目录下。
# 5.最后将分支推送到远程(Githhub仓库)
git add .
git commit -m '添加了hexo分支用于存放本地文件'
git push origin hexo
这里讲给git小白听。在第四步中你创建了hexo后,hexo默认会复制默认的分支,所以文件夹中的文件和默认分支一样。我们不需要这些文件,将他们删除,然后再拷贝你的本地文件到这个目录下并推送到远程就好了。
附一张备份文件目录的图。

相关文章:
更加通用的Hexo多端部署原理及实现,适用于各种系统之间
本文推荐在作者的个人博客网站阅读:shenying.online 一、故事背景 故事发生在大学上学期间(而不是寒假)。上学期间,宿舍条件极其恶劣,半夜断电、空间狭小。我们大学垃圾条件使用游戏本的种种弊端被无限放大࿱…...
5g基站测试要求和关键点
5G基站的测试要求涉及多个方面,以确保其性能、覆盖能力、稳定性和合规性。以下是5G基站测试的主要要求和关键点: 一、基础性能测试 射频(RF)性能测试 发射机性能:验证基站的发射功率、频率误差、调制质量(E…...
算法——搜索算法:原理、类型与实战应用
搜索算法:开启高效信息检索的钥匙 在信息爆炸的时代,搜索算法无疑是计算机科学领域中熠熠生辉的存在,它就像一把神奇的钥匙,为我们打开了高效信息检索的大门。无论是在日常生活中,还是在专业的工作场景里,…...
PlantUML 总结
PlantUML 总结 1. 概述 PlantUML 是一个开源工具,允许用户通过简单的文本描述来生成各种UML图表。它支持多种图表类型,包括但不限于序列图、用例图、类图、活动图等。 2. 基本概念 2.1 开始和结束标记 startuml 和 enduml:用于标记Plant…...
C++ 相对的字符串,判断却不相对
一、场景 在做项目的时候,有这样一个场景,根据字符串名称,给对应的变量赋值。传递的字符串跟对比的字符串是一样的,判断的时候却不相等,导致变量未正确附上值。 二、解决 经过查找,发现是字符串编码的问题…...
【嵌入式Linux应用开发基础】open函数与close函数
目录 一、open函数 1.1. 函数原型 1.2 参数说明 1.3 返回值 1.4. 示例代码 二、close函数 2.1. 函数原型 2.2. 示例代码 三、关键注意事项 3.1. 资源管理与泄漏防范 3.2. 错误处理的严谨性 3.3. 标志(flags)与权限(modeÿ…...
在实体机和wsl2中安装docker、使用GPU
正常使用docker和gpu,直接命令行安装dcoker和,nvidia-container-toolkit。区别在于,后者在于安装驱动已经cuda加速时存在系统上的差异。 1、安装gpu驱动 在实体机中,安装cuda加速包,我们直接安装 driver 和 cuda 即可…...
Unity3D实现显示模型线框(shader)
系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…...
解释和对比“application/octet-stream“与“application/x-protobuf“
介绍 在现代 Web 和分布式系统的开发中,数据的传输和交换格式扮演着关键角色。为了确保数据在不同系统之间的传输过程中保持一致性,MIME 类型(Multipurpose Internet Mail Extensions)被广泛应用于描述数据的格式和内容类型。在 …...
VAD端到端系列梳理以及阅读
0. 简介 最近VAD v2论文出来了,又掀起了一波该系列模型的热点。我们先看一下蒋博的文章,然后再来看一下《VADv2: End-to-End Vectorized Autonomous Driving via Probabilistic Planning》这篇文章,代码目前还没开源,可以期待一波…...
MySQL中类似PostgreSQL中的string_agg函数--GROUP_CONCAT函数的使用
文章目录 结论:MySQL没有string_agg,但有GROUP_CONCATGROUP_CONCAT函数的基本用法示例注意事项 系统变量 group_concat_max_len 如何查看和设置查看当前的group_concat_max_len值设置group_concat_max_len值 相关源码相关链接 结论:MySQL没有…...
在vmd中如何渲染透明水分子
1.设置背景为白色 依次点击Graphics>>Colors... 2. 改变渲染模式 依次点击Display>>rendermode>>GLSL 3. 渲染水分子 选中水分子,显色方式改为ColorID, 编号10的颜色; 选择材质为GlassBubble; 绘图方式为QuickSurf. 若水盒子显示效…...
每日十题八股-补充材料-2025年2月12日
1.从输入URL到页面展示发生了什么? 每日十题八股-2025年1月6日-8(整体的回答) 解析URL(判断URL合不合法,不合法直接跳转搜索引擎进行搜索)。判断浏览器中是否有缓存,有缓存则直接返回。获得IP…...
springboot+mybatis进行普通事务操作transaction
文章目录 背景前置环境准备关于 configuration 代码关于 transaction 使用其他 背景 你使用 springboot 和 mybatis/mybatis plus 来进行 web 开发,但是你发现你需要使用到事务操作 前置环境准备 首先你得在 application.yml 中配置好 mysql 数据源,这…...
DeepSeek-R1技术革命:用强化学习重塑大语言模型的推理能力
引言:低成本高性能的AI新范式 在2025年1月,中国AI公司DeepSeek发布了两个标志性模型——DeepSeek-R1-Zero与DeepSeek-R1,以仅600万美元的训练成本实现了与OpenAI O1系列(开发成本约5亿美元)相当的推理性能,…...
MybatisPlus常用增删改查
记录下MybatisPlus的简单的增删改查 接口概述 Service和Mapper区别 Mapper简化了单表的sql操作步骤(CRUD),而Serivce则是对Mapper的功能增强。 Service虽然加入了数据库的操作,但还是以业务功能为主,而更加复杂的SQL…...
常用电路(过压保护、电流/电压采集)
过压保护电路 输入电压使用电源(36V)或者typec(20V),需要过压保护电路处理输入再连接到CH224K,保证输入不高于最大获取电压20V MOS管导通条件为栅源极有压差,一般为5-10V 三极管导通条件为基极…...
干部监督系统“三色”预警的构建与应用
在新时代背景下,强化干部监督、提升管理水平已成为推动国家治理体系和治理能力现代化的关键一环。干部监督系统“三色”预警机制作为一种创新的管理工具,通过智能化、可视化的手段,实现了对干部行为的高效管理。本文将详细探讨干部监督系统“…...
XML DOM
XML DOM XML DOM(Document Object Model)是一种用于访问和操作XML文档的标准方式。它提供了一种树形结构来表示XML文档,使得开发者能够方便地对XML数据进行读取、修改和操作。本文将详细介绍XML DOM的基本概念、结构、操作方法以及应用场景。 一、XML DOM的基本概念 XML …...
Zabbix-Trigger中的time函数坑
问题描述 由于功能需求,需要限制trigger的报警时间,所以加了如下的报警限制 and (time()>010000 and time()<045959)但是事与愿违,报警的时间总是对不上 但是,Zabbix设置的时区就是北京时间,应该是没有问题的…...
wordpress主题设置教程
然后你要制作好你的网站所有页面的静态页 都做好后,就可以开始制作主题了 第一步:建立你的主题标记 1、新建一个style.css,放在你的主题包根目录下,内容如下: /* Theme Name: 你的主题名称,随便起 Theme…...
9 数据流图
9 数据流图 9.1数据平衡原则 子图缺少处理后的数据操作结果返回前端应用以及后端数据库返回操作结果到数据管理中间件。 9.2解题技巧 实件名 存储名 加工名 数据流...
python项目相关
遇到的问题 解决 Python 模块导入路径问题 问题描述 在运行 Python 文件时,可能会遇到以下错误: ModuleNotFoundError: No module named utils原因: Python 的模块导入机制依赖于当前工作目录和 sys.path 中的路径。当直接运行某个文件时…...
基于轨道角动量自由度在空间频域中的可选择特性
将光的轨道角动量自由度应用到全息领域,证实了轨道角动量全息;实现了高维轨道角动量复用全息技术,获得了高安全的全息加密和超高容量全息信息系统。 1、轨道角动量自由度在全息中的引入 如图1所示,当全息图中没有携带轨道角动量的…...
机器人学的AGI实现路径:从专用智能到通用认知的跨越
文章目录 引言:机器人学的范式革命一、AGI与机器人学的融合现状1.1 传统机器人系统的局限1.2 AGI技术为机器人学带来的变革1.3 关键里程碑案例二、AGI机器人的核心技术栈2.1 多模态感知融合2.2 认知架构设计2.3 具身认知实现路径三、AGI机器人的实现路径3.1 阶段式发展路线3.2…...
香港中文大学 Adobe 推出 MotionCanvas:开启用户掌控的电影级图像视频创意之旅。
简介: 亮点直击 将电影镜头设计引入图像到视频的合成过程中。 推出了MotionCanvas,这是一种简化的视频合成系统,用于电影镜头设计,提供整体运动控制,以场景感知的方式联合操控相机和对象的运动。 设计了专门的运动条…...
基于STM32的学习环境控制系统设计
🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是学习环境控制。 设备的详细功能见网盘中的文章《21、基于STM32的学习环境控制系统设计》: 链接:https://pan.baidu.com/s/1uWSZX2zbZwy9sY…...
snort3.0-ubuntu18.04 64入侵检测安装与使用ailx10ailx10知乎知识会员
在日常生活中,很多人怀疑自己的手机、电脑被监控了,担心自己的隐私泄漏,实际上最佳的检测方式就是终端检测,也就是EDR,但是就是有那么多的人在网上大放厥词,说任何EDR杀毒软件都检测不到监控,毕…...
使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器进行模型检查点处理
2023 年 11 月,Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元(数据集和数据加载器)的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理…...
408-数据结构
数据结构在学什么? 1.用代码把问题信息化 2.用计算机处理信息 ch1 数据:数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 ch2 //假设线性表…...
