Назад | Перейти на главную страницу

Развертывание веб-сайта GIT

Я пытаюсь настроить GIT для развертывания моего проекта в разных местах в зависимости от ветки. (Думаю, я все равно этим хочу заниматься).
Моя текущая установка такова: локальная машина разработчика, на которой запущен Netbeans для внесения изменений. Удаленный сервер, на котором размещаются проекты GIT (тот же сервер, на котором запущен apache) - существует 2 дочерних сайта: test.FQDN.com и live.FQDN.com.

Я бы хотел иметь 1 проект GIT (MyProject) и создать новую функциональную ветку. Любые коммиты, сделанные для новой ветки функций, будут отправлены на test.FQDN.com. После того, как функции будут протестированы и затем объединены в основную ветку, она будет отправлена ​​на live.FQDN.com. Я посмотрел на обработчики GIT после получения и смог использовать команду «git checkout -f» для получения доступа к сайту test.FQDN.com, однако он извлекает только основную ветку, а не новую функциональную ветку. У меня нет средств на использование третьей стороны для выполнения этой работы, и я бы предпочел остаться в GIT, но иметь полный root-доступ к веб-серверу, если есть пакет для установки, который поможет это контролировать. Любые предложения были бы замечательными!

РЕДАКТИРОВАТЬ Вот как сейчас выглядит мой пост-прием:

#!/bin/sh
umask 002
cd /srv/git/projects/APP.git
git push --mirror backupLocation:APP
branch=$(git branch | grep "*" | sed "s/* //")

if [ "$branch" == "master" ]
then
    GIT_WORK_TREE=/srv/www/ssl_apps/APP git checkout -f
else
    GIT_WORK_TREE=/srv/www/ssl_apps/APPtest git checkout -f
fi

вкратце о нашей системе:

www.git-server.com

если ветка была отправлена, git post-receive hooks увеличивает число в статическом файле /var/www/<branch>.version

на клиентском сервере (есть несколько серверов, несколько установок на сервер):

cron скрипт запускается каждую минуту, он проверяет www.git-server.com/<branch>.version для каждой отрасли

если версия была увеличена, выполняется обновление:

cd /var/<branch>.subsite;
git pull --rebase

задержка в одну минуту (макс.) подходит для наших целей

Ты можешь использовать reset --hard <branchname> перевести вашу рабочую копию в состояние отсоединенной HEAD; измените последнюю часть вашего post-receive подключиться к:

if [ "$branch" == "master" ]
then
    GIT_WORK_TREE=/srv/www/ssl_apps/APP git reset --hard $branch
else
    GIT_WORK_TREE=/srv/www/ssl_apps/APPtest git reset --hard $branch
fi