Guide for Hexo Blog Backup and Recovery

Guide for Hexo Blog Backup and Recovery

Astrid Stark Lv. ∞

在使用 Hexo 搭建博客时,Hexo 会通过自己的逻辑向 GitHub 推送并更新,但这个 GitHub 库上保存的都是经过编译后的 HTML 网页,而搭建博客所需的 Markdown 原稿、配置文件等只保存在本地,一旦丢失后果非常严重。因此,可以采用“公私双库双轨制”的方式,备份重要文件。

一、 核心架构与原理

我们需要将“网页展示”和“源码备份”两个功能进行拆分。公库和私库的作用分别如下:

  • 公库:如 AstridStark25963.github.io,仅存放 Hexo 编译生成的静态网页,由 hexo deploy 自动接管,无需手动干预。
  • 私库:新建 GitHub 私有仓库(如 hexo-backup),使用原生 Git 备份博客核心配置文件、Markdown 原稿及自定义脚本。

Hexo 根目录本身并非 Git 仓库,其部署依赖于自动生成的隐藏文件夹 .deploy_git 而非 Git 仓库所使用的 .git 文件夹,因此根目录源码需要单独纳入 Git 版本控制。

二、 配置与初始化

配置 .gitignore 文件

在博客根目录新建或修改 .gitignore 文件,过滤生成的静态文件与大体积依赖,仅保留核心源码及主题目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 排除系统文件与编译产物
.DS_Store
Thumbs.db
db.json
*.log
public/
.deploy*/
.deploy_git/

# 排除依赖包(后续通过 package.json 恢复)
node_modules/

# 只保留 themes 文件夹的骨架,排除可能残留的旧主题代码
# 注意:若对主题源码有自定义修改,请删除下方两行,直接备份整个主题文件夹
themes/*
!themes/.gitkeep

Git 无法检测到空文件夹,因此,需要在空的 themes 文件夹中创建 .gitkeep 文件,以确保 Git 能追踪并保留该空目录结构。

初始化并推送到私库

在博客根目录打开终端,执行以下 Git 命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 初始化仓库
git init
git branch -M main

# 关联私有仓库
git remote add origin https://github.com/AstridStark25963/hexo-backup.git

# 暂存并提交源码
git add .
git commit -m "Initial commit: backup Hexo core assets"

# 强制推送到云端并绑定上游分支
git push -f -u origin main

由于 GitHub 新建仓库时可能会自动生成 README,导致首次推送产生历史冲突报错。加上 -f 强推覆盖云端即可。

-u 参数绑定上游后,以后每次备份只需要输入 git push,不需要用 git push origin main

三、 灾难恢复与多端复原

在新设备(需预装 Node.js 和 Git)上恢复博客编写环境。

执行以下命令,拉取源码:

1
2
git clone https://github.com/AstridStark25963/hexo-backup.git
cd hexo-backup

读取备份的 package.json,一键安装 Hexo 本体及相关插件依赖:

1
npm install

若使用了第三方主题且未通过 NPM 安装,需拉取主题文件(以 Redefine 为例):

1
2
cd themes/redefine
git pull

返回根目录,启动本地服务器验证环境是否复原:

1
npx hexo s

四、 多端协作同步工作流 (SOP)

为避免多设备编写导致数据冲突或历史覆盖,请严格遵循以下 Git 工作流:

  • 撰写前(同步云端)

    在开始写新文章前,务必先拉取私库最新源码。

    1
    git pull
  • 发布后(推送备份)

    生成网页并部署到公库后,立即将最新源码提交至私库。

    1
    2
    3
    4
    npx hexo d
    git add .
    git commit -m "Update posts and configs"
    git push