Git é uma maneira maravilhosa e fácil de gerenciar seu código-fonte de qualquer tipo de projeto e usar o GitHub como central é uma jogada inteligente. Especialmente quando você desenvolve um projeto web, é sempre bom ter um site de teste onde você pode ver o último estágio do desenvolvimento em um ambiente de produção.
Mas e se sua empresa quiser que você separe o código-fonte em estágios de desenvolvimento, preparação e produção? Você pode usar branches até mesmo repositórios completamente separados para conseguir isso.
Em meu projeto atual, configurei este sistema de ramificação com um único repositório:
- mestre
- protegido / desenvolvimento
- protegido / encenação
- protegido / produção
- […] todas as outras filiais da minha equipe
Nota: o prefixo protected/
é um prefixo válido para nomes de agências
O fluxo de trabalho é:
- tudo o que está dentro
master
será enviado periodicamente paraprotected/development
- assim que as mudanças
protected/development
forem detectadas, o site de desenvolvimento será implantado - todas as manhãs, a fonte mais recente de
protected/development
será enviada paraprotected/staging
e o local de implantação de teste será iniciado - uma vez que estamos satisfeitos com o estado do site de teste, decidimos iniciar manualmente a implantação do site de produção empurrando a fonte de
protected/staging
paraprotected/production
- usar as
protected/*
filiais diretamente pelos membros da equipe não é permitido
Estamos usando o JetBrains Teamcity para gerenciar e executar essas etapas automaticamente. Uma dessas etapas é um script de shell para sincronizar os branches do git.
[gist id = 5344861 file = sync_repos_1branch.sh]
você pode chamar esse script da seguinte maneira: ./sync_repos.sh [path_to_work_in] [ssh/http-origin] [ssh/http-destination] [origin-branch] [destination-branch]
exemplo: ./sync_repos.sh ~/repos/dev git@github.com:user/project.git git@github.com:user/project.git protected/development protected/staging
Observação: path_to_work_in
é necessário criar um repositório vazio como base de trabalho
Bônus: aqui está um script que faz um backup de todo o seu repositório incluindo as tags.
Divirta-se configurando seu próprio sistema de ramificação!