搭建个人博客主要有三种方式:

入门

Hugo基于Go语言而Hexo基于Node.js,相比之下Hugo安装部署更为简单,基本不依赖环境,而且生成速度较快。google了一下关键词“Hugo Hexo”后首页好几篇都是讲Hexo迁移到Hugo的,最终坚定信念选择Hugo。 在Win10下载解压Hugo后只有一个hugo.exe可执行文件,将该文件路径添加到环境变量,就可以用cmd操作了。接着按照官方入门文档,即可轻松生成一个带主题的静态示例网页并可在本地运行和访问。

命令行操作

Hugo的命令行操作很简单,常用的有以下三条:

# 以archetypes文件夹下的defaul.md为模板,生成filename.md存放在content\post目录下
hugo new post/filename.md

# 编译并生成public文件夹存放静态网页结果
hugo

# -大写D,将头部信息设置为'draft: true'的草稿文件也参与编译并运行
hugo server -D

托管

托管的最佳实践是将静态博客同步托管在Github PagesCoding Pages上,买一个域名,用 DNSPod 做国内外分流,国内访问走 Coding Pages,国外走GitHub Pages,可解决Github在国内不稳定、访问慢、被百度蜘蛛屏蔽等问题。目前只是托管在Github Pages,其他以后再折腾。

Github Pages分两种:

Project Pages的托管

不同于User/Organization Pages单独作为一个repo来管理,Project Pages必须作为某个Project(repo)的分支,而且名字必须是gh-pages,博客的源文件和生成的静态网页要分别放在mastergh-pages下,一般的分支是办不到的,所以具体步骤如下:

  1. 新建一个存放博客源文件的repo
  2. public加入.gitignore
  3. 建立名字为gh-pages的孤儿分支git checkout --orphan gh-pages,并push到远程
  4. 利用Git2.6以上提供的worktree工具,在public路径创建gh-pages分支的工作目录,此时看起来就像master和gh-pages作为两个独立的repo同时存在,在public工作目录下即可将生成的静态网页commit&push到origin/gh-pages,每次push后Github Pages都会将origin/gh-pages下的静态网页自动部署
# Step4
echo "Deleting old publication"
rm -rf public
mkdir public
git worktree prune
rm -rf .git/worktrees/public/

echo "Checking out gh-pages branch into public"
git worktree add -B gh-pages public origin/gh-pages

echo "Removing existing files"
rm -rf public/*

echo "Generating site"
hugo

echo "Updating gh-pages branch"
cd public && git add --all && git commit -m "Publishing to gh-pages (publish.sh)"

git push origin gh-pages

read -p "Done,Press any key to continue." var

工作流程

在本地运行服务器hugo server -D,编写Markdown文档并保存时,网页会自动重新加载,即可实时看到最终发布的样式,到一定阶段后push备份,运行Project Pages的托管Step4的脚本完成自动部署。

总结

使用Hugo生成静态网页确实简单方便速度快,按照官方文档即可。难点在于部署和托管,在摸索过程中还认识了Git worktreeGit submoduleGit subtree等指令,感觉在涉及到多个repo同步的大项目中很有应用的必要,在此挖坑要单独学习并整理出博文。