Hexo

hexo博客同步管理及迁移

2017-09-28  本文已影响2356人  nikolausliu

本文首发于我的个人博客http://nikolausliu.top

最近在把公司电脑里的东西迁移到笔记本里的时候遇到了很多麻烦,hexo博客怎么迁移到新电脑中以及怎么在多端同步hexo博客就是其中之一。本文参考了知乎中的高票答案,把过程重新梳理了一遍,并在一些关键的地方做了更详细的阐述,自认为更好理解一点。

从分析目录结构开始

首先,需要了解一下hexo项目的目录结构,以及各文件夹用来存放哪些文件(已经了解的可以跳过)。下面是我本地hexo项目的目录结构。文件夹没有展开,为了和文件区别,我在文件夹名后加了一个/用以和文件名区分开来。

HEXO
├──.deploy_git/
├──node_modules/
├──public/
├──scaffolds/
├──source/
├──themes/
├──_config.yml
├──.gitignore
├──db.json
├──debug.log
└──package.json

先说public/文件夹和.deploy_git文件夹,这两个文件夹里的内容是一样的。用来存放由markdown文件(文章)生成的所有静态文件,猜测.deploy_git文件夹里的内容就是在执行hexo g -d命令时唯一会部署到github仓库username.github.io的内容(这里没有求证过,从命名来看应该是这样,如有谬误还请指正)。换句话说,github pages托管的只是由hexo生成的静态文件,hexo的环境文件是只保留在本地的,而这也正是想要在另一台电脑上重新部署和保持同步hexo博客需要折腾一番的原因。

刚才提到一个环境文件的概念,这个不是什么官方提供的术语,只是我想要区分public/文件夹里的静态文件临时想的一个词,可能不是很准确,但是接下来我将沿用这两个概念(囧)。那么环境文件里我们需要关注的几个比较重要的文件分别是:

.gitignore文件的内容如下:

.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/

其实从这也可以看出hexo的本意也是让我们可以把环境文件放在github上托管的,并且帮我们列好了忽略的项,比如public/.deploy_git文件夹都是被忽略的,是不会被提交的。这样,我们在hexo g -d时部署到github上的只有静态文件,而提交环境文件时则不会把静态文件也提交,节省了空间。

怎么把环境文件托管到github

现在,我们弄清楚了只要把环境文件也托管到github并且和静态文件的托管互不影响就行了,问题是,怎么做?

在hexo项目跟目录下执行命令git status,会得到fatal: Not a git repository (or any of the parent directories): .git的提示:当前项目不是一个git仓库。我之前以为既然静态文件可以被提交到github,那hexo项目肯定是一个git仓库,原来不是,静态文件能被推送到远程仓库hexo引擎在背后是怎么实现的我不知道,也不在本文的讨论范围内。目前要紧的是把当前项目跟一个远程仓库关联起来,好管理环境文件。

那么,难道要新建一个仓库来存放环境文件嘛?不,那样当然也行,但是还要单独占一个仓库,总感觉不舒服。其实我们可以用分支来管理。

username.github.io仓库中,目前默认的分支是master,用来存放静态文件。我们新建一个分支hexo,并设为默认分支,用来存放环境文件。

<div style="text-align:center;">



</div>

这里是比较关键的一步了,hexo分支是基于master分支的,它在创建时被赋予了与master分支同样的内容--静态文件。做乜啊,hexo分支不是要存放环境文件的吗?我当时就是在这里比较晕,因为知乎的高票答案在这里说的并不是很清楚。其实现在目的很清晰:我们希望hexo分支是空的,并把我们本地的hexo项目与hexo分支关联起来,好把环境文件推送过去。要达到这个目的,要分以下几步走:

至此,hexo的环境文件已经全部托管在github的hexo分支了。

新电脑中的环境搭建

这部分应该要简单一点,如果你已经搭建过一个hexo博客的话。

在两台电脑上的同步操作

至此,迁移工作已完成,在两台电脑之间的同步操作如下:

一些坑

有些坑是在上面的工程中会遇到的,但是如果穿插在工程中将会如过程显得凌乱,所以我单独拿出来讲一下。

添加ssh key

这个坑是在执行git clone之前要解决的。

github提供了两种git clone的方式:https和ssh。由于https速度慢,且每次都要输入口令,所以我们一般选择使用ssh方式,这就需要我们添加ssh key。

新电脑中博客不显示内容的问题

我在新电脑中generate g的时候,报错warn no layout ...,而且打开本地博客也是一片空白。网上说是主题的原因,果然我发现新电脑中的next主题文件夹(我使用的next主题)为空,远程hexo分支中的next主题文件夹也为空。原来是我在搭建博客开始使用next主题时,next文件夹是从远程clone过来的。next文件夹中的.git文件夹会导致next文件夹无法被跟踪。把这个.git文件夹删除之后重新提交,这时的状态时Your branch is up-to-date with 'origin/hexo'了,可是让我费解的是:远程hexo分支的next文件夹仍然是空的。我对git只会简单的使用,搜索一番未果,我索性直接把next主题下的所有文件复制黏贴到新电脑对应文件夹下作罢。好在主题文件我也并不常改动。有知道这里是什么原因导致的小伙伴还请告知一下,感激。

上一篇 下一篇

猜你喜欢

热点阅读