git checkout分支用于开发/分期/生产

时间:2017-11-23 09:14:26

标签: git branch git-checkout git-worktree

我目前正在重组我们公司处理开发程序的方式。因为我们总是急于进入服务器以便将文件/文件夹从DEV升级到STAGE / PRODUCTION服务器,所以我认为以一种允许我们简单合并的方式设置git环境可能是个好主意。开发分支到舞台分支进行“促销”。

为此,我们需要在项目中使用3个不同的分支,当收到新的推送时,这些分支会在服务器上的不同位置结帐。

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

Branch checkout schema

我将git设置为裸存储库,我想知道git是否可以采用某种方式。

我将非常感谢你们能给我提供的每一点帮助! :d

1 个答案:

答案 0 :(得分:1)

这个想法是在服务器上使用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 '--- --- --- --- --- --- --- --- --- --- ---'   

结帐的另一个可能的sintax是

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