利用git分支进行Hexo博客源码备份

hexo博客搭建可以看这里

问题描述

博客搭建环境:hexo+gitpage,本地编写·markdown文件,通过hexo g -d渲染后上传至github repo

相较于wordpresshexo框架的博客编写基本是在本地完成,在其他机器写博客时需要备份并重新配置环境。但是nodejs环境文件很多,备份起来相当麻烦。

解决方案

大致有两种方案:

  • 创建新仓库,备份源文件
  • 创建新分支,备份源文件

创建备份

这里我主要记录github分支的方式:主分支用于渲染github page,分支用于备份hexo源文件。

在hexo根目录下创建git

最新版的hexo在初始化之后是没有.git目录的,通过_config.yml里面的deploy参数生成.deploy_git目录,并在通过该目录进行push操作。因此,我们直接在hexo根目录下创建.git目录和.gitignore并不会冲突。

先另外找一个文件夹把github上面的整个hexo项目先克隆 下来,然后复制其中的.git目录到hexo的根目录下。在hexo的根目录下进行如下操作:

  1. 新建.gitignore文件,排除剩下的不需要备份的文件。内容如下:

    # .gitignore
    .DS_Store
    Thumbs.db
    db.json
    *.log
    node_modules/
    public/
    .deploy*/
    .vscode/
    _multiconfig.yml
  2. 右键打开Open Git Bash here,输入以下内容:
    在刚刚创建好.githexo的根目录下执行:这里以 hexoBackup 分支为例。

    • 查看所有分支,包括 本地的 和 远程的:git branch -a
    • 查看本地分支: git branch
    • 查看远程分支: git branch -r
    • 创建本地分支:git branch hexoBackup
    • 查看本地分支 : git branch
    • 切换到 hexoBackup 分支上: git checkout hexoBackup
    • 删除本地 main 分支 防止误推送: git branch -d main
    • 查看本地分支 : git branch
    • 加载 要推送的文件 : git add .
    • 备注更新 : ` git commit -m “2025.5.28”
    • 推送到 hexoBackup 分支上: git push origin hexoBackup

所有代码如下:

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (main)
$ git branch -a # 查看所有分支,包括 本地的 和 远程的
* main # 这是本地的
remotes/origin/HEAD -> origin/main # 这是远程的
remotes/origin/main

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (main)
$ git branch # 查看本地分支
* main

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (main)
$ git branch -r # 查看远程分支
origin/HEAD -> origin/main
origin/main

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (main)
$ git branch hexoBackup # 创建本地分支

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (main)
$ git branch # 查看本地分支
hexoBackup
* main

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (main)
$ git checkout hexoBackup # 切换到 hexoBackup 分支上
D "Blog \345\233\276\345\272\212\346\226\271\346\241\210\357\274\232Backblaze B2
# ....省略了大部分
"\351\200\232\350\277\207Docker\345\256\211\350\243\205\345\260\217\351\233\205Alist/index.html"
Switched to branch 'hexoBackup'

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (hexoBackup)
$ git branch -d main # 删除本地 main 分支 防止误推送
Deleted branch main (was 23d3ff3).

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (hexoBackup)
$ git branch # 查看本地分支,
* hexoBackup

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (hexoBackup)
$ git add . # 加载 要推送的文件
warning: in the working copy of 'google.json', LF will be replaced by CRLF the next time Git touches it
#... 省略
hint: See "git help submodule" for more information.
hint: Disable this message with "git config set advice.addEmbeddedRepo false"

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (hexoBackup)
$ git commit -m "2025.5.28" # 备注更新
[hexoBackup b132b90] 2025.5.28
177 files changed, 16236 insertions(+), 47367 deletions(-)
# ....省略
create mode 100644 "\351\203\250\347\275\262blog.bat"

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (hexoBackup)
$ git push origin hexoBackup # 推送到 hexoBackup 分支上
Enumerating objects: 61, done.
Counting objects: 100% (61/61), done.
Delta compression using up to 16 threads
# ...省略
* [new branch] hexoBackup -> hexoBackup

Administrator@DESKTOP-7B17KPG MINGW64 /g/hexo-个人博客/Hexo-Blog-next8.20/blog-demo (hexoBackup)
$

此时已经备份完毕了。

迁移与复原

新环境配置

npm install -g hexo-cli
hexo init

克隆备份分支

将原来的source, package.json等文件克隆到hexo根目录下

git clone -b hexo_backup [email protected]:[username]/[username].github.io.git
npm install

渲染与推送

hexo clean
hexo g -d
# 生成新的页面并推送至主分支

主分支利用hexo自身集成的git组件进行推送。