Pergunta

Já faz algum tempo que trabalho com o Mercurial.Ao fazer alterações (privadas) em algum software de terceiros, no passado eu sempre criava um branch nomeado separado para essas alterações.Quando o código upstream é atualizado, eu simplesmente o mesclo em minha ramificação nomeada.

Hoje li sobre MQ (Mercurial Queues - capítulos 12 e 13).Acho que entendi o conceito por trás do MQ, então minha pergunta é:

Existe alguma vantagem do MQ sobre ramificações (nomeadas) no Mercurial (para o meu cenário)?

Foi útil?

Solução

As principais vantagens do MQ sobre ramificações nomeadas são:

  • Você pode revisar seus patches.Isso permite editar o histórico e manter uma série limpa e lógica de patches sobre o código upstream:se você notar um erro em um patch, você atualizará o patch em vez de fazer um novo commit.

  • As alterações em seus patches serão claramente separadas das alterações feitas no upstream.Ao mesclar duas ramificações, você mistura os dois fluxos de desenvolvimento.Isso torna difícil ver as alterações feitas sem ver também as alterações provenientes da ramificação upstream.

  • Os nomes dos patches são temporários.Quando você hg qfinish um patch aplicado, não há nenhum vestígio do nome do patch no commit.Portanto, você pode usar o MQ sem coordenar primeiro com o repositório upstream, pois eles nunca perceberão o MQ.

  • Você evita fusões.Em vez de mesclar com o código mais recente do upstream, você rebase seus patches aplicados.Isso fornece um histórico mais simples.A história é obviamente falsa, já que você finge que fez todos os seus patches depois vendo o código do upstream - quando na verdade você fez isso em paralelo com o upstream e posterior mudou-se seus patches até a ponta do upstream.

  • Você não tem nome de branch permanente nos conjuntos de alterações.As pessoas às vezes tratar ramos nomeados como descartáveis e ficam chateados quando percebem que um ramo nomeado está fixado na história.(Na verdade, você pode definir o nome da filial com hg branch antes de enviar patches, então este ponto não é tão ruim.)

As desvantagens do MQ são:

  • É uma ferramenta extra para aprender.É poderoso, mas também lhe dá mais oportunidades de dar um tiro no próprio pé.Correndo hg qdelete vai realmente excluir o patch e assim você pode jogar fora os dados.(Acho que está tudo bem, mas um usuário do Git veio à nossa lista de discussão reclamando disso.)

  • Você torna muito mais difícil colaborar com outras pessoas.Você pode vez .hg/patches em um repositório e enviar/extrair patches entre repositórios, mas é difícil fazer isso se você for mais do que um único desenvolvedor.O problema é que você acaba mesclando patches se mais de uma pessoa atualizar o mesmo patch.

  • Você não tem nome de branch permanente nos conjuntos de alterações.Se você estiver usando ramificações nomeadas corretamente e usar nomes de ramificações estáveis ​​e de longo prazo, você sentirá falta disso ao usar o MQ.

Outras dicas

Boa pergunta.Depende.Pessoalmente eu não gosto do sistema de ramificação mercurial, e tento evitá-lo quando puder (usando marcadores empurrados em vez de filial).

mq é uma ótima ferramenta, com grande poder e grandes armadilhas.Você também pode considerar usando pbranch .

mq é uma ótima ferramenta se você precisar produzir e manter um conjunto de patch para um projeto, algo como adicionar recurso-x a um projeto e manter os patches atualizados com o código upstream.

Marcadores (ou ramos Se você quiser) são bons para tarefa de desenvolvimento curto que exigem ser mescladas no código upstream.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top