Ao usar o Git, é recomendável usar o ramo principal para o desenvolvimento ativo?

32

Primeiro, alguns antecedentes, estamos no processo de transferir todas as nossas equipes de projeto para o uso do git e no processo de estabelecer as diretrizes de como os repositórios devem ser organizados, de modo que certas ramificações também possam ser monitoradas para integração e implantação automática nos servidores de teste. Atualmente, existem dois modelos em desenvolvimento:

  1. Fortemente influenciado pelo artigo nvie.com sobre ramificação bem-sucedida, com a ramificação principal representando o código mais estável, uma ramificação de desenvolvimento para o código de ponta e uma ramificação de integração para o código que está pronto para o teste de controle de qualidade.

  2. Um modelo alternativo no qual a ramificação principal representa o código de desenvolvimento de ponta, uma ramificação de integração para o código que está pronto para teste de controle de qualidade e uma ramificação de produção para o código estável que está pronto para implantação.

Nesse ponto, é parcialmente uma questão de semântica em relação ao que o ramo mestre representa, mas o desenvolvimento ativo no ramo mestre é realmente uma boa prática ou não é realmente relevante?

rjzii
fonte
1
Eu gosto do worfklow que Scott Chacon usa para desenvolver o GitHub: scottchacon.com/2011/08/31/github-flow.html
user16764
1
Como descrito, parece-me mais um problema semântico - qualquer organização evoluirá seus próprios processos e, em alguns aspectos, os nomes precisam refletir seu fluxo de trabalho. Geralmente, a chave parece ser que em algum lugar você define algo como "o código fonte do HEAD sempre reflete um estado pronto para produção". O que você escolhe para chamar que é menos importante, mas ambos git-flow eo GitHub fluxo de trabalho foco em que a separação e no controle quando você empurra para a produção-pronto "coisinha"
Murph
@ Murph - É verdade, mas como estamos fazendo parte disso do zero, achei melhor seguir mais ou menos convenções comuns para que os novos desenvolvedores contratados não tenham uma curva de aprendizado acentuada devido a práticas internas incomuns.
Rjzii
Então você já respondeu a sua própria pergunta (-: Para ser honesto, mesmo fazendo a pergunta você está muito à frente da curva ...
Murph

Respostas:

33

O único recurso real de definição da masterramificação é que é o padrão para algumas operações. Além disso, os nomes das filiais têm significado apenas dentro de um repositório específico. O meu masterpode apontar para o seu development, por exemplo. Além disso, um masterramo nem sequer é necessário; portanto, se houver alguma confusão sobre qual ramo deve ser, meu conselho é geralmente deixá-lo de fora.

No entanto, na minha opinião, a melhor maneira de pensar nisso é o padrão para empurrar para. A maioria dos tutoriais on-line que seus desenvolvedores leem vai assumir isso. Portanto, faz muito sentido ter masterqualquer ramo que é mais frequentemente pressionado. Algumas pessoas pensam nisso como a cópia original que é intocável para os desenvolvedores, exceto após o exame mais rigoroso, mas usá-la dessa maneira remove muitos dos padrões úteis que o git fornece. Se você deseja esse tipo de ramo primitivo, eu o colocaria em um repositório completamente separado, no qual apenas algumas pessoas possam escrever.

Karl Bielefeldt
fonte
7
+1. E como o código "pronto para produção" é o código importante, ele também deve residir em uma ramificação com um nome destacando essa importância. "master" como o nome padrão da ramificação certamente não atende a essa solicitação, pois também é usado em qualquer outro repositório para quaisquer que sejam as intenções.
Bananeweizen
4
+1. Esta é a resposta da vida real. Para enfatizar o ponto: ninguém em sua equipe definiu o ramo "mestre", o sistema git fez. Para qualquer coisa importante, atenha-se aos ramos que alguém da sua equipe definiu.
Travis Wilson
1
Concordo plenamente. Embora eu goste muito do modelo de fluxo git ( nvie.com/posts/a-successful-git-branching-model ), a única coisa que me perturba é que o mestre é estritamente reservado para lançamentos, o que é contra-intuitivo.
Bachi
12

Não, não é aconselhável, mesmo no começo antes de você fazer o controle de qualidade. Como prática recomendada, o padrão de desenvolvimento deve ser consistente do início ao fim. Sua ramificação mestre deve começar vazia, você deve ramificar sua ramificação de desenvolvimento e começar a adicionar arquivos, mesclar em sua ramificação de integração e, posteriormente, em seu mestre.

Embora ninguém se importe durante o desenvolvimento que o ramo mestre não construa, ele se presta a maus hábitos desde o início. O mestre sempre deve criar e, para as principais liberações de recursos, também não seria uma má idéia arquivar ramificações das principais compilações, para que pontos de liberação estáveis ​​possam ser retornados, se necessário.

Joel Etherton
fonte
3
Não é melhor fazer o rastreamento de versão por meio de tags?
Adonis K.Kakoulidis 20/10
1
@AdonisK .: Não vejo a relevância de sua pergunta.
Joel Etherton