Implantação do site GIT

2

Estou tentando configurar o GIT para implantar meu projeto em diferentes locais com base na ramificação. (Acho que é isso que eu quero fazer de qualquer maneira).
Minha configuração atual é esta:      Máquina de desenvolvimento local executando o Netbeans para fazer alterações.      Servidor remoto que hospeda projetos GIT (mesmo servidor executando o apache)          - 2 subsites existem um test.FQDN.com e um live.FQDN.com

O que eu gostaria de fazer é ter 1 projeto GIT (MyProject) e criar um novo branch de recursos. Quaisquer confirmações feitas para o novo ramo de funcionalidades serão enviadas para test.FQDN.com. Depois que os recursos tiverem sido testados e depois mesclados na ramificação principal, eles serão enviados para live.FQDN.com. Eu olhei para ganchos de pós-recepção do GIT e foi capaz de usar o comando "git checkout -f" para puxar no site test.FQDN.com no entanto que só puxa o ramo mestre e não o ramo novo recurso. Eu não tenho nenhum financiamento para usar um terceiro para fazer este trabalho, e preferiria ficar dentro do GIT, mas ter acesso root completo ao servidor web se houver um pacote para instalar que ajudaria a controlar isso. Qualquer sugestão seria ótima!

EDITAR Aqui está o que meu post-receive parece atualmente:

#!/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
    
por Brian 07.12.2012 / 16:32

2 respostas

1

nosso sistema em poucas palavras:

www.git-server.com

se uma ramificação foi pressionada, os ganchos pós-recebimento incrementam um número no arquivo estático /var/www/<branch>.version

no servidor do cliente (existem vários servidores, várias instalações por servidor):

script cron é executado a cada minuto, verifica www.git-server.com/<branch>.version para cada ramificação

se a versão foi incrementada, atualiza:

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

um minuto de atraso (max) é bom para os nossos propósitos

    
por 07.12.2012 / 17:47
0

Você pode usar reset --hard <branchname> para colocar sua cópia de trabalho em um estado HEAD separado; altere a última parte do seu post-receive hook para:

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
    
por 11.02.2013 / 11:21