Você pode se beneficiar do fluxo de trabalho que Scott Chacon descreve no Pro Git . Nesse fluxo de trabalho, você tem dois ramos que sempre existem, dominam e se desenvolvem .
master representa a versão mais estável do seu projeto e você só implanta na produção a partir desta ramificação.
develop contém alterações que estão em andamento e podem não estar necessariamente prontas para produção.
Na ramificação de desenvolvimento , você cria ramificações de tópicos para trabalhar em recursos e correções individuais. Quando seu recurso / correção estiver pronto, você o mesclará no desenvolvimento ; nesse momento, poderá testar como ele interage com outros ramos de tópicos nos quais seus colegas de trabalho se fundiram. Depois que o desenvolvimento estiver em um estado estável, mescle-o ao master . Sempre deve ser seguro implantar na produção a partir do mestre .
Scott descreve essas ramificações de longa duração como "silos" de código, onde o código em uma ramificação menos estável acabará "se graduando" em um considerado mais estável após o teste e a aprovação geral da sua equipe.
Passo a passo, seu fluxo de trabalho nesse modelo pode ficar assim:
- Você precisa corrigir um bug.
- Crie uma ramificação chamada myfix baseada no desenvolvimento ramo de .
- Trabalhe no bug nesta ramificação de tópico até que seja corrigido.
- Mesclar myfix no desenvolvimento . Execute testes.
- Você descobre que a sua correção está em conflito com outro tópico do hisfix, no qual seu colega de trabalho se mesclou ao desenvolver enquanto você trabalhava na correção.
- Faça mais alterações na ramificação myfix para lidar com esses conflitos.
- Mesclar myfix em desenvolver e executar testes novamente.
- Tudo funciona bem. Mesclar se tornar mestre .
- Implante a produção a partir do mestre a qualquer momento, porque você sabe que é estável.
Para mais detalhes sobre esse fluxo de trabalho, consulte o capítulo Fluxos de trabalho de ramificação no Pro Git.
develop
é uma 'solução' desnecessária para um problema que o git não tem. Tanto quanto posso dizer, o sucesso se deve a um artigo bem escrito e mal orientado, sem comentários permitidos. Aqui está um contra-artigo barro.github.io/2016/02/…Depois de entrar como um novato, tentando encontrar uma estratégia direta para ensinar a outros desenvolvedores que nunca usaram o controle de origem. Esse é o que se encaixa http://nvie.com/posts/a-successful-git-branching-model/ Tentei usar o fluxo de trabalho padrão do GIT que está nas páginas de manual, mas isso me confundiu um pouco e meu público completamente.
Nos últimos 6 meses, só tive que corrigir conflitos duas vezes. Eu adicionei etapas para sempre testar após uma mesclagem e 'buscar e mesclar "ou' pull --rebase" muito (uma vez pela manhã e à tarde) durante o desenvolvimento de recursos. Também usamos o github.com como o local central para obter o código mais recente.
fonte
default master branch
NÃO é usado com mais frequência como desenvolvedor nisso #A successful Git branching model
(Fiz meu comentário acima, é a própria resposta, como eu deveria ter feito inicialmente.)
De Scott Chacon, do Github:
Veja o artigo inteiro para mais detalhes: http://scottchacon.com/2011/08/31/github-flow.html
Observe que "solicitações de recebimento" são uma invenção do Github, e é algo incorporado ao site deles, e não o próprio Git: https://help.github.com/articles/using-pull-requests/
fonte
Use a
master
ramificação como sua ramificação de desenvolvimento e crie ramificações de liberação para executar correções de erros.Quaisquer novos recursos continuarão
master
durante a janela de desenvolvimento (confirmada diretamente ou como ramificações de tópico com solicitações de recebimento, até você - não mostradas no gráfico). Depois que todos os recursos planejados forem implementados, insira o congelamento de recursos e execute o teste. Quando estiver satisfeito, marque o lançamentomaster
comov1.0
.Com o tempo, seus usuários encontrarão erros,
v1.0
então você desejará criar uma ramificação a partir dessa tag (por exemplo, nomeie-a após o lançamento1.0
) e corrija esses erros na ramificação. Quando você tiver bugs suficientes corrigidos e achar que isso merece uma nova versão, marque-a comov1.0.1
e junte-a novamentemaster
.Enquanto isso, uma nova janela de desenvolvimento pode estar acontecendo no
master
ramo, que será marcado comov1.1
.Enxágüe e repita.
Isso segue a lógica de numeração do controle de versão semântico .
fonte
1.0.1
alterações de volta paramaster
1.1
master após a mesclagem1.0.1
- isso ajuda a minimizar a confusão.1.1
é um ramo de release e possui tags que representam o estado exato de um ou mais releases. A redefinição desse ramo causaria a perda dessa representação. Eu recomendo fortemente que você defina seus ramos de liberação para negar os impulsos de força para evitar isso.Em um VCS, ter apenas uma ramificação "principal" mostra rapidamente seus limites, porque você não pode realizar todo o esforço de desenvolvimento ao mesmo tempo em uma ramificação.
Isso significa que você precisa saber quando ramificar .
Mas em um DVCS (como no VCS "descentralizado"), você também tem um problema de publicação , com ramificações que você mantém local nos repositórios e ramificações para as quais está empurrando ou puxando.
Nesse contexto, comece identificando seu esforço de desenvolvimento simultâneo e decida um processo de publicação (push / pull). Por exemplo (e esse não é o único caminho):
ninguém deve enviar diretamente para prod (daí o somente leitura)
Todos podem pressionar para liberar para atualizar o próximo lançamento.
Todos podem retirar-se do referido release para atualizar seu processo de consolidação local.
Existem outros processos de gerenciamento de release, como atesta essa pergunta do SO .
fonte
Leia as equipes Git Workflow for Agile da ReinH aqui: http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html
Isso funciona muito bem para equipes pequenas. O objetivo aqui é garantir que tudo o que possa ser potencialmente instável vá para um ramo de algum tipo. Volte ao master somente quando estiver pronto para que todos que trabalham fora do ramo de recursos o usem.
Nota: essa estratégia dificilmente é específica para o git, mas o git facilita a implementação dessa estratégia.
fonte