Git: Usando repositórios / branches para separação de origem

Logotipo Git

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 masterserá enviado periodicamente paraprotected/development
  • assim que as mudanças protected/developmentforem detectadas, o site de desenvolvimento será implantado
  • todas as manhãs, a fonte mais recente de protected/developmentserá enviada para protected/staginge 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/stagingparaprotected/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!