使用 git 在服务器上部署开发和主分支

使用 git 在服务器上部署开发和主分支

我正在将其git用于一个djangoweb 项目。我的服务器上有一个裸 git 存储库,我将提交从本地计算机推送到其中。我的本地计算机上还有一个测试服务器,但我希望服务器上有 2 个版本的网站。一个版本作为实时站点(主分支),另一个版本作为测试服务器(开发分支)。所以我需要 2 个工作目录。

我想用post-receive钩子来

  1. 更新我的主分支工作目录(用于服务器上的实时站点)
  2. 更新我的开发分支工作目录(用于服务器上的测试站点)

通常我会

$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/path/www.example.org git checkout -f
$ chmod +x hooks/post-receive

但我想 GIT_WORK_TREE 似乎不是正确的选择? 有没有更好的方法?

如何定义分支的工作目录?

答案1

根据digitalocean 上的文章您需要 --work-tree 和 --git-dir 选项的组合,而不是 GIT_WORK_TREE:

git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f

对于接收后脚本,其构造最终与您拥有的略有不同:

#!/bin/bash
while read oldrev newrev ref
do
    if [[ $ref =~ .*/master$ ]];
    then
        git --work-tree=/var/www/html --git-dir=/home/demo/proj checkout -f
    fi
done

答案2

建议:

#!/bin/sh

echo
echo "*** Moving to Live ***"
echo

cd /path/to/project || exit
unset GIT_DIR
git pull origin master

echo
echo "*** Pulling to Live ***"
echo                                               

/etc/init.d/nginx restart
#exec git-update-server-info

从我的服务器中获取并且对我来说运行良好。

不要忘记修复路径、远程和重启命令。

相关内容