序言:为什么要备份?
在这篇文章中,我们已经将 Hexo 和 GitHub 结合起来搭建了自己的个人博客。hexo d 命令部署到 GitHub 的是 Hexo 编译后的文件,这些文件用于生成网页,但并不包含我们的博客源文件。

实际上,它上传到 GitHub 的内容位于我们本地目录的 .deploy_git 文件夹内:

我们的源文件,例如相关的 source 文件和配置文件等,都没有上传到 GitHub。因此,我们需要利用 Git 进行分支管理,对源文件进行备份。这样,我们就可以在另一台电脑上将源文件 clone 到本地,安装相应环境后继续撰写博客。
闲话少说,下面我们直接进入博客源文件备份的具体操作。
一、Hexo 博客配置首次备份
创建新分支
在 GitHub 上博客仓库下创建一个新的分支 hexo,并将其设置为默认分支。具体操作如下:



克隆 Hexo 分支
在本地将我们刚创建的 hexo 分支克隆到本地:

将克隆下来的项目中的 .git 文件复制到你的 Hexo 博客目录下:

注意:如果你之前搭建博客时更换过主题文件,请务必删除主题文件中的 .git 文件夹。
完成以上操作后,即可正式开始备份。
二、正式开始备份
重要提示:
- 后续更换运维设备(即写博客的电脑),只需从此步开始备份即可。
- 对搭建在 GitHub 或 Cloudflare Pages 等平台上的博客进行自动化更新或发布新文章,更改或添加博客内容完成后,也使用此步骤即可实现自动迭代。
1、备份 Hexo 分支(Hexo 源文件)
1)初始化本地仓库并关联远程
确保当前位于 Hexo 项目的根目录:
1
| cd /path/to/your/MyBlog-Hexo
|
初始化 Git(如果尚未初始化):
关联远程仓库:
1
| git remote add origin git@github.com:用户名/仓库.git
|
切换到 hexo 分支:
2)配置分支规则
设置默认推送分支为 hexo:
1
| git push --set-upstream origin hexo
|
3)确认已在 .gitignore 中配置忽略文件
可以通过 cat .gitignore 命令查看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| ❯ cat .gitignore
.DS_Store Thumbs.db
db.json *.log
node_modules/
public/ .deploy*/
_multiconfig.yml
.env *.env
|
4)确认 _config.yml 内已配置仓库地址及分支
可以通过 grep 'deploy' -C 5 _config.yml 命令查看:
1 2 3 4 5 6 7 8 9 10 11 12
| ❯ grep 'deploy' -C 5 _config.yml
theme: anzhiyu
deploy: type: git repo: git@github.com:用户名/仓库.git branch: master message: "自动更新: {{ now('YYYY-MM-DD HH:mm:ss') }}"
|
5)提交 Hexo 源文件
添加所有未忽略文件:
提交源文件:
1
| git commit -m "备份Hexo源文件"
|
推送到远程 hexo 分支:
此时,你会在 GitHub 的 hexo 分支上看到你的源文件。
2、备份 master 分支(博客生成的静态目录)
在配置好 GitHub 密钥等相关设置后,执行以下命令即可自动上传至 GitHub:
1 2
| hexo clean && hexo g && hexo d
|
PS:如果你希望每次更改都备份到 hexo 分支上(不建议日常使用),可以执行如下步骤:
1 2 3 4 5
| hexo clean git add . git commit -m "备份" git push hexo g & hexo d
|
备份至此完成!
三、如何恢复博客
假设你现在更换了电脑,希望在新电脑上继续撰写博客,需要将 GitHub 上 hexo 分支上的项目克隆到本地(请注意,是你备份的那个分支)。
1、登录 GitHub,切换分支为 hexo,克隆博客仓库,进入博客的根文件夹,并安装 Hexo 博客所需依赖:
1 2 3 4
| git clone https://github.com/用户名/仓库.git cd 仓库根目录 npm install hexo-cli npm install hexo-deployer-git
|
2、安装主题。如果你的电脑上还没有 Node.js 等环境,可能还需要先安装相关环境。以 安知鱼主题 为例:
1
| git clone -b main https://github.com/anzhiyu-c/hexo-theme-anzhiyu.git themes/anzhiyu
|
打开 Hexo 根目录下的 _config.yml,找到以下配置项,将主题修改为 anzhiyu:
3、安装 pug 和 stylus 渲染插件:
1
| npm install hexo-renderer-pug hexo-renderer-stylus --save
|
如果无法安装,可以尝试使用 cnpm 进行安装:
1
| npm install hexo-renderer-pug hexo-renderer-stylus --save --registry=http://registry.npmmirror.com
|
4、执行 Hexo 本地预览命令:
1
| hexo clean && hexo g && hexo s
|
现在你基本上就可以在另一台电脑上继续你的博客之旅啦!
四、日常写作工作流程
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
| ❯ cat deploy.sh
REMOTE_REPO="git@github.com:用户名/仓库.git" HEXO_BRANCH="hexo" MASTER_BRANCH="master" CONFIG_FILE="_config.yml"
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' PURPLE='\033[0;35m' NC='\033[0m'
BORDER="══════════════════════════════════════════════════════════════════════════════"
current_branch() { git rev-parse --abbrev-ref HEAD }
show_header() { clear echo -e "${PURPLE}${BORDER}${NC}" echo -e "${CYAN} ██╗ ██╗███████╗██╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗" echo -e " ██║ ██║██╔════╝╚██╗██╔╝██╔═══██╗ ██╔════╝██╔═══██╗██╔═══██╗██║ ██╔╝" echo -e " ███████║█████╗ ╚███╔╝ ██║ ██║ ██║ ██║ ██║██║ ██║█████╔╝ " echo -e " ██╔══██║██╔══╝ ██╔██╗ ██║ ██║ ██║ ██║ ██║██║ ██║██╔═██╗ " echo -e " ██║ ██║███████╗██╔╝ ██╗╚██████╔╝ ╚██████╗╚██████╔╝╚██████╔╝██║ ██╗" echo -e " ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝${NC}" echo -e "${PURPLE}${BORDER}${NC}" echo -e "${YELLOW} 当前分支: ${GREEN}$(current_branch)${NC}" echo -e "${YELLOW} 远程仓库: ${CYAN}$REMOTE_REPO${NC}" echo -e "${PURPLE}${BORDER}${NC}" }
show_menu() { show_header echo -e "${BLUE} 请选择操作:${NC}" echo -e "" echo -e "${GREEN} 1. 本地测试 ${CYAN}(启动Hexo服务器进行预览)${NC}" echo -e "${YELLOW} 2. 备份源文件 ${CYAN}(提交所有更改到 ${HEXO_BRANCH} 分支)${NC}" echo -e "${PURPLE} 3. 部署博客 ${CYAN}(生成静态页面到 ${MASTER_BRANCH} 分支)${NC}" echo -e "${RED} 4. 一键发布 ${CYAN}(备份源文件 + 部署博客)${NC}" echo -e "${BLUE} 5. 同步更新 ${CYAN}(从远程拉取最新源文件)${NC}" echo -e "" echo -e "${CYAN} 0. 退出脚本${NC}" echo -e "${PURPLE}${BORDER}${NC}" }
local_test() { show_header echo -e "${GREEN}启动本地测试服务器...${NC}" echo -e "${CYAN}即将执行: ${YELLOW}hexo clean && hexo g && hexo s${NC}" echo -e "${PURPLE}${BORDER}${NC}" echo -e "${BLUE}提示: ${CYAN}按 ${RED}Ctrl+C ${CYAN}停止服务器${NC}" echo -e "${PURPLE}${BORDER}${NC}" hexo clean && hexo g && hexo s }
backup_source() { show_header echo -e "${GREEN}备份Hexo源文件到 ${HEXO_BRANCH} 分支...${NC}" if [[ $(current_branch) != "$HEXO_BRANCH" ]]; then echo -e "${YELLOW}切换到 ${HEXO_BRANCH} 分支...${NC}" git checkout $HEXO_BRANCH || { echo -e "${RED}切换分支失败!${NC}" return 1 } fi git add . echo -e "${CYAN}请输入提交说明:${NC}" read -p "> " commit_msg commit_msg=${commit_msg:-"备份源文件"} echo -e "${PURPLE}${BORDER}${NC}" if git commit -m "$commit_msg"; then echo -e "${GREEN}✓ 提交成功!${NC}" else echo -e "${YELLOW}⚠ 没有变更可提交.${NC}" fi echo -e "${BLUE}推送更改到远程仓库...${NC}" if git push origin $HEXO_BRANCH; then echo -e "${GREEN}✓ 备份成功完成!${NC}" else echo -e "${RED}✗ 推送失败!${NC}" return 1 fi }
deploy_to_master() { show_header echo -e "${PURPLE}部署到 ${MASTER_BRANCH} 分支...${NC}" if ! grep -q "branch: $MASTER_BRANCH" "$CONFIG_FILE"; then echo -e "${RED}错误: _config.yml 中未配置部署到 ${MASTER_BRANCH} 分支!${NC}" return 1 fi echo -e "${CYAN}即将执行: ${YELLOW}hexo clean && hexo g && hexo d${NC}" echo -e "${PURPLE}${BORDER}${NC}" hexo clean && hexo g && hexo d deploy_time=$(date +"%Y-%m-%d %H:%M:%S") echo -e "${PURPLE}${BORDER}${NC}" echo -e "${GREEN}✓ 部署完成! ${CYAN}时间: ${YELLOW}${deploy_time}${NC}" echo -e "${BLUE}提示: ${CYAN}稍后访问您的 ${YELLOW}GitHub Pages ${CYAN}查看更新${NC}" }
backup_and_deploy() { backup_source if [ $? -eq 0 ]; then deploy_to_master else echo -e "${RED}备份失败,取消部署操作${NC}" fi }
pull_latest() { show_header echo -e "${BLUE}从远程拉取最新源文件...${NC}" if [[ $(current_branch) != "$HEXO_BRANCH" ]]; then git checkout $HEXO_BRANCH fi echo -e "${CYAN}执行: ${YELLOW}git pull origin ${HEXO_BRANCH}${NC}" echo -e "${PURPLE}${BORDER}${NC}" git pull origin $HEXO_BRANCH echo -e "${CYAN}更新依赖包...${NC}" echo -e "${CYAN}执行: ${YELLOW}npm install${NC}" echo -e "${PURPLE}${BORDER}${NC}" npm install echo -e "${GREEN}✓ 更新完成!${NC}" }
exit_script() { show_header echo -e "${GREEN}感谢使用Hexo博客管理脚本${NC}" echo -e "${CYAN}再见! 祝您写作愉快!${NC}" echo -e "${PURPLE}${BORDER}${NC}" sleep 1 clear exit 0 }
while true; do show_menu read -p "请输入选项 [0-5]: " choice case $choice in 1) local_test read -p "按回车键返回主菜单..." ;; 2) backup_source read -p "按回车键返回主菜单..." ;; 3) deploy_to_master read -p "按回车键返回主菜单..." ;; 4) backup_and_deploy read -p "按回车键返回主菜单..." ;; 5) pull_latest read -p "按回车键返回主菜单..." ;; 0) exit_script ;; *) show_header echo -e "${RED}无效选择! 请输入0-5之间的数字${NC}" sleep 1 ;; esac done
|
赋权并启动博客管理脚本:
1 2
| chmod +x deploy.sh ./deploy.sh
|
选择 "5. 同步更新" 拉取最新源文件 (确保从远程 hexo 分支获取最新内容)。
2. 创建新文章
在博客目录下执行:
这会自动在 source/_posts/ 目录下生成 Markdown 文件,格式如下:
1 2 3 4 5 6 7 8 9 10 11 12
| --- title: 文章标题 date: 2023-07-13 14:00:00 categories: - 技术 tags: - Hexo - Git cover: /images/cover.jpg excerpt: 这里是文章摘要... --- 这里是文章正文内容,使用Markdown语法...
|
3. 编辑文章(推荐工作方式)
1)启动本地实时预览:
2)保持终端运行,在浏览器中打开:
http://localhost:4000
3)使用 VS Code 或其他编辑器编辑 Markdown 文件。保存后浏览器会自动刷新预览效果。
4. 写作内容规范
1)分类与标签:
1 2 3 4 5 6
| categories: - 前端技术 - JavaScript tags: - Vue - 性能优化
|
2)图片管理:
创建目录:source/images/2023-07-13-文章标题/
引用图片:
3)代码块:
title1 2 3 4
| function highlightCode() { // 带行号显示的代码块 return "支持多种语言高亮"; }
|
4)高级元素:
1 2 3 4 5 6 7 8
| {% note success %} **提示框**:成功/警告/危险等样式 {% endnote %}
{% tabs unique-name %} 标签页内容 另一个标签页 {% endtabs %}
|
5. 保存与发布流程
1 2 3 4 5 6 7 8 9
|
1. 仅保存源文件 -> 选"2. 备份源文件" 2. 仅发布文章 -> 选"3. 部署博客" 3. 保存并发布 -> 选"4. 一键发布"
|
五、多设备写作同步方案
1. 在新电脑上设置环境:
1)安装前置依赖:
1 2 3
| brew install node npm install -g hexo-cli
|
2)克隆博客源码:
1 2
| git clone -b hexo git@github.com:用户名/仓库.git cd MyBlog-Hexo
|
3)安装依赖:
4)将管理脚本设为可执行:
5)开始写作:
2. 设备间切换时:
离开当前设备前:
到新设备后:
六、写作内容管理建议
1. 草稿管理:
1 2 3 4 5
| hexo new draft "未完成文章"
hexo publish "未完成文章"
|
2. 资源文件夹:
在 _config.yml 中启用:
创建文章时会自动生成同名文件夹存放图片等资源。
3. 文章模板:
修改 scaffolds/post.md 定制默认 Front-matter:
1 2 3 4 5 6 7 8 9 10
| --- title: {{ title }} date: {{ date }} categories: - 默认分类 tags: - 默认标签 cover: excerpt: ---
|
最后
到这里,Hexo 博客的备份与恢复流程就基本结束啦。
如果你觉得这篇教程有帮助,别忘了给博主点个赞哦!