不同电脑上使用Hexo写博客
问题的提出
上一节《使用Hexo搭建博客》,我们详细讨论了使用Hexo写博客,同时托管到github 上的方法。但是上一节的方法只能在自己设置好Hexo的电脑上写博客,然而有时候我们不是总在那台电脑前,如果我在外面出差,但是有个博文需要我发,我又没有Hexo源文件,那我必须找到我自己的电脑?显然,每次发博文必须到自己的电脑上操作是不方便的,因此本文讨论,如何实现随时随地发博文。
最佳方案
原理说明
github本身就是用来管理源码的工具,所以我们先给出最佳方案。我们已经在github上建立了放置博客的仓库,这个仓库必是公共的,因为博客是让所有人都能看到的。而我们发布博客用的Hexo源码是不能随便让别人拿到的,所以我们需要建立一个专门放置Hexo 源码的仓库,并设置为私人的,这样别人就不能看到了。
按照下文我们可以实现git的自动配置,所以跟着操作即可。由于git的上传和下载均是在hexo源仓库,不与博客仓库发生关系,所以毫无关系。同时,在下载下来的源文件中,里面是配置好的hexo,而写好文章后,hexo 上传博文到博客仓库。这个关系希望大家仔细想明白,正是基于这样的考虑我们才能实现及时写博。
上传Hexo源文件到源仓库hexosource
由前述原理说明,我们已经在github上建立了hexo源仓库hexosource。为了方便操作,我们不去配置git,而是直接clone hexosource 到本地新建立的目录hexo,这样非常省心,本地的目录在克隆完成时已经与github上的源仓库hexosource 建立好了连接,直接使用git命令就能操作。
1
2$mkdir ~/文档/hexo
$git clone git@github.com:fengzhenhua.vip/hexosource.git ~/文档/hexo将上一节我们配置好的hexo源文件全部copy到刚刚新建立的目录hexo ,然后执行上传即可。如下操作
1
2
3
4
5$cp ~/xxx/* ~/文档/hexo/
$cd ~/文档/hexo
$git add .
$git commit -m "source"
$git push
一段时间后所有之前配置好的hexo源文档将保存在github的源码私有仓库hexosource。
- 将密钥备份到U盘,将来可以方便的在另一台电脑上启用ssh,以达到省去输入密码的麻烦。
换台电脑开始写作
- 配置仓库的ssh ,将U盘中密钥文件,一共三个,放置到目录 ~/.ssh/
,注意文件权限的设置为
1
2
3-rw------- 1 feng feng 2610 5月 18 14:47 id_rsa
-rw-r--r-- 1 feng feng 573 5月 18 14:47 id_rsa.pub
-rw-r--r-- 1 feng feng 392 5月 18 14:50 known_hosts - 在本机建立要写作的目录,这里我仍然选择了
1
$mkdir ~/文档/hexo
- 按照上一节安装好hexo写作时使用的各软件,不需要执行操作。然后,我们就可以使用ssh方式下载源文件到新电脑上了。如下
1
2$mkdir ~/文档/hexo
$git clone git@github.com:fengzhenhua.vip/hexosource.git ~/文档/hexo - 待克隆完成,切换到hexo目录,可以开始写作了。
1
2
3$cd ~/文档/hexo
$hexo n "新博文标题"
$vim ./source/_posts/新博文标题.md - 写作完成,上载博文到博客仓库。 先在本地检查无误后,执行上载
1
2
3$hexo clean
$hexo g
$hexo s1
$hexo d
- 将变动后的hexo源文件,上传到源码仓库。
1
$git push
写作步骤
- 首次在一台电脑上配置好hexo写作环境,按上一节步骤就可以了。但是完成第一篇文章后,上传到github 后,就需要按照本节设置好hexo源码仓库,并备份ssh密钥,上传源文件。
- 在另一台电脑首次写作,按本文步骤执行即可,待完成写作也需要及时上传源文件。
- 经过前两次,在两台不同电脑上写作后,hexo源仓库中的源文件是最新的。所以每次写作前,需强制同步本地文件与源仓库相同
1
$git pull
- 在每次写作完成后,要及时上传源文件。执行
1
$git push
- 经过两天的写作使用,发现这个方法也会出现 分支存放法
的问题。所以单独把解决方案放在此处。
1
2
3
4
5$rm -rf .deploy_git
$git config --global core.autocrlf false
$hexo clean
$hexo g
$hexo d - 补充,在上传文件时,直接选择删除文件.deploy_git 即可。
其他方案
U盘Copy法
在写作时,每次写完后将源文件都copy到U盘中,随身携带,到新电脑上时,再复制到新电脑中即可。在验证这个方法时,除非开始直接将hexo布署到U盘,否则在Copy时,会出现链接不能复制的错误。所以在hexo布署到电脑上的时候需要使用压缩软件,打包后放到U盘。下次换电脑时,再解压缩,写完文章后,再压缩,存到U盘。这个方法最直接,但是操作起来显然不方便。
分支存放法
此法和分仓库存放法类似,但是有缺点。其一、博客必须是公共的,因为只有这样才能被别人看到。如果,建立源仓库到博客仓库的分支,则由于公共属性,这个源仓库也是可以被别人看到的,显然不是一个好办法。其二、如果不考虑隐私的问题,这样设置的操作和最佳方案类似,但是必须设置源仓库分支为主要分支,这样子使用git克隆和上专时,源文件将自动上传到源分支了。但是此时的麻烦源于使用Hexo编辑完博文后的上传,如果不做任何修改,则会出现错误,我没有记录这个具体错误信息,大家可以自己尝试。解决这时不能上传的错误的方法,有二个:
将下载的源文件放置到另一个新建立的文件夹中,然后编辑上传等一切正常。但是,你还得复制新的源文件到下载的这个仓库中再上传到源分支,或者自己配置这个文件夹与源文件夹关联等等,总之这个方案也是非常麻烦的。
按照网上的另一篇博客,分析到了原因。下面直接引用部分,问题描述为
等等。网友分析的原因为:git进行push或者hexo d的时候改变了一些.deploy_git文件下的内容。但是我实验的结论是,下载后直接执行hexo d也是会报错的,这应该是设置到分支导致的。不过解决方案倒是可行的,就是最佳方案最后追加的解决方法,重写如下1
2
3
4error:spawn failed...
fatal:cannot lock ref 'HEAD': unable to resolve reference HEAD: Invalie argument
error:src refspec
error:src refspec HEAD does not match any.问题成功解决。不过对于这个方案而言,每次写作都要操作一遍也是不方便的。同时第一条将源文件设置成了公共就能直接排除了这个方法。1
2
3
4
5$rm -rf .deploy_git
$git config --global core.autocrlf false
$hexo clean
$hexo g
$hexo d
这篇文章就是我在最佳方案中写成的,选择最佳方案可以节省您宝贵的时间,祝你成功!