不同电脑上使用Hexo写博客

问题的提出

上一节《使用Hexo搭建博客》,我们详细讨论了使用Hexo写博客,同时托管到github 上的方法。但是上一节的方法只能在自己设置好Hexo的电脑上写博客,然而有时候我们不是总在那台电脑前,如果我在外面出差,但是有个博文需要我发,我又没有Hexo源文件,那我必须找到我自己的电脑?显然,每次发博文必须到自己的电脑上操作是不方便的,因此本文讨论,如何实现随时随地发博文。

最佳方案

原理说明

github本身就是用来管理源码的工具,所以我们先给出最佳方案。我们已经在github上建立了放置博客的仓库,这个仓库必是公共的,因为博客是让所有人都能看到的。而我们发布博客用的Hexo源码是不能随便让别人拿到的,所以我们需要建立一个专门放置Hexo 源码的仓库,并设置为私人的,这样别人就不能看到了。

按照下文我们可以实现git的自动配置,所以跟着操作即可。由于git的上传和下载均是在hexo源仓库,不与博客仓库发生关系,所以毫无关系。同时,在下载下来的源文件中,里面是配置好的hexo,而写好文章后,hexo 上传博文到博客仓库。这个关系希望大家仔细想明白,正是基于这样的考虑我们才能实现及时写博。

上传Hexo源文件到源仓库hexosource

  1. 由前述原理说明,我们已经在github上建立了hexo源仓库hexosource。为了方便操作,我们不去配置git,而是直接clone hexosource 到本地新建立的目录hexo,这样非常省心,本地的目录在克隆完成时已经与github上的源仓库hexosource 建立好了连接,直接使用git命令就能操作。

    1
    2
    $mkdir ~/文档/hexo
    $git clone git@github.com:fengzhenhua.vip/hexosource.git ~/文档/hexo

  2. 将上一节我们配置好的hexo源文件全部copy到刚刚新建立的目录hexo ,然后执行上传即可。如下操作

    1
    2
    3
    4
    5
    $cp ~/xxx/*   ~/文档/hexo/
    $cd ~/文档/hexo
    $git add .
    $git commit -m "source"
    $git push

一段时间后所有之前配置好的hexo源文档将保存在github的源码私有仓库hexosource。

  1. 将密钥备份到U盘,将来可以方便的在另一台电脑上启用ssh,以达到省去输入密码的麻烦。

换台电脑开始写作

  1. 配置仓库的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
  2. 在本机建立要写作的目录,这里我仍然选择了
    1
    $mkdir ~/文档/hexo
  3. 按照上一节安装好hexo写作时使用的各软件,不需要执行操作。然后,我们就可以使用ssh方式下载源文件到新电脑上了。如下
    1
    2
    $mkdir ~/文档/hexo
    $git clone git@github.com:fengzhenhua.vip/hexosource.git ~/文档/hexo
  4. 待克隆完成,切换到hexo目录,可以开始写作了。
    1
    2
    3
    $cd ~/文档/hexo
    $hexo n "新博文标题"
    $vim ./source/_posts/新博文标题.md
  5. 写作完成,上载博文到博客仓库。
    1
    2
    3
    $hexo clean
    $hexo g
    $hexo s
    先在本地检查无误后,执行上载
    1
    $hexo d
  6. 将变动后的hexo源文件,上传到源码仓库。
    1
    $git push

写作步骤

  1. 首次在一台电脑上配置好hexo写作环境,按上一节步骤就可以了。但是完成第一篇文章后,上传到github 后,就需要按照本节设置好hexo源码仓库,并备份ssh密钥,上传源文件。
  2. 在另一台电脑首次写作,按本文步骤执行即可,待完成写作也需要及时上传源文件。
  3. 经过前两次,在两台不同电脑上写作后,hexo源仓库中的源文件是最新的。所以每次写作前,需强制同步本地文件与源仓库相同
    1
    $git pull
  4. 在每次写作完成后,要及时上传源文件。执行
    1
    $git push
  5. 经过两天的写作使用,发现这个方法也会出现 分支存放法 的问题。所以单独把解决方案放在此处。
    1
    2
    3
    4
    5
    $rm -rf .deploy_git
    $git config --global core.autocrlf false
    $hexo clean
    $hexo g
    $hexo d
  6. 补充,在上传文件时,直接选择删除文件.deploy_git 即可。

其他方案

U盘Copy法

在写作时,每次写完后将源文件都copy到U盘中,随身携带,到新电脑上时,再复制到新电脑中即可。在验证这个方法时,除非开始直接将hexo布署到U盘,否则在Copy时,会出现链接不能复制的错误。所以在hexo布署到电脑上的时候需要使用压缩软件,打包后放到U盘。下次换电脑时,再解压缩,写完文章后,再压缩,存到U盘。这个方法最直接,但是操作起来显然不方便。

分支存放法

此法和分仓库存放法类似,但是有缺点。其一、博客必须是公共的,因为只有这样才能被别人看到。如果,建立源仓库到博客仓库的分支,则由于公共属性,这个源仓库也是可以被别人看到的,显然不是一个好办法。其二、如果不考虑隐私的问题,这样设置的操作和最佳方案类似,但是必须设置源仓库分支为主要分支,这样子使用git克隆和上专时,源文件将自动上传到源分支了。但是此时的麻烦源于使用Hexo编辑完博文后的上传,如果不做任何修改,则会出现错误,我没有记录这个具体错误信息,大家可以自己尝试。解决这时不能上传的错误的方法,有二个:

  1. 将下载的源文件放置到另一个新建立的文件夹中,然后编辑上传等一切正常。但是,你还得复制新的源文件到下载的这个仓库中再上传到源分支,或者自己配置这个文件夹与源文件夹关联等等,总之这个方案也是非常麻烦的。

  2. 按照网上的另一篇博客,分析到了原因。下面直接引用部分,问题描述为

    1
    2
    3
    4
    error: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.
    等等。网友分析的原因为:git进行push或者hexo d的时候改变了一些.deploy_git文件下的内容。但是我实验的结论是,下载后直接执行hexo d也是会报错的,这应该是设置到分支导致的。不过解决方案倒是可行的,就是最佳方案最后追加的解决方法,重写如下
    1
    2
    3
    4
    5
    $rm -rf .deploy_git
    $git config --global core.autocrlf false
    $hexo clean
    $hexo g
    $hexo d
    问题成功解决。不过对于这个方案而言,每次写作都要操作一遍也是不方便的。同时第一条将源文件设置成了公共就能直接排除了这个方法。

这篇文章就是我在最佳方案中写成的,选择最佳方案可以节省您宝贵的时间,祝你成功!