之前使用git一直停留在比较浅的层面,最近涉及部署的相关东西的时候接触到了Git的hook,感觉这个东西非常有趣,下面总结一下我对Git中hook的认识以及分享一下我使用git的hook部署hexo博客到服务器上的过程。
hook
概念
Git钩子是仓库中特定事件发生时Git自动运行的普通脚本。每当我们创建一个仓库的时候,我们仓库的.git/hooks目录中有一些示例脚本。
这些脚本可以是任何脚本语言编写的,只要它们最后能编译到可执行文件。每次脚本中的#!/bin/sh定义了你的文件将被如何解释。
pre-receive
git有非常多的本地钩子和服务端钩子,因为这次我使用的主要是pre-receive来部署博客,所以介绍一下pre-receive钩子,更多的钩子信息可以在文章最后的参考信息中查看
pre-receive钩子在有人用git push向仓库推送代码时被执行。它只存在于远端仓库中,而不是原来的仓库中。
所以我们可以用来在hexo提交更新的时候对服务器上的相关资源进行更新
使用 Git hook 自动部署 Hexo博客
创建远程仓库
首先我们要在服务器器创建一个管理内容的仓库:1
2
3sudo mkdir /var/repo
cd /var/repo
sudo git init --bare blog.git
这里使用了 –bare 参数,是为了创建一个裸仓库,没有工作区。我们不会在裸仓库上进行操作,它只为共享而存在。
后面在hook的设置中会讲到工作区的设置
配置hook
因为是在push操作时才发生的事件所以使用post-receive钩子,钩子将在git操作完以后运行
在blog.git/hooks 目录下新建一个post-receive文件:1
2cd /var/repo/blog.git/hooks
vim post-reveive
在post-receive中写入以下内容
1 |
|
注意,/var/www/hexo 要换成你自己的部署目录,一般可能都是 /var/www/html。上面那句 git 命令可以在我们每次 push 完之后,把部署目录更新到博客的最新生成状态。这样便可以完成达到自动部署的目的了。
同时加上可执行权限1
chmod +x post-receive
本地配置
修改 hexo 目录下的 _config.yml 文件 ,使得hexo博客可以自动deploy到服务器上:1
2
3
4deploy:
type: git
repo: git@www.example.com:/var/repo/blog.git
branch: master
切换服务器地址和目录为你自己的服务器的地址和目录
结果
此时你创建新的文章的时候就可以通过git hook来进行自动部署了,而不需要使用GitHub page的相关服务了