**摘要:**早该记录了,最开始我的blog是使用hexo+github搭建的使用jacman主题,也是因为对git不够了解,当时绑定域名是使用直接在github上写CNAME文件。感觉太麻烦了,就买了空间换了WordPress,wp也是用了要有快一年,然后感觉markdown支持的真是不好,而且迁移很不爽,然后就换了现在的。关于现在这套blog架构,依然使用hexo作为blog框架,我自己的电脑用作服务器,然后VPS作为web服务器提供发布,使用git hook进行更新blog。

git钩子简介 –摘自git-scm

Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。

git hook概述

钩子都被存储在 Git 目录下的 hooks 子目录中。 也即绝大部分项目中的 .git/hooks 。 当你用 git init 初始化一个新版本库时,Git 默认会在这个目录中放置一些示例脚本。这些脚本除了本身可以被调用外,它们还透露了被触发时所传入的参数。 所有的示例都是 shell 脚本,其中一些还混杂了 Perl 代码,不过,任何正确命名的可执行脚本都可以正常使用 —— 你可以用 Ruby 或 Python,或其它语言编写它们。 这些示例的名字都是以 .sample 结尾,如果你想启用它们,得先移除这个后缀。把一个正确命名且可执行的文件放入 Git 目录下的 hooks 子目录中,即可激活该钩子脚本。 这样一来,它就能被 Git 调用。Git Hooks 就是一些触发特定事件的脚本。比如 commit、push、merge 等等,也区分本地 Hooks 和服务端 Hooks。

使用post-reveive

当用户在本地仓库执行git-push命令时,服务器上远程仓库就会对应执行git-receive-pack命令,而git-receive-pack命令会调用pre-receive钩子。使用git部署时的流程:本地git-push –> VPS上Git服务器更新并Hook –>VPS上执行pre-receive脚本,同步到服务器本地仓库目录

git部署blog过程记录

VPS安装git

  • 安装初始化
1
2
3
4
5
yum install git-core -y
adduser git-blog
cd /home/git-blog
git init --bare blog.git
#使用--bare参数是创建一个裸仓库,没有工作区,这里不再裸仓库进行操作,只为共享而存在

创建信任

  • 创建从我本机到VPS上git-blog用户的信任
1
2
ssh-copy-id git-blog@VPShost
#就是把~/.ssh/id_rsa.pub中的内容添加到VPS主机上~/.ssh/authorized_keys文件中

本地配置git发布

  • Hexo主配置文件_config.yml如下
1
2
3
4
5
6
7
deploy:
 type: git
 message: Arvon
 repo: ssh://git-blog@blog.arvon.top:12345/home/arvon/blog.git
 #repo: git-blog@blog.arvon.top:/home/arvon/blog.git
 branch: master
#注意的地方,搬来repo那是直接写主机地址就可以了但是,我这主机ssh端口不是默认端口所以就需要写成ssh的形式。

服务器配置git hook

  • 编辑blog.git/hooks下新建post-receive文件,内容如下
1
2
3
4
#!/bin/sh
git --work-tree=/usr/nginx/html/myblog --git-dir=/home/git-blog/blog.git checkout -f
#这个意思是发布的内容推送到/usr/nginx/html/myblog目录下
#别忘了 chmod +x post-receive

发布

  • 本地操作
1
2
git new "test"
git g -d

ok,以上,以后还会补充git的东西