Acho que este artigo, um modelo de ramificação com êxito no Git , é muito conhecido entre os usuários experientes do DVCS.
Eu uso hg
principalmente, mas eu diria que essa discussão é boa para qualquer DVCS.
Nosso fluxo de trabalho atual é que cada desenvolvedor clona o repositório principal. Escrevemos código em nosso próprio repositório local, executamos testes e, se tudo correr bem, empurra o mestre.
Portanto, queremos configurar servidores de CI como Jenkins e melhorar nosso fluxo de trabalho com o futuro sistema de provisionamento (chef, fantoche, ansible, etc.).
Parte real
Bem, o modelo apresentado acima funciona bem, mas os ramos podem quebrar o IC. A ramificação do recurso deve sincronizar com a origem (de acordo com o artigo, seria development
ramificação) para tornar o CI e a mesclagem suaves, certo?
Digamos que Alice e Bob estão trabalhando em dois recursos. Mas Alice está pronta no dia seguinte. O recurso de Bob leva uma semana. Quando Bob termina, suas alterações estão desatualizadas (talvez Alice refatorou / renomeou algumas classes).
Uma solução é a cada manhã que os desenvolvedores devem master/origin
procurar para verificar se há alguma alteração. Se Alice se comprometer, Bob deve puxar e mesclar em seu espaço de trabalho para que seu ramo de recursos esteja atualizado.
- Essa é uma boa maneira?
- Essas ramificações devem existir no repositório principal (não no clone local?). O que significa que todo desenvolvedor deve conceder privilégios ao repositório principal no GitHub / Bitbucket para que eles possam criar uma nova ramificação? Ou isso é feito localmente?
- Por fim, o modelo apresentado pelo artigo deve interromper o IC se as ramificações não estiverem sincronizadas com o
origin/master
. Como queremos criar a construção todas as noites, os desenvolvedores devem puxar e mesclar antes de deixar o trabalho, e o CI também é executado em cada ramo de recurso?