老方法-较笨拙(写于2017年)
起因:由于装了新电脑,就想搬到新电脑上写博客,但同时要求旧电脑也能同步更新和撰写。
方法:主要是利用版本控制工具,将源文件上传到github,实现从github上同步repo更新。
一般来说,有两种较常用的方法,一是新建原有repo的分支,二是新建一个放源文件的repo。由于之前手动备份md文件到github时我已有一个单独的repo,故采取法二。
hexo大致原理
用过hexo的人都会发现,本地hexo文件和github上的文件是不同的。本地hexo保存的是.md文件,github上保存的是生成的html文件。所以直接clone github上的项目是不可行的。根据上次的分析,我们已知,_config.yml,theme/,source/,scaffolds/,package.json,.gitignore,是关注的重点。
新电脑hexo搭建工作
至此,hexo环境完成。
ssh秘钥生成和添加
因为是新电脑,需要将新生成的ssh添加到github ssh key中才可以使用。
(具体可见博文SSH+Github就这么连)
拷贝数据文件
从旧电脑上的blog文件夹中拷贝_config.yml,theme/,source/,scaffolds/,package.json,.gitignore。
其它不用,因为会在hexo g && hexo d中产生。
重装npm及插件
如果你安装的是最新版的git(2.15)和nodejs(V8.9.1),npm install将会自动安装好部署所需的插件。
否则就差什么补什么。
在这里容易出各种错采坑。
部署
和旧电脑一样的步骤部署即可。
1 | hexo clean && hexo g && hexo d |
同步刷新
一般在部署前会在本地预览无误后再提交。但每做一次就要重新hexo g生成相当麻烦。好在有一个很酷的插件可以及时更新页面:
1 | npm install hexo-browsersync --save |
在localhost:4000就会同步更新你的本地修改啦。
多机同步
两台电脑不能总是把源文件拷来拷去的吧,又或者万一哪天数据丢失了怎么办?
于是我将hexo根目录下的source文件放到github上的source项目里同步更新,这样无论在哪台电脑上都可以下载最新的文件使用。
- 进入source文件夹,右键git bash
git init
初始化本地仓库git add .
添加当前目录文件到暂存区域git commit -m "<备注信息>"
提交到本地仓库git push -u origin master
提交到远程仓库
不过我最后一句命令出错,原因是找不到origin,大概是仓库指定不明确。我想到使用github desktop也许更方便,于是就用它将source仓库clone到本地hexo文件夹下,并且删除原有文件,放入现有源文件。最后commit和push。
至此,多机同步实现。
失误操作
github强制更新,原来的commit数600+没有了。连带着的小绿点也没了。现在的github展示页不好看了T_T
新方法-较快捷(写于2019年)
因为Github私有仓库现在可以免费使用了,所以可以把整个hexo文件全部备份到Github上,而不是只备份文章。
旧电脑需要做什么
- 将博客根目录全部push到Github
具体地,先在Github上新建仓库。
在博客根目录:
git init
git remote add origin http://xxxxxxxx(远程仓库地址)
添加文件git add
提交到暂存区git commit -m "说明"
推送到远程仓库git push -u origin master
(以后只需git push
)
新电脑需要做什么
- 下载nodejs
- 下载Git
- 添加SSH到Github
- 安装Hexo
- 新建博客根目录
git init
git remote add origin http://xxxxxxxx(远程仓库地址)
git fetch --all
git reset --hard oridin/master
- 安装各种Hexo插件(页面同步刷新之类的)
每次发布博客后需同步
git pull
git add .
git commit -m "说明"
git push -u origin master
(以后只需git push
)
目前存在的问题
2017年同步也出现了这个问题,就是强制更新的问题,会导致Git删除历史更新记录。如今这种方法依然存在这种问题。不过不影响写作,只是Github仓库的历史记录每次只会显示在最近一次机器上更新的全部历史记录,导致Github contributions的绿点丢失不少。
究其原因是根目录下两台机器的.deploy_git文件不同,但简单合并会报错。Hexo git deployer 删除了提交历史记录该怎么整?这篇文章也证实了我的想法。
所以在这次同步以前,我先截了图,纪念一下这2年的提交数…马上就从Github contributions消失了。