常规的更新文章或者更新主题之类的方法就不写了。由于是托管在 GitHub 上的 hexo 博客,不像是一般部署在一台固定机器上的 WordPress 那样从哪里都可以 ssh 上去管理。因此有必要记录一下摸索出来的过程。
方法
主要是因为 hexo 实现 github blog 是通过 source/
下一系列的 markdown 文件用于记录文章内容,再通过 hexo g
命令生成美观的静态页面在浏览器中显示,两者是缺一不可的:如果只有 markdown 文件,也不是不能读,但这样和读 README.md
没什么区别了,起不到博客的作用;如果只有静态页面文件,倒是像个博客了,但是如果要更新,改一次就累死人了。按照我的理解,前者相当于源码,后者相当于由源码编译出来的二进制文件,因此要两手抓,两手都要硬,通过两个分支来对整个 hexo github blog 进行管理就可以了。
在写完 markdown 文件之后,执行一下 hexo clean
,把已经生成的静态页面文件都清理掉(据我理解实际上是把 public/
删掉了,但不确定除此以外还有没有清理其它内容)。这个时候目录下的内容基本都是“源码”了,将这个状态下的整个目录 git push
到项目的某个次要分支。之后都是通过这个次要分支来维护每次更新,只要在 git clone
下来之后 git checkout
到这个分支就可以了。
维护完次要分支之后,就可以使用 hexo g
来生成静态页面文件了,这个过程视机器性能而定,快则几秒钟,慢则几分钟,在我的 VPS 上甚至有可能被 kill……在生成完静态页面文件之后,就可以直接部署到 GitHub 上了。前提是要有 hexo-deployer-git 这一个插件并且在配置文件里已经配置好 GitHub 的用户名和分支(这里需要用 master 分支),执行 hexo d
就可以直接部署上去了。这个过程的实质是把 public/
里面的内容 push 到 master 分支了。
这样,静态页面文件通过 master 分支维护,访问者访问 foo.github.io 时访问的也是 master 分支的静态页面文件,而 markdown 文件则隐藏在次要分支的 source/
中。
坑
主题目录文件丢失:如果是使用 next 之类的从 GitHub 上 clone 下来的主题,那么主题目录下就会有
.git
目录,而整个项目根目录也有一个.git
目录,这就会导致在 push 到 GitHub 的时候会忽略掉整个主题目录的文件,下一次 clone 下来的时候主题目录就是空的了。解决方法:移除主题目录中的.git*
目录/文件,避免出现嵌套 git 的情况。hexo d
将整个项目根目录 push 到 master 分支:这种情况一般是在不同的位置(包括不同机器,或者同一台机器的不同目录)clone 项目导致的。在项目根目录下会有.deploy_git/
,这个目录下的内容和public/
一样,在这种情况下会产生混乱。解决方法:在hexo clean
之前把.deploy_git/
目录删除,余下步骤照常执行。更新内容后成功部署,但刷新页面不更新:由于是静态页面,因此浏览器会使用缓存。解决方法:ctrl + F5 刷新即可。