【hexo系列】hexo的正确打开方式

背景

核心思想

  • 利用submodule管理blog
    • 先fork再add submodule
  • 利用branch管理自己的project和需要PR的project

实现细节

  • 主仓库 blog
    • themes/next/ 每个theme是一个子仓库
    • source/post/ 作为一个子仓库
    • source/image/ 作为一个子仓库

模块搭建&整合流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. fork hexo-starter 作为blog主仓库
$ git clone --recursive git@github.com:esblog/hexo-starter.git blog

# 2. 添加 submodule
# 2.1 fork theme & add submodule
$ cd blog/themes/
$ git submodule add git@github.com:esblog/hexo-theme-next.git next

# 2.2 fork _post & add submodule
$ git submodule add git@github.com:esblog/_posts.git


# 2.3 fork project-u-like & add submodule
$ mkdir blog/source/games/ && cd blog/source/games/
$ git submodule add git@github.com:esblog/2048.git

# 检查是否添加成功
$ vi .gitmodules

# 3. push到blog主仓库 (整合)
cd blog/
git commit -m "add submodules hexo-theme-next source/_post games/2048"
git push -u origin master

Note: 如果你嫌fork太多,那么可以开一个github小号,管理这些fork。 github主账号只放deploy版本。

实例:

常用操作

push

  • 每个module独立push
1
2
3
4
5
6
7
# 1. commit changes from all submodules (e.g. _posts)
$ cd _posts
$ commit & push

# 2. commit changes from esblog.github.io
$ cd blog
$ commit & push

pull & merge

1
$ git pull && git submodule init && git submodule update && git submodule status

clone & setup

1
2
3
4
5
6
7
# master用于Gitpage的部署
$ git clone -b dev --recursive git@github.com:esblog/esblog.github.io.git blog-dev
$ cd blog-dev
$ git branch # 确认已经切换到dev分支
$ npm install hexo --save # install node_modules dependency
$ hexo s
$ hexo d

其他操作

从官方更新模块(操作较少)

比如,theme-next有些新功能 如何更新到自己的博客中?

1
2
$ git pull https://github.com/theme-next/hexo-theme-next.git
# 如果有冲突,需要人工merge

也可在theme的github界面pull & merge

其他操作建议

  • 每个post都加date,不然每次编辑文档,时间都会变动
  • draft 可以放在_draft目录下,当然我更习惯放在_post/中,文件名_开头即可,或者整个目录_开头。
  • 文件名不要经常变动(因为会改变url),title和path可以随时改动

非法操作

  • Deployed Repository人工提交。(除非你不用hexo d命令,或不用hexo)