本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: 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/