github pages有两种方式:

  • 一种是{USERNAME}.github.io/
  • 另一种是{USERNAME}.github.io/{PROJECT}

我们这里使用第二种方法创建

前期准备

  • 有一个github账号

创建一个公开的repo

例如:blog

开通github pages

找到新创建的repo中的settings,往下找到github pages, 如果首次开通,则需要授权一下,授权后,github pages下的source可以选择对应的发布分支。默认为master分支。

注意 如果一切正常,github pages选项下有个蓝色提示,显示的是您的博客地址,可以先访问看看是否正常。我这里是:https://realjf.github.io/blog/

配置好后,开始使用hugo构建博客

首先,clone下刚才创建的repo

git clone [email protected]:{USERNAME}/blog

安装hugo,确保repo目录下可以使用hugo命令

请参考官网https://gohugo.io/

# 检查安装是否成功
hugo version

利用hugo构建博客目录结构

cd blog && hugo new site . --force

这里使用了–force是因为当前目录已存在,只是需要初始化而已

添加自己需要的主题

cd blog
git submodule add https://github.com/realjf/hugo-theme-m10c.git themes/m10c

上述的m10c可以换成你想要的主题名字即可

更多的主题请参考:https://themes.gohugo.io/

# 修改根目录下的 .toml文件
theme = "{THEME}"
baseUrl = "https://realjf.github.io/blog/"

{THEME}请修改为你的主题名即可

本地测试博客

hugo server -t {THEME}

到这里,基本的博客搭建完成,先保存到github

git add -A && git commit -m "Initializing"
git push origin master

本地测试成功后,我们利用gh-pages分支作为新的发布分支

gh-pages分支保存的是hugo生成的html静态文件

先把public发布目录添加到.gitignore文件里

echo "public" >> .gitignore

保存到远程repo

git add -A && git commit -m "add ignore file"
git push origin master

初始化gh-pages分支

git checkout --orphan gh-pages
git reset --hard
git commit --allow-empty -m "Initializing gh-pages branch"
git push origin gh-pages
git checkout master

构建和发布

先删除public目录

rm -rf public
git worktree add -B gh-pages public origin/gh-pages

# 在根目录下构建
hugo -t <THEME>

cd public && git add --all && git commit -m "Publishing to gh-pages"
cd ..
git push origin gh-pages

设置gh-pages作为你的发布分支

回到settings里的github pages选项,将source设置为gh-pages分支,等待几分钟后,重新访问博客地址,查看效果是否正常

每次发布hugo的时候,都需要运行以下脚本,以便更新发布


#!/bin/sh

DIR=$(dirname "$0")

cd $DIR/..

if [[ $(git status -s) ]]
then
    echo "The working directory is dirty. Please commit any pending changes."
    exit 1;
fi

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 upstream/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