Hexo博客自动备份到Coding

前言

因为之前博客停掉了一年的时间,近期才刚刚恢复了博客,现在在实验室的台式机上写博客,因为怕之后更换电脑或者电脑出问题重装系统之后博客再次停更,也为了帮助自己能够更好地坚持下去,所以查找了一些资料,希望在命令行执行hexo d的时候就能自动把博客源码备份到云端。因为博客是部署在Coding上的,所以自然也是希望可以直接备份到Coding上,因为自己git指令使用并不熟悉,就是一个小白,所以在设置自动备份的时候走了一些弯路。
主要的参考网站是:自动备份Hexo博客源文件
我在这上面做了一些改动,并且根据我的问题加入了解决办法。

新建Git仓库

我在Coding上新建了一个Git仓库,作为博客源码的备份仓库,因为Coding的项目可以设置为私有项目,而且是免费的,这一点真的不错,github上是要钱的,好像一个月$7。

将Hexo目录加入Git仓库

  • 在Github下创建一个新的repository,取名为hexo。(这个名字可以根据自己的需要选取,不是固定的)执行以下命令创建仓库:
    1
    git init

这条语句是初始化,在当前目录中新建.git文件夹。

  • 设置远程仓库地址,并更新:
    1
    2
    git remote add origin git@github.com:XXX/XXX.git
    git pull origin master

这条语句中的origin可以自己定义,不过前后要保持一致。git@github.com:XXX/XXX.git需要更换为自己的git地址。

  • 修改.gitignore文件(如果没有请手动创建一个),在里面加入.log 和 public/ 以及.deploy/。因为每次执行hexo generate命令时,上述目录都会被重写更新。因此忽略这两个目录下的文件更新,加快push速度。这里可以根据自己的实际需要添加忽略的文件夹,如果是上传到公共项目中,建议把配置文件也忽略掉。
  • 执行命令以下命令,完成Hexo源码在本地的提交:
    1
    2
    git add .
    git commit -m "第一次备份"

在这一步我遇到了错误,git提示文件名过长,可以执行下面的语句。

1
git config --system core.longpaths true

  • 执行以下命令,将本地的仓库文件推送到Github:
    1
    git push origin master

这样子博客源文件就已经备份到了coding上,但是要实现自动备份还需要进行下面的操作。

安装shelljs模块

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

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

1
npm install --save shelljs

编写自动备份脚本

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

ps: 如果没有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
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('XXXX'); //此处修改为Hexo根目录路径
exec(git config --system core.longpaths true )
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 ~~~~ master').code !== 0) {
echo('Error: Git push failed');
exit(1);
}
echo("==================Auto Backup Complete============================")
}
}

因为会有文件名过长的错误,所以我也加了小小的改动。请把上面代码中XXXX替换成Hexo根目录的路径,把~~~~替换成刚才设置的名称,在本文中为origin。
保存脚本并退出,然后执行hexo deploy命令,将会得到类似以下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
INFO  Deploying: git>
INFO Clearing .deploy folder...
INFO Copying files from public folder...
[master 3020788] Site updated: 2015-07-06 15:08:06
5 files changed, 160 insertions(+), 58 deletions(-)
Branch master set up to track remote branch gh-pages from git@github.com:smilexi
amo/notes.git.
To git@github.com:smilexiamo/notes.git
02adbe4..3020788 master -> gh-pages
On branch master
nothing to commit, working directory clean
Branch master set up to track remote branch gitcafe-pages from git@gitcafe.com:s
milexiamo/smilexiamo.git.
To git@gitcafe.com:smilexiamo/smilexiamo.git
02adbe4..3020788 master -> gitcafe-pages
INFO Deploy done: git
======================Auto Backup Begin===========================
[master f044360] Form auto backup script's commit
2 files changed, 35 insertions(+), 2 deletions(-)
rewrite db.json (100%)
To git@github.com:smilexiamo/hexo.git
8f2b4b4..f044360 master -> master
==================Auto Backup Complete============================

这样子就大功告成了,在每次部署hexo的时候,都会自动备份源码。

本文作者:Qiu Qingyu
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 CN许可协议。转载请注明出处!
本文永久链接:http://qiuqingyu.cn/2017/03/16/Hexo博客自动备份到Coding/