使用git分支保存hexo博客源码到github
hexo是当前最火的静态博客框架,支持Markdown格式文章编辑并自动生成对应的静态网页,简单高效令人爱不释手。
使用hexo写博客的流程通常是,
- 通过
hexo new post_name命令,会自动在source/_post目录下生成一个待写的post_name.md文件 - 编写完该md文件后,用
hexo generate编译生成对应的HTML文件 - 发布之前,可以用
hexo s本地预览,然后通过hexo deploy发布到远程仓库的master分支,然后你的个人站点就能看到刚才新加的文章了
一、困扰
然而,使用过hexo搭建个人博客的朋友们想必都会遇到博客源码保存的问题。即远程仓库只会保存hexo发布后的静态HTML文件,你的博客md源文件、主题配置等还在本地,一旦电脑磁盘坏了或者换了电脑,就无法在之前仓库的基础上继续写博客。针对此问题,有不少博主会在github上单独另起一个repository来专门保存博客源文件,每次发布完新文章,需要手动地将source/post下的md文件上传到源文件对应的repository,确实也能解决问题,但总归是麻烦。后来偶然看到聪明的网友借助git分支来巧妙地实现用同一个仓库保存静态网页和博客源码,自己试了下确实很赞,故总结之。
二、为什么要备份
在这篇文章中我们把Hexo 和 Github结合起来搭建了自己的个人博客,hexo d部署到Github的其实Hexo编译后的文件,这些文件是用来生成网页的,并不包含我们的源文件:

20220511_01.png
它其实上传到Github 的是在我们本地目录里的.deploy_git里面的内容:
20220511_02.png
我们的源文件比如相关source文件、配置文件等都是没有上传到Github上的,所以我们要利用git来做分支管理,对我们的源文件进行备份,这样我们就可以在另一台电脑上把源文件clone到本地安装相应的环境就可以继续写我们的博客了。
好了,废话少说,我们直接来说如何进行博客源文件的备份。
Hexo博客备份
创建新分支
在Github上博客仓库下创建一个新的分支hexo,并且将这个分支设置为默认分支,具体操作如下:
20220511_03.png

20220511_03.png
20220511_04.png
20220511_05.png
克隆hexo分支
在本地把我们刚建的分支hexo克隆到本地:
1 | |
1 | |
以上格式成功了
下面这个失败不知道原因
1 | |
20220511_06.png

把克隆下来的项目里面的.git文件复制到我们的Hexo博客目录下:
20220511_07.png

注意:如果之前搭建博客的时候自己更换过主题文件的,请把主题文件里面的.git文件删除。
多机同步更新的前提:hexo分支
必备文件
Hexo博客系统中影响迁移的只有一部分文件和文件夹,所以只需要备份它们即可
| 文件(夹) | 说明 |
|---|---|
| scaffolds/ | 博客文章的模版 |
| source/ | 所有博客文章,以及about、tags、categories等page |
| themes/ | 网站的主题 |
| .gitignore | 在push时需要忽略的文件和文件夹 |
| _config.yml | 站点配置文件 |
| package.json | 依赖包的名称和版本号 |
我们要做的就是通过各种方式备份这些文件和文件夹,比如说以下两种静态备份方式:
- 通过U盘或移动硬盘保存
- 通过网盘保存
上述两种方式可以用于备份不经常改变的文件,可是我们需要备份的比如博客文章、Hexo配置文件和主题配置文件是需要经常更改的,所以需要其它方式动态备份
参考其它博客了解到可以通过创建Hexo博客系统的分支进行备份
Hexo博客站点的必要文件:
1 | |
编辑站点根目录下的.gitignore文件,使Git上传时忽略不必要的文件:
1 | |
1.删除themes你的主题中的.git,.github,.gitignore等git仓库文件,只保留站点根目录下的.gitignore。
2.在Hexo博客站点根目录(即blog文件夹)中GitBash:
1 | |
开始备份
进入到Blogs根目录下,执行如下命令:
1 | |
这时候我们会看到Github上的hexo 分支就有我们的源文件了。

20220511_08.png
如果你想要每次更改东西都希望备份到hexo 分支上,可以执行如下步骤:
1 | |
如何恢复博客
假设我们换电脑了,要在新环境继续在原有仓库基础上撸文章,此时通过git clone将博客源码拉到本地,然后安装、初始化hexo就能搞定:
1 | |
假如我们现在更换了电脑,希望在新的电脑上继续写博客,把Github上hexo分支上的项目克隆到本地(注意:是我们备份的那个分支)
进入到克隆下来的文件夹,执行如下命令:
1 | |
然后再去安装主题相关的插件即可,当然如果你电脑上还没有 Node.js等环境的话可能还需要去安装相关的环境。
现在我们就基本上可以在另一台电脑上继续我们的博客之旅啦~
2.博客还原—–比上面详细
1 | |
3.配置网络协议
(1) SSH协议,长期部署推荐SSH,一劳永逸。
①SSH秘钥:
1 | |
②复制秘钥至github/coding->用户setting->SSH keys,New SSH Key;
③验证是否添加成功
1 | |
④编辑站点配置文件_config.yml:
1 | |
⑤添加远程仓库
1 | |
(2) HTTPS协议,临时部署推荐HTTPS。
①直接编辑站点配置文件_config.yml:
1 | |
②验证github/coding用户名和密码。
③添加远程仓库
1 | |
4.正常使用
重新部署:
1 | |
上传至hexo分支:
1 | |
注意事项
确保hexo deploy推送的是master分支,hexo目录下的_config.yml文件通常会配置deploy推送的目标地址,这个一般在最初使用hexo时,就会配置为master,不用改动:
1 | |
最后
到这里,如何备份Hexo博客以及如何恢复Hexo博客就基本结束啦。
更多关于Hexo框架和butterfly主题配置可以移步aiyoja的个人技术博客。
(另一版本,作为参考)
创建分支目录
先新建一个hexo文件夹,作为分支的工作目录,用于保存将要备份的文件和文件夹
1 | |
再把GitHub上的Hexo仓库clone到hexo文件夹中
1 | |
删除除了.git文件夹的其它所有文件和文件夹,主要是为了得到版本管理的**.git**。下面命令不会删除隐藏文件和文件夹
1 | |
最后把需要备份的文件和文件夹都复制到hexo文件夹下,hexo的目录结构应该如下
1 | |
如果使用的主题是从GitHub克隆的,那么主题文件夹下有Git管理文件,需要将它们移除,我使用的是hexo-next,需要移除的文件如下
1 | |
创建分支
创建一个叫hexo的分支
1 | |
保存所有文件到暂存区
1 | |
提交变更
1 | |
推送到GitHub,并用--set-upstream与origin创建关联,将hexo设置为默认分支
1 | |
合并管理
现在我们的博客系统有两个需要管理的文件夹,一个是hexo,另一个是username.github.io,每次发表新文章都需要分别对这两个文件夹进行提交管理,显然是很蠢的行为
因为我们需要手动管理的只是hexo中的文件,而**.gitignore**之外的文件由Hexo管理,所以可以将这两个文件夹进行合并管理
之前已经将需要备份的文件加入了hexo分支,所以直接将hexo分支中的**.git文件夹复制到username.github.io**文件夹中
1 | |
查看当前的分支,确保处于hexo分支下
1 | |
还需要移除主题目录下的Git管理文件
1 | |
查看Git当前状态,还需要对.gitignore文件进行编辑,确保忽略不备份的文件
1 | |
master分支的文件则需要Hexo进行管理,编辑 _config.yml站点配置文件,设置branch为master
1 | |
发表文章
新建Markdown文章,编辑文章
1 | |
将相关更改推送到hexo分支
1 | |
将静态文件推送到master分支
1 | |
在GitHub上查看hexo分支如下图所示

迁移
将hexo分支克隆下来
1 | |
然后安装Hexo依赖
1 | |
这样就可以简单的将Hexo博客迁移到任何电脑上了 : )
只是每次发表新文章要输入很多命令和密码 : (
使用git命令提交远程github仓库的时候提示rejected(拒绝)解决办法
今天使用在自己笔记本本地磁盘上使用Git命令行执行”git push”然后输入github的用户名和密码之后,报如下错误:
1 | |

最后执行git pull,然后再执行push就可以了:

原因是:刚才在网站上改了README.md文件,添加了一些项目的说明,然后使用Git客户端再次提交的时候,需要先更新服务器上的变化,然后才能提交,也就是先更新再提交。

今天使用在自己笔记本本地磁盘上使用Git命令行执行”git push origin hexo”报如下错误:
![rejected] hexo->hexo(fetch first) error:failed to push some refs to 'https://gitee.com/xxx/xxx.git'
最后执行git pull,然后再执行push就可以了:
原因是:刚才在网站上改了README.md文件,添加了一些项目的说明,然后使用Git客户端再次提交的时候,需要先更新服务器上的变化,然后才能提交,也就是先更新再提交。
今天使用在自己笔记本本地磁盘上使用Git命令行执行”git push”然后输入github的用户名和密码之后,报如下错误:
![rejected] master->master(fetch first)error:failed to push some refs to ‘https://github.com/xxx/xxx.git’
只需要在下面输入
git pull 回车
在命令行输入
wq 保存退出
再次输入
git push origin master
就可以了
GitHub_git push出现[rejected] master -> master (non-fast-forward)问题解决
首先要会打开git的命令行:
1、执行 git pull origin master –allow-unrelated-histories
2、重新add和commit相应文件
3、执行 git push origin master
此时就能够上传成功了
解决方案:
(1).使用强制push的方法:
$ git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
(2).push前先将远程repository修改pull下来
$ git pull origin master
$ git push -u origin master
(3).若不想merge远程和本地修改,可以先创建新的分支:
$ git branch [name]
然后push
$ git push -u origin [name]