Jon Purdy tem a ideia certa. git flow
facilita 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 svn
Para- git
perspectiva. Considere git
o seguinte:
master--...............-.....-..............-
\ / / /
---develop---------............../
\ /
--feature---
Acima, você ramifica master
para develop
(indicado por \
) e ramifica develop
para uma feature
ramificaçã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, develop
ramificado de master
. O bug descoberto em master
foi corrigido ramificando-o master
, corrigindo-o e mesclando-o novamente master
. Em seguida, fundiu master
para develop
, em seguida, develop
emfeature2
que rolou o novo código de hotfix
dentro desses ramos.
Quando você mescla feature2
de volta para develop
, a sua história inclui develop
o hotfix
. Da mesma forma, develop
é mesclado feature2
com o novo código de master
, portanto, mesclar de develop
volta para master
acontecerá sem problemas, pois ele é baseado nesse commit master
naquele momento - como se você tivesse ramificado master
naquele 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 hotfix
ramo 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.0
em master
ou fundir master
para trás em 1.0
. Pegue o único hotfix
ramo 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.3
cabeça como 1.3.17, mescle-a em todos os recursos em andamento ramificados 1.3
e siga em frente.
A git flow
extensã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.
git
tag após cada compilação bem-sucedida? Isso teria a vantagem adicional de deixar bem claro quaisgit
confirmações têm problemas de compilação ou falhas de teste, uma vez que permaneceriam sem marcação.