通过ssh使用git更新hexo内容

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2014/03/18/use_git_publish_hexo_with_ssh/

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 init
git add .
git commit -m'init git repo with remote files'

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

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

git clone username@host:~/path/to/www

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

git init
git remote add web username@host:~/path/to/www

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

receive.denyCurrentBranch问题

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

remote: error: refusing toupdate checked out branch: refs/heads/master
remote: error:Bydefault, updating thecurrent branchin a non-bare repository
remote: error:is denied, because it will make theindexandwork tree inconsistent
remote: error:with what you pushed,and will require'git reset --hard'tomatch
remote: error: thework treeto HEAD.

直接添加配置就OK了。

git config receive.denyCurrentBranch ignore

之后就可以顺利提交了。

当然你也可以使用

git push web +master:refs/heads/master

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

添加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,内容为

export GIT_DIR=$(pwd)
cd ..
git checkout-f
git submodule update --init --recursive

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

chmod +x .git/hooks/post-receive

这样就一切OK了。

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

去除不必要的更新

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

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

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2014/03/18/use_git_publish_hexo_with_ssh/

发表评论