写在前面
最近换了主机,需要在多地同步更新blog,找到了办法,记录一下
需要使用到GitHub
1. hexo blog目录结构

| 文件夹 | 说明 | 是否需要上传github |
|---|---|---|
| node_modules | hexo需要的模块,就是一些基础的npm安装模块,比如一些美化插件,在执行npm install的时候会重新生成 |
不需要 |
| themes | 主题文件 | 需要 |
| public | hexo g命令执行后生成的静态页面文件 | 不需要 |
| packages.json | 记录了hexo需要的包的信息,之后换电脑了npm根据这个信息来安装hexo环境 | 需要 |
| _config.yml | 全局配置文件,这个不用多说了吧 | 需要 |
| .gitignore | hexo生成的默认的.gitignore模块 | 需要 |
| scaffolds | 文章的模板 | 需要 |
| .deploy_git | hexo g自动生成的 | 不需要 |
其中需要上传到GitHub的有themes、packages.json、_config.yml、.gitignore、scaffolds
hexo上传到仓库,即main分支的,其实就是这里的public文件夹
2. 同步原理
主要思路是利用git分支来实现hexo的同步。
hexo生成的静态页面文件默认放在master分支上,这是由_config.yml配置文件所决定的
你可以在全局配置文件_config.yml中找到这么一段
1 | # Deployment |
因此每当我们执行hexo d的时候,hexo都会帮我们把生成好的静态页面文件推到main分支上。
但是执行hexo d 对应的分支和默认分支是没有关系的,因为这是由配置文件决定的,配置文件写的哪个分支就是哪个分支。
因此,hexo生成的静态博客文件默认放在main分支上。hexo的源文件(部署环境文件)可以都放在src分支上(可以新创建一个src分支)。然后把src分支设置成默认分支。有小伙伴可能会担心默认分支的改变会不会影响到原来的网页的正常显示,其实如果是用GitHub Pages对博客进行托管的话也很简单,第一次搭建博客默认使用main分支作为页面。在下图所示的设置里可以找到。如果不小心搞错了只要把分支设置成静态页面对应的分支就好了。

把src分支设置成默认分支,用来存放源文件,main分支依然存放静态文件。在老电脑上,我们需要把必要的源文件push到src分支。换新电脑时,直接git clone 仓库地址此时会从src分支下载源文件,剩下的就是安装hexo环境,在新电脑上就可以重新生成静态页面了,并且因为配置文件clone下来,deploy配置依旧是main分支,所以在新电脑上执行hexo d还是会把更新过后的静态文件推送到main分支上。
由于main分支和src分支实际上是相互独立的两个普通的分支,所以我们源文件和静态页面的更新也是相互独立的,故而需要手动分别执行git add . git commit git push来更新源文件,然后执行hexo d更新静态页面。
3. 同步操作
3.1 旧主机的操作
在GitHub对应的repo新建一个src分支,clone下来,并修剪文件结构,只留下上面提到的需要的文件和文件夹,并同步更新.gitignore。
之后将这个分支push到repo
将src分支设置为repo的默认分支
3.2 新主机的操作
clone新建的src分支
安装对应的nodejs以及npm
在对应的username.github.io文件夹下执行npm install -g、npm install -g hexo、npm install -g hexo-deployer-git
上面步骤中,
npm -g install其实就是读取了packages.json里面的信息,自动安装依赖