Jon Purdy tem a ideia certa. git flowfacilita também o gerenciamento real dessas filiais, e o gerenciamento de filiais é um argumento para mudar para git.
Vamos começar com um resumo básico de git, desde que você está vindo do svnPara- gitperspectiva. Considere gito seguinte:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Acima, você ramifica masterpara develop(indicado por \) e ramifica developpara uma featureramificação. Mesclamos esses ramos de backup (denotados por /), com commits ( -) ao longo de um ramo. (Se não houver confirmação, mas a mesclagem estiver na direita, há .indicadores para mostrar que a próxima -é a próxima confirmação).
Bastante fácil. E se tivermos um hotfix em nossa versão principal?
master--...............-.....-................-...........-.........-
\ / / / \ /| /
\ / / / -hotfix-- V /
---develop---------............../..............-...----
\ / \ V /
--feature--- --feature2...----
Acima, developramificado de master. O bug descoberto em masterfoi corrigido ramificando-o master, corrigindo-o e mesclando-o novamente master. Em seguida, fundiu masterpara develop, em seguida, developemfeature2 que rolou o novo código de hotfixdentro desses ramos.
Quando você mescla feature2de volta para develop, a sua história inclui developo hotfix. Da mesma forma, developé mesclado feature2com o novo código de master, portanto, mesclar de developvolta para masteracontecerá sem problemas, pois ele é baseado nesse commit masternaquele momento - como se você tivesse ramificado masternaquele momento.
Então, aqui está outra maneira de fazer isso.
master--..........-........-
\ /\ /
---1.0-- --1.1--
Suas 1.0 lançamentos obter tagged- 1.0.1, 1.0.2, 1.0.3, e assim por diante.
Agora, aqui está um truque: você encontrou um bug na versão 1.0 e afeta 1.1, 1.2 e 1.3. O que você faz?
Você ramifica a versão mais recente ou mais antiga mantida e a corrige. Então você mesclar seu novo hotfixramo em 1.3-e em 1.2, 1.1, e 1.0. Não ramifique de cada uma das ramificações da versão de manutenção; não se fundem 1.0em masterou fundir masterpara trás em 1.0. Pegue o único hotfixramo e mescle-o em todos os seus ramos de versão. Se houver conflitos, será informado; revise seu código para garantir que as alterações estejam corretas ( git diffé seu amigo).
Agora essa mudança específica é aplicada em qualquer lugar. A linhagem é ramificada, mas está tudo bem. Não é casual. Marque a 1.3cabeça como 1.3.17, mescle-a em todos os recursos em andamento ramificados 1.3e siga em frente.
A git flowextensão ajuda a gerenciar essas ramificações de manutenção, recursos e hotfix para você. Depois de baixar o fluxo de trabalho, isso é trivial e gera uma enorme quantidade de problemas no gerenciamento de código-fonte.
Já vi isso nas equipes de programação, mas também não trabalhei tão profundamente como programador; portanto, ainda estou estudando o fluxo de trabalho do dia-a-dia.
gittag após cada compilação bem-sucedida? Isso teria a vantagem adicional de deixar bem claro quaisgitconfirmações têm problemas de compilação ou falhas de teste, uma vez que permaneceriam sem marcação.