hugo的文件分为输入文件和输出文件两大类,其中输入文件是hugo new site时所创建的文件结构,包括:archetyps、config.{toml, yaml}、content、data、layouts、static、themes,输出文件指的是运行hugo命令时所生成的public这个文件夹。

传统的做法是租个虚拟主机,提供web server,并手工将public上传至该虚拟主机。这种方式未免过于陈旧。现在很多代码托管网站,譬如github、bitbucket、gitcafe(code)都提供了个人主页功能。该功能相当于一台虚拟主机。而且这些代码托管网站都提供免费的账号、空间和流量,用来承载静态blog是非常合适的。本blog就承载在github上。

前面提到hugo有两类文件,在github中需要创建一个项目仓库和一个个人主页仓库,分别用于承载输入文件和输出文件。

输入文件的仓库取名为zlinuxboy-blog-hugo,输出文件的仓库则有特定的格式:<account>.github.io,github还为每个账号预留了一个专属三级域名:http://<account>.github.io,对应的是每个账户的个人主页仓库。

下面主要解释如何使用git命令完成本地仓库和远程仓库的关联和更新。

安装git-bash

下载link:(git-bash,安装就是一路next。

创建本地仓库

为了方便起见,输入文件的本地仓库文件夹名称跟远程仓库名一致,均为zlinuxboy-blog-hugo

$ hugo new site zlinuxboy-blog-hugo

该命令相当于创建了一个zlinuxboy-blog-hugo的目录。目录结构如下:

|-- archetypes
|-- config.toml
|-- content
|-- data
|-- layouts
|-- static
`-- themes
先别执行hugo命令,否则会生成public目录,该目录应按照下面的步骤生成。

最后,初始化本地仓库:

$ git init

创建远程仓库

需要在github的webUI中link:(创建,名字跟本地仓库相同:zlinuxboy-blog-hugo

github的账号申请请查阅官方文档。

关联输入文件夹

在将本地的修改推送到github之前,需要将本地仓库和远程仓库进行关联。

$ git remote add origin git@github.com:zlinuxboy/zlinux-blog-hugo.git

关联输出文件夹

由于public文件夹位于本地仓库zlinuxboy-blog-hugo下,然而我们又希望将public关联到github的另外一个仓库zlinuxboy.github.io,所以需要将public作为子模块而存在。

$ git submodule add -b master git@github.com:<username>/<username>.github.io.git public

首次同步

由本地首次推送至远程。

$ cd /e/zlinuxboy-blog-hugo
$ git push -u origin master
$ cd public
$ git push -u origin master
$ cd ..

完整的更新流程

# 更新blog输入文件
$ cd /e/zlinuxboy-blog-hugo
$ git add -A
$ git commit -m "update blog"
$ git push origin master

# 更新blog输出文件
$ hugo
$ cd public
$ git add -A
$ git commit -m "rebuild site 2016.10.11 12:31"
$ git push origin master
$ cd ..