使用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]