自动备份Hexo博客

如果已经有过手动备份到GitHub上的操作,就跳过前面直接从第二步开始看。如果是只要了解怎么在新电脑上搭建备份好的博客,就直接从第三步开始看。

第一步 手动备份到github上:

  • 在Github上创建一个新的repository,取名为HEXO。(与本地的Hexo源码文件夹同名即可)

  • 进入本地的Hexo文件夹,执行以下命令创建仓库

    1
    git init
  • 设置远程仓库地址,并更新:

    1
    2
    git remote add origin https://github.com/cosmogram/hexo.git
    git pull origin master
  • 修改.gitignore文件(如果没有请手动创建一个),在里面加入*.logpublic/以及.deploy*/ 因为每次执行hexo generate命令时,上述目录都会被重写更新。因此忽略这两个目录下的文件更新,加快push速度。

  • 执行命令以下命令,完成Hexo源码在本地的提交。

    1
    2
    git add .
    git commit -m "添加hexo源码文件作为备份"
  • 执行以下命令,将本地的仓库文件推送到Github。

    1
    git push origin master

第二步 自动备份到github上:

原理

有关于 Hexo添加文章时自动打开编辑器 的相关文章,其原理就是利用NodeJS的事件监听机制实现监听Hexo的new事件来启动编辑器,完成自动启动编辑器的操作。通过查阅Hexo文档,找到了Hexo的主要事件,见下表:

事件名 事件发生时间
deployBefore 在部署完成前发布
deployAfter 在部署成功后发布
exit 在 Hexo 结束前发布
generateBefore 在静态文件生成前发布
generateAfter 在静态文件生成后发布
new 在文章文件建立后发布

于是我们就可以通过监听Hexo的deployAfter事件,待上传完成之后自动运行Git备份命令,从而达到自动备份的目的。

实现

安装shelljs模块

要实现这个自动备份功能,需要依赖NodeJs的一个shelljs模块,该模块重新包装了child_process,调用系统命令更加的方便。该模块需要安装后使用。

在命令中键入以下命令,完成shelljs模块的安装:

1
npm install --save shelljs

编写自动备份脚本

待到模块安装完成,在Hexo根目录的scripts文件夹下新建一个js文件,文件名随意取。

如果没有scripts目录,请新建一个。

然后在脚本中,写入以下内容:

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
require('shelljs/global');

try {

hexo.on('deployAfter', function() {//当deploy完成后执行备份

run();

});

} catch (e) {

console.log("产生了一个错误<( ̄3 ̄)> !,错误详情为:" + e.toString());

}

function run() {

if (!which('git')) {

echo('Sorry, this script requires git');

exit(1);

} else {

echo("======================Auto Backup Begin===========================");

cd('D:/life/blog/hexo'); //此处修改为Hexo根目录路径

if (exec('git add --all').code !== 0) {

echo('Error: Git add failed');

exit(1);

}

if (exec('git commit -am "Form auto backup script\'s commit"').code !== 0) {

echo('Error: Git commit failed');

exit(1);

}

if (exec('git push origin master').code !== 0) {

echo('Error: Git push failed');

exit(1);

}

echo("==================Auto Backup Complete============================")

}

}
  • 其中,需要修改第17行的D:/life/blog/hexo路径为Hexo的根目录路径。
  • 如果你的Git远程仓库名称不为origin的话,还需要修改第28行执行的push命令,修改成自己的远程仓库名和相应的分支名。

第三步 在全新设备上搭建备份的博客:

安装环境

  • 安装Nodejs:直接百度搜索,然后默认配置安装即可。版本为:16.10.0

  • 安装cnpm

    1
    npm install -g cnpm --registry=http://registry.npm.taobao.org
  • 安装git:直接百度搜索,默认配置安装即可。最好为最新版本。然后添加GitHub免密登录,就是到.ssh目录下生成密钥。登录到GitHub上,右上角小头像->Setting->SSH and GPG keys中,点击new SSH key。Title:可以随便填写,但最好起的名字能让自己知道这个公钥是哪个设备的。Key:将上面生成的.pub文件(你的公钥)中的所有内容复制到这里。

    1
    2
    cd ~/.ssh/
    ssh-keygen -t rsa
  • 安装Hexo

    1
    cnpm install -g hexo-cli

    最好指定下版本:

    1
    npm install -g hexo-cli@4.3.0

下载备份好的博客

  • 第一步:在D盘新建一个文件夹life,然后在life文件夹中新建一个文件夹blog,最后在blog里Git Bush Here(即你原来的博客路径,如果你换了一个地方,那自动备份脚本里的路径就要经常改),在其中Git Bush Here,输入git clone https://github.com/cosmogram/hexo.git命令,即可完成将Hexo源文件复制到本地。(请将后面的https://github.com/cosmogram/hexo.git替换为自己相应的仓库地址。)
  • 第二步:在D:/hexo下Git Bush Here,输入npm install --save shelljs
  • 第三步:同样在D:/hexo下Git Bush Here,输入hexo s,就可以看是否成功。

重新初始化博客

  • 第一步:将git下来的文件夹(就是备份好的博客)移走,在此位置(blog文件夹)新建一个同名文件夹(如:hexo)。进入文件夹中Git Bush Here,输入hexo init命令。
  • 第二步:将原本git下来的文件夹(就是备份好的博客)移回去,替换相同文件。
  • 第三步:输入hexo clean && hexo g && hexo s命令,在本地看是否可以正常运行博客页面。

更新博客

  • 当远程仓库有更新时,执行以下命令,即可同步hexo源文件到本地。

    1
    git pull origin master

部署博客

  • 进入站点根目录

  • 删除git提交内容文件夹

    1
    rm -rf .deploy_git/
  • 执行(非必要、尽量不要)

    1
    git config --global core.autocrlf false
  • 最后生成、部署

    1
    hexo clean && hexo g && hexo d

写博客

1
hexo n 文章名字