git hook实现代码自动部署

本文介绍了git hook的工作原理和流程,以及如何创建git仓库。通过git hook,当用户push代码到仓库时,服务器上的脚本会自动将新代码部署到web站点目录。文中详细讲解了普通仓库和裸仓库的区别,并提供了两种不同的代码部署方法,包括直接克隆和打包解压。同时,给出了在不同类型的git仓库中设置钩子文件的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理与流程

  1. git用户执行git push操作
  2. 远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子)
  3. post-receive脚本中,将git仓库的代码拷贝到web站点目录下

创建git仓库

我们可以在自己的服务器上创建git仓库,有两种方式:

  1. git --bare init (裸仓库)
  2. git init

两者区别:

普通git仓库的目录结构就和你的代码目录结构一致,只多了.git目录,.git目录中包含了git的一些配置等数据
裸仓库只保存了一些配置信息等,肉眼是找不到我们所上传的代码的

建议使用裸仓库

执行钩子

git仓库和git裸仓库的钩子所在位置不同。

  1. git普通仓库钩子在.git/hooks/
  2. git裸仓库钩子在hooks/

钩子要做的事就是将代码从仓库中拷贝到web目录,有两种方式:

  1. 在web目录中,将git仓库的代码克隆过来:git clone xxxxx,需要部署代码的时候,执行git pull即可将代码同步过来了。
  2. 将git仓库中的代码打包,然后解压到web目录下

实现:

第一种方式实现:

在上述hooks目录中,创建post-receive文件,内容如下

#!/bin/sh
DEPLOY_PATH=/home/wwwroot/default/myproject/
# git的hooks里面默认有一些环境变量,会导致无论在哪个语句之后执行git命令都会有一个默认的环境路径,
  既然这样unset 掉默认的GIT环境变量就可以了。
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值