hexo博客同步管理及迁移

本文首发于我的个人博客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/文件夹里的静态文件临时想的一个词,可能不是很准确,但是接下来我将沿用这两个概念(囧)。那么环境文件里我们需要关注的几个比较重要的文件分别是:

  • source/文件夹:所有发布的文章的md文件都放在这儿
  • themes/文件夹:主题的相关配置文件以及样式的修改等都在这儿
  • .gitignore:git提交时将会忽略的项

.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分支关联起来,好把环境文件推送过去。要达到这个目的,要分以下几步走:

  • github上切换到hexo分支,git clone仓库到本地。
  • 此时本地会多出一个username.github.io文件夹,命令行cd进去,删除除.git文件夹(如果你看不到这个文件夹,说明是隐藏了。windows下需要右击文件夹内空白处,点选'显示/隐藏 异常文件',Mac下我就不知道了)外的其他文件夹。
  • 命令行git add -A把工作区的变化(包括已删除的文件)提交到暂存区(ps:git add .提交的变化不包括已删除的文件)。
  • 命令行git commint -m "some description"提交。
  • 命令行git push origin hexo推送到远程hexo分支。此时刷下github,如果正常操作,hexo分支应该已经被清空了。
  • 复制本地username.github.io文件夹中的.git文件夹到hexo项目根目录下。此时,hexo项目已经变成了和远程hexo分支关联的本地仓库了。而username.github.io文件夹的使命到此为止,你可以把它删掉,因为我们只是把它作为一个“中转站”的角色。以后每次发布新文章或修改网站样式文件时,git add . & git commit -m "some description" & git push origin hexo即可把环境文件推送到hexo分支。然后再hexo g -d发布网站并推送静态文件到master分支。

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

新电脑中的环境搭建

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

  • 新电脑上安装node.js和git。不赘述。git相关教程推荐廖雪峰老师的git教程,突然想到最近很火的考研神嘴张雪峰老师是什么鬼,哈哈哈。
  • 安装hexo:npm install -g hexo-cli
  • clone远程仓库到本地 git clone git@github.com:username/username.github.io.git
  • 根据packge.json安装依赖npm install
  • 本地生成网站并开启博客服务器:hexo g & hexo s。如果一切正常,此时打开浏览器输入http://localhost:4000/已经可以看到博客正常运行了。

在两台电脑上的同步操作

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

  • git pull从远程hexo分支拉取最新的环境文件到本地,可以理解为svn的更新操作。比如在公司写了博客,回家在电脑上也要写需要先执行这一步操作。
  • 文章写完,要发布时,需要先提交环境文件,再发布文章。按以下顺序执行命令:git add .git commit -m "some descrption"git push origin hexohexo g -d

一些坑

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

添加ssh key

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

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

  • 命令行进入用户主目录,比如在我的电脑下:c:\users\administrator
  • 命令行运行ssh-keygen -t rsa -C "username@example.com"。它会提示你输入邮箱,输入完成以后一路回车就行。完成这一步,找到该目录下的.ssh文件夹,里面多了两个文件:id_rsa和id_rsa.pub分别是你这台电脑的ssh key的私钥和公钥。用文本打开公钥文件,复制里面的所有内容备用。
  • 登录github后,进入[settings] -> [SSH and GPG keys]。点击[New SSH key],然后title随便填一个,比如可以是你的电脑名称,把刚才复制的公钥内容黏贴到key中,最后点击[Add SHH key]就完成了。
  • 此时git clone就不会再需要你输入口令了。

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

我在新电脑中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主题下的所有文件复制黏贴到新电脑对应文件夹下作罢。好在主题文件我也并不常改动。有知道这里是什么原因导致的小伙伴还请告知一下,感激。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,809评论 1 304
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,651评论 1 257
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 95,178评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,241评论 0 181
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 49,047评论 1 259
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,899评论 1 178
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,503评论 2 274
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,249评论 0 168
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,125评论 6 235
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,605评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,368评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,723评论 1 232
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,285评论 0 32
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,190评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,634评论 3 209
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,651评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,052评论 0 167
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,638评论 2 232
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,760评论 2 237

推荐阅读更多精彩内容