自动备份Hexo博客源文件

由于自己经常通过hexo来写自己的blog那么万一那一天树莓派坏了(自己用树莓派做服务器),那么里面所有的东西都需要重新写那太遭罪了,所以去网上找了将hexo进行备份的操作。
⭐以下操作在⏱️2023.6.4⏱️可以完美实现.

hexo备份操作

hexo需要备份什么东西?

我们在新电脑通过hexo重新搭建博客的时候(跳过hexo安装)hexo init那么在目标目录下会生成一部分文件,但是我们不可能重新在新电脑里面把之前的东西在写一遍,此时需要将旧电脑写的东西迁移到新电脑。此时分为两种情况:

1、旧电脑还活着

我们只需要把旧电脑上博客目录下的 source、themes、_config.yml覆盖到 blog 的那个文件夹即可,只要hexo环境没问题,hexo的一系列操作都没问题(在第一次 hexo d可能会有些慢,耐心等待)。同样,在新电脑上只要把环境搭建好,只要把两个文件夹一个配置文件覆盖过去,都没问题。包括在备份时也只需要把这两个文件夹一个配置文件备份好,其他的都不用管了。

2、旧电脑死了

此种情况就需要我们重新写blog了,但是我们可以避免这种情况!!!操作如下:
第一步,我们先在github上创建一个仓库作为我们的博客存储。
第二步,我们需要在旧电脑上执行如下命令:

1
2
3
git init
git remote add origin git@github.com:yourname/hexo.git
git pull origin master

正如我们上面第一种情况我们不需要对所有的文件进行操作,那么的话我们在根目录下新建文件 .gitignore 在此文件下输入我们不需要备份的文件,我的配置如下:

1
2
3
4
5
6
7
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/

第三步:执行如下命令:

1
2
3
git add .
git commit -m "备份hexo源码文件"
git push origin master

测试
<img src="https://s2.loli.net/2023/06/04/WSO4JgRDtdGmsiE.png" alt="备份操作1" style="zoom:100%;"/>
不过!!!!万一哪一天忘记 git push 怎么办?

备份方法二

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

1
npm install --save shelljs

编写自动化脚本

注意⭐:如下操作只是帮助你减少上面操作,也就是执行 hexo d的时候自动帮你把 git push执行,所以我们还是需在github建立仓库!!!
shelljs模块安装完成后,在Hexo根目录的scripts文件夹下新建一个js文件,文件名随意取(我的文件名为:auto.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
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('/home/pi/blog'); //此处修改为Hexo根目录路径
if (exec('git add --all').code !== 0) {
echo('Error: Git add failed');
exit(1);
}
if (exec('git commit -am "blog auto backup script\'s commit"').code !== 0) {
echo('Error: Git commit failed');
exit(1);
}
// 下面if内容,如果你的Git远程仓库名称不为origin的话,还需要修改push命令,修改成自己的远程仓库名和相应的分支名
if (exec('git push origin main').code !== 0) {
echo('Error: Git push failed');
exit(1);
}
echo("==================Auto Backup Complete============================")
}
}
  • 上述有两处需要更改,已经标注

测试:`` heox d```
结果如下:
<img src="https://s2.loli.net/2023/06/04/tjhMsOceK6olzAy.png" alt="202306042002321" style="zoom:100%;"/>