2

我目前正在重组我们公司处理开发程序的方式。由于总是 ssh 进入服务器以将文件/文件夹从 DEV 升级到 STAGE/PRODUCTION 服务器对我们来说非常麻烦,我认为以允许我们简单合并的方式设置 git 环境可能是一个好主意dev-branch 进入 stage-branch 以执行“促销”。

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

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

分支结帐架构

我将 git 设置为裸存储库,我想知道 git 是否可以实现这种功能。

我将感谢你们为我提供的每一点帮助!:D

4

1 回答 1

2

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

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

由此 Gisthooks/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
于 2017-11-23T09:30:54.060 回答