自动备份Hexo源文件到私有仓库

This is an article that was created 654 days ago, and the information may have evolved or changed.

Hexo 部署到Github的文件不包含主题文件,md文件,模版,配置文件等,在新电脑要重新部署相同环境写博客就要拷贝这些文件过去,可以通过文件共享,U盘拷贝,云盘等手段

还有一种方法就是把这些文件也推送到Github仓库,网上看到有一个hexo-git-backup可以把源码推送到仓库分支实现备份。但是我觉得这样不妥,由于部署到Github的静态网站仓库是公开的,把源文推送这个分支,意味着所有人都可以看到源文件的配置,包括一些个人的信息,可能有网站统计,收录的token,这样就不太好

看到一篇博文(https://0skyu.cn/p/a8bd.html) 就整的非常好,其中原理过程可以自行去研究

我参考这篇文章记录我自己的过程和操作


新建Github私有仓库

不用初始化创建README文件,

ScreenCaputure221205140509

ScreenCaputure221205140926

本地Hexo目录git设置

…or create a new repository on the command line

1
2
3
4
5
6
7
echo "# hexo-source-backup" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:kiraster/hexo-source-backup.git
git push -u origin main

使用上面的命令进行设置,进行第一次push推送,到 Github 网页端查看是否有文件上传

出现 error: failed to push some refs to 错误,使用强制命令git pull origin master --allow-unrelated-historie,如果还有其他命令报错自行查看文档或 Google,都是简单的小问题搜索引擎第一页就有

网上很多文章说要修改或创建一个名称为.gitignore的文件,其实这个在你部署静态文件到公共仓库就会有,保持默认就行

除此之外,有些主题在主题目录下有.gitignore文件,一般主题作者不会把主题配置文件_config.yml上传,这里要把这行去掉,使之上传到私有仓库

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

安装 shelljs 模块

1
npm install --save shelljs

自动备份脚本

创建一个js脚本文件,保存在博客目录下的scripts目录,文件名称自己定

第 38 行 的双引号提交信息 任意修改

第 15 和 41 行 的分支名称注意 保持和第二步骤中的保持一致,有些用人喜欢用main有些人喜欢用master

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
require('shelljs/global');
const logger = require('hexo-log')();
/*
危险操作,注意查看控制台提示!!!
*/
hexo.on('generateBefore', function() {
logger.info("Start pulling\n==================================================");
pullToLocal();
});

function pullToLocal() {
if (exec('git stash').code !== 0) {
logger.error('暂时存放出错,请查看提示处理');
}
if (exec('git pull origin main').code !== 0) {
logger.error('同步到本地出错,请检查网络连接查看提示处理');
}
if (exec('git stash pop').code !== 0) {
logger.error('重新应用缓存的stash出错,请查看提示处理');
process.exit(-1);
}
logger.info("Pull done\n==================================================");
}

try {
hexo.on('deployAfter', function() {
logger.info("Start pushing\n==================================================");
pushToPrivateRepo();
});
} catch (e) {
logger.info("博客源码推送至私有仓库异常,错误提示:" + e.toString());
}

function pushToPrivateRepo() {
if (exec('git add .').code !== 0) {
logger.warn("添加文件到暂存区出错");
}
if (exec('git commit -m "Auto backup"').code !== 0) {
logger.warn("没有提交的新内容或提交暂存区到本地仓库错误");
}
if (exec('git push origin main').code !== 0) {
logger.warn("推送代码至github main 主分支出错");
}
logger.info("Push done\n==================================================")
console.log("Ctrl + C 退出或关闭窗口退出或60秒后自动退出");
setTimeout(() => console.log('q'), 60000)
}

推送

执行hexo clean && hexo g && hexo d会自动调用这个脚本

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
……
……
INFO Start pulling
==================================================
Saved working directory and index state WIP on main: 4978dc8 Auto backup
From github.com:kiraster/xxxx-xx
* branch main -> FETCH_HEAD
Already up to date.
On branch main
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: source/_posts/xxxx-xx.md

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (ce84730faef3bc908459561ad81e352ec3daeda6)
INFO Pull done
==================================================
……
……
INFO Deploy done: git
INFO Start pushing
==================================================
[main 0f532bb] Auto backup
1 file changed, 1 insertion(+), 1 deletion(-)
To github.com:kiraster/xxxx-xx.git
4481470..0f532bb main -> main
INFO Push done
==================================================
Ctrl + C 退出或关闭窗口退出或60秒后自动退出

注意:

  • 出现没有提交新内容到缓冲区,推送等错误,按提示排查错误即可
  • 看到原博客出现要切换到博客目录的这一行脚本命令,我觉得在推送博客的时候你就已经切换到博客目录,去掉这一行
Hexo 几个bat脚本 Hexo推送提示输入账号密码问题
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×