通过ssh使用git更新hexo内容

18 3月

Hexo每次新增一篇文章都会引起很多页面的变动。

比如page页面,因为增加一篇文章,所以分页情况都改变了,这里会有将近10个页面的变化。

其次是tag和categories目录,因为文章一般都会指定tag和categories,所以这里也会有几个页面的变动。

最后就是文章页面本身了。

这么算下来新增一篇文章会更新十多个页面,还有若干图片。

每次使用ftp更新都很慢,虽然可以设置各种跳过规则,但是对比文件列表也是会花费相当的时间。加之hexo提供的ftp发布比一般的ftp客户端还慢(ftp发布工具是给予lftp的,只适用于linux)。

我本来准备做一个版本管理工具,或者让hexo只生成最近几天的文章(issue链接)已减少更新量。

不过折腾起来挺费劲的,最后作罢了。

刚才突然想到我需要的其实就是一个git而已,加上主机本身支持ssh,所以决定使用在服务器搭建一个git服务器来更新网站。

创建Git仓库

其实创建Git仓库挺简单的,因为git自身就支持ssh方式的连接,我们只需要在服务端建立一个Git仓库,然后将页面生成到Git仓库中就行了。

在目标目录执行命令:


初始化仓库并将现有文件全部添加到其中。

然后在本地执行命令将库拉去回来


也可以直接在本地执行初始化一个Git仓库,然后添加一个remote


之后只需要用Hexo生成页面,然后本地git add .之后push就可以了。

receive.denyCurrentBranch问题

当然没有那么顺利,执行push以后报错


直接添加配置就OK了。


之后就可以顺利提交了。

当然你也可以使用


然后…然后什么都没有发生。

添加hook

我们还需要添加一个hook,以便我们提交以后将真正的内容签出。

Git的hook有以下几种:

  • applypatch-msg
  • post-update
  • pre-rebase
  • commit-msg
  • pre-applypatch
  • update
  • post-commit
  • pre-commit
  • post-receive
  • prepare-commit-msg

提交后自动签出自然需要的是post-receive

在创建.git/hooks/post-receie,内容为


如果你是*uix系统,不要忘记赋予权限


这样就一切OK了。

每次更新后push一下就可以了。

去除不必要的更新

有些更新是不必要,比如我最开始在博客底部添加了最后更新时间,这样每次生成都需要更新所有页面,这样很不划算,果断删除之。

用Git来更新真的很快…FTP更新是坑呀。

发表评论

电子邮件地址不会被公开。