git checkout ветки для разработки / постановки / производства

Я в настоящее время реструктурирую, как наша компания обрабатывает процедуры разработки. Поскольку для нас очень удобно постоянно заходить по ssh на сервер для продвижения файлов / папок с серверов DEV на STAGE/PRODUCTION, я подумал, что было бы неплохо настроить среду git таким образом, чтобы мы могли просто объединить dev-ветвь в stage-ветку для выполнения "продвижения".

Для этого нам понадобятся 3 разных филиала в наших проектах, которые извлекаются в разные места на сервере при получении нового push-сообщения.

Допустим, у нас есть 3 папки на нашем сервере, которые содержат данные для наших 3 различных сред (DEV - STAGE - PROD). Тогда схема будет выглядеть примерно так:

Схема проверки филиала

Я настроил git как голые репозитории, и мне было интересно, возможно ли что-то подобное с git.

Я буду благодарен за любую помощь, которую вы, ребята, можете оказать мне!:D

1 ответ

Решение

Идея состоит в том, чтобы использовать post-receive hook на сервере и установка принудительного (-f опция) оформить заказ в определенном каталоге

Вы можете оформить заказ в определенном рабочем каталоге, используя --work-tree=/path/ вариант...

пример кода (для сохранения в пустых репозиториях на сервере в виде файла hooks/post-receive с установленным битом выполнения), адаптированный этим Gist, может быть:

#!/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
Другие вопросы по тегам