Я пытаюсь настроить 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