git作为代码管理系统非常方便,但是能否在push到git上的同时把代码部署到网站服务呢?答案就是使用git hooks。
在git的远程仓库中,在xxx.git仓库的目录下又一个hooks目录,可以看到该目录下有很多sample的脚本了。为了实现我们的功能,建立一个post-receive文件如下:
#!/bin/bash while read oldrev newrev ref do if [[ $ref =~ .*/master$ ]]; then echo "Master ref received. Deploying master branch to production..." git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f else echo "Ref $ref successfully received. Doing nothing: only the master branch may be deployed on this server." fi done
注意该文件的用户权限以及执行权限chmod +x post-receive.
为了方便查看脚本执行状态,文件中写几行echo是很有必要的;
另外需要注意work-tree的目录是事先创建git clone的本地仓库,不是仓库的话代码会执行失败;
为了安全起见,把web目录作为仓库目录的子目录,这样在web目录中就无法访问.git目录了。