git push
操作post-receive
(钩子)post-receive
脚本中,将git仓库的代码拷贝到web站点目录下我们可以在自己的服务器上创建git仓库,有两种方式:
git --bare init
(裸仓库)git init
两者区别:
.git
目录,.git
目录中包含了git的一些配置等数据建议使用裸仓库
git仓库和git裸仓库的钩子所在位置不同。
.git/hooks/
中hooks/
中钩子要做的事就是将代码从仓库中拷贝到web目录,有两种方式:
git clone xxxxx
,需要部署代码的时候,执行git pull即可将代码同步过来了。实现:
第一种方式实现:
在上述hooks目录中,创建post-receive
文件,内容如下
#!/bin/sh
DEPLOY_PATH=/home/wwwroot/default/myproject/
unset GIT_DIR #这条命令很重要
cd $DEPLOY_PATH
git reset --hard
git pull
chown www:www -R $DEPLOY_PATH
第二种方式实现:
#!/bin/sh
DEPLOY_PATH=/home/wwwroot/default/myproject/
git archive --format zip --output /path/to/file.zip master # 将 master 以zip格式打包到指定文件(裸仓库中执行)
mv /path/to/file.zip $DEPLOY_PATH #将打包好的剪切到web目录
unset GIT_DIR
cd $DEPLOY_PATH
unzip -o file.zip #解压覆盖
rm -rf file.zip #删除
chown www:www -R $DEPLOY_PATH