Git 钩子 post-receive Web目录权限问题原创

August 13, 2020
haiqing
350
Ubuntu Nginx PHP 开发环境

非生产环境中,Git代码提交后通过 post-receive 文件自动把代码部署到 Web 目录下,并能够清除缓存等文件内容,提高效率。

安装步骤

sudo apt-get install git

添加git用户

sudo adduser git

创建仓库

sudo git init --bare /home/git/demo.git

详细安装过程参考 Ubuntu Git 安装、配置及常用命令

权限设置

检查用户及用户组

groups git
# git : git

Ubuntu 中 默认的 Web 用户是www-data,接下来把git用户添加到 www-data 用户组中

usermod -a -G www-data git
groups git
# git : git www-data

多了一个www-data,表示git用户被添加到了www-data用户组中。

修改web目录的权限,增加www-data组用户对目录的写权限

chmod -R g+w /var/www/html
ls -al
# -rw-rw-r--  1 www-data www-data 11510 Jan 18  2016 index.html
# -rw-rw-r--  1 www-data www-data   612 Jul  7  2019 index.nginx-debian.html

钩子设置

创建钩子文件

vi /home/git/demo.git/hooks/post-receive

自动部署仓库代码到Web环境目录,并清除缓存文件

#!/bin/bash
GIT_WORK_TREE = /var/www/html git checkout -f master
rm -rf /var/www/html/cache

执行钩子文件

cd /home/git/demo.git/hooks
#修改权限,保证在不登录服务器的情况下Git可用
chmod +x post-receive
sh post-receive
# Already on 'master'