git development/staging/production 个结帐分支

git checkout branches for development/staging/production

我目前正在重组我们公司处理开发程序的方式。由于我们总是 ssh 进入服务器以将 files/folders 从 DEV 提升到 STAGE/PRODUCTION 服务器是一件很麻烦的事情,所以我认为以某种方式设置 git 环境可能是个好主意这将使我们能够简单地将开发分支合并到阶段分支以执行 "promotion".

为此,我们的项目需要 3 个不同的分支,当收到新的推送时,它们会检出到服务器上的不同位置。

假设我们的服务器上有 3 个文件夹,其中包含 3 个不同环境(DEV - STAGE - PROD)的数据。然后模式看起来有点像这样:

Branch checkout schema

我将 git 设置为裸存储库,我想知道是否可以使用 git。

如果你们能为我提供帮助,我将不胜感激! :D

想法是在服务器上使用 post-receive hook 并设置强制 (-f 选项)在特定目录中签出

您可以使用 --work-tree=/path/ 选项在特定工作目录中获取签出...

this Gist 改编的示例代码(将作为文件 hooks/post-receive 保存在服务器上的裸仓库中,并设置了执行位)可以是:

#!/bin/bash
echo '--- --- --- --- --- --- --- --- --- --- ---'
echo 'Deploying site...'
echo '--- --- --- --- --- --- --- --- --- --- ---'

if ! [ -t 0 ]; then
    read -a ref
fi

IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"

# Master Branch
if [ "PROD" == "$branch" ]; then
    git --work-tree=/path/to/public/PROD checkout -f $branch
    echo 'Changes pushed to production site'
fi

# Stage Branch
if [ "STAGE" == "$branch" ]; then
    git --work-tree=/path/to/public/STAGE checkout -f $branch
    echo 'Changes pushed to stage site'
fi

# Development Branch
if [ "DEV" == "$branch" ]; then
    git --work-tree=/path/to/public/DEV checkout -f $branch
    echo 'Changes pushed to dev site'
fi

echo '--- --- --- --- --- --- --- --- --- --- ---'   

另一种可能的结帐语法是

GIT_WORK_TREE=/path/to/test/site git checkout -f