前几天把 Hexo 博客部署到了阿里云服务器,但发现每次推送文章都须要去服务器同步代码。最终寻找到 git hook 来解决了这个问题html
更新于 2017.11.14
首发于夏味的博客: xiaweiss.comgit
在服务器,要建一个至关于 github 存放功能的裸仓库来存储代码。 之因此叫裸仓库,是由于这个仓库只是为了存代码用的,没有工做目录,不能够在它里面查看改写代码。github
在网站文件夹下,会有一个工做目录来存放代码,这个目录的代码能够像clone github代码库同样,clone 服务器里的裸仓库。vim
当服务器里裸仓库收到提交进来的代码后,会触发 git hook 的 post-receive 事件,配置好的程序就能够自动去工做目录的仓库执行 git pull,服务器代码就自动更新了bash
远程链接服务器,登陆 root 帐号服务器
新增用户xiawei,这里能够写你的名字微信
useradd xiawei
复制代码
修改用户密码post
passwd 你的新密码
复制代码
给添加 sudo 权限 经过修改 /etc/sudoers学习
必须使用命令网站
visudo
复制代码
按 i 键进入, 找到 root ALL=(ALL) ALL 而后下面添加 xiawei ALL = (ALL) ALL
root ALL=(ALL) ALL
xiawei ALL = (ALL) ALL
复制代码
查看是否安装 git
git --version
复制代码
若是没有看到版本号,则继续安装 git
yum install git
复制代码
设置 git 用户名邮箱
git config --global user.name "yourname"
git config --global user.email "your_email@example.com"
复制代码
假设网站的在 /www/blog/ 目录下,建立裸仓库
cd /www
sudo git init --bare blog.git
复制代码
更改所属用户和用户组,得到权限
sudo chown -R xiawei:xiawei blog.git
sudo chown -R xiawei:xiawei blog
复制代码
cd /www/blog
git clone /www/blog.git
复制代码
若是此时 blog 文件夹不是空的,会不能 clone 按先定义仓库,再设置远端仓库地址便可
cd /www/blog
git init
git remote add origin /www/blog.git
复制代码
注意这时要删除掉 index.html 等和本地待提交代码重复的文件
rm index.html
复制代码
cd /www/xiaweiss.git/hooks/
vim post-receive
复制代码
按 i 键,将下面这几行代码粘贴进去
#!/bin/sh
unset GIT_DIR
cd /www/blog
git pull origin master
复制代码
赋予 post-receive 文件可执行权限
chmod +x post-receive
复制代码
最后修改 Hexo 配置文件里 deploy项,每次发布代码会提交到这两个仓库
deploy:
- type: git
repo: git@github.com:xiaweiss/xiaweiss.github.io.git
- type: git
repo: xiawei@xiaweiss.com:/www/blog.git
复制代码
若是是本地的其余项目,能够直接
git clone xiawei@xiaweiss.com:/www/blog.git
复制代码
修改代码后,提交便可