Pergunta

Eu refatorar e código de minha de outras pessoas o tempo todo . Quando eu trabalho em um ramo e não no tronco, isso às vezes resulta em algumas fusões extremamente doloroso, especialmente se eu não mesclar volta ao tronco regularmente (o código na filial lentamente se afasta do Trunc, e quando as pessoas modificar Tronco I tem que descobrir manualmente como aplicar este ao ramo).

As soluções que eu conheço ou são

  1. Constantemente fusão de e para Trunk - reduz fusões dolorosas, mas então por que o trabalho em um ramo em tudo
  2. ?
  3. Sempre que você precisar refatorar algo, mude para Tronco, faça o refatoração lá e mesclagem para o seu ramo -. Eu não acho isso muito prático, uma vez que o custo real de mudar ambientes para cada refatoração é enorme

O que você faz?

Foi útil?

Solução

refatoração em larga escala precisa ser feito no momento certo no cronograma de desenvolvimento. Se você fazer enormes quantidades de refatoração próximo lançamento você vai acabar prejudicando a si mesmo, porque você vai introduzir fusões dolorosos num momento em que as mudanças devem ser minimizados. O mais perturbador sua refatoração será o início do ciclo de desenvolvimento que deve acontecer (e o processo mais especial deve haver para ele, por exemplo parada edições para os arquivos afetados, tanto quanto possível, por um período de tempo).

Constantemente fusão de e para o tronco é geralmente boa prática.

Por que trabalhar em um ramo em tudo nesse caso? Porque você tem mais controle (você pode parar fundindo-tronco para estabilizá-lo para a liberação, por exemplo, sem parar checkins para o seu ramo de desenvolvimento). Porque você pode colocar um alto nível de validação em torno da fusão de / para o tronco, sem afetar a velocidade de check-in para o ramo de desenvolvimento muito.

Outras dicas

Eu vou com 1, fazer pequenas mudanças quando possível e check-in, muitas vezes, ou então as fusões tornar-se doloroso. Ter um ramo separado pode tornar as coisas mais fácil se você precisa trabalhar em outras coisas ao mesmo tempo ou a refatoração leva mais tempo do que se pensava inicialmente. A outra vantagem é que ele torna mais fácil para várias pessoas para tomar parte na re-factoring e você pode verificar as coisas para o ramo tão frequentemente como você gosta.

Gostaria de sugerir a seguinte estratégia para um cenários onde janela de tempo entre os lançamentos é pelo menos 2 meses.

Quando você começa a ficar perto de um comunicado, crie um ramo release. ramo release deve ser tratado como não refatoração aqui, por favor e eu sou (quase) completo de recursos ramo. É neste momento que você deve começar a se concentrar seus esforços na estabilização da liberação no ramo release . Mesclar para trás todas as correções de defeitos do ramo release para o tronco, se necessário. Enquanto isso, o tronco é tratado como perpetuamente aberto para refatoração . Além disso, se possível tentar reduzir a refatoração como você se aproximar de um grande lançamento e acelerá-lo nos dias imediatamente após um.

No caso você está seguindo uma estratégia de liberação contínua (ie. Uma versão a cada 1 a 2 semanas), você não deve refatoração separado e codificação de ramos separados, a menos que você está fazendo uma melhoria cirúrgica major. Em tais situações realce cirúrgico (que devem ser espaçadas mais de 3 meses cada), gota a liberação de sua programação com antecedência sempre que você pretende executar uma mala, use um dos ciclos para a fusão de liberação e aumento de testes, mantenha o seu dedos cruzados e depois solte.

As mudanças precisam ser tanto rápidas (de modo não muito mudanças em você) ou então Local (assim você só se preocupam com as mudanças em um pequeno número de lugares).

Caso contrário, a fusão pode ser apenas o trabalho tanto quanto o refactor era. Como um algoritmo, o bloqueio otimista simplesmente não funciona quando muitas transações falhar e deve ser reiniciado.

Basicamente, você não pode permitir uma situação onde 20 programadores em uma empresa toda alterar os nomes dos 50% dos métodos na base de código a cada dia. E por falar nisso, se várias pessoas estão sempre refatoração nos mesmos lugares ao mesmo tempo, então eles são apenas desfazendo cada outras de trabalhar de qualquer maneira.

Se os programadores estão gastando muito tempo supervisionando manualmente fusões, em seguida, apresentar a seus gestores uma oportunidade para aumentar a produtividade, mudando a maneira como as tarefas são definidas e atribuídas.

Além disso, "refatorar todo o sistema para as fábricas de uso em todos os lugares" não é uma tarefa. "Refactor esta interface e suas implementações para fábricas de uso" é uma tarefa.

Este é o lugar onde uma boa distribuídos supera VCS. Mas eu estou supondo que você está comprometido com SVN já.

Pessoalmente, eu apenas fazer a refatorar e em seguida, mesclar o mais cedo possível para evitar o inferno conflito. Ele não é o método mais produtivo, mas o menos propenso a erros.

Uma vez tive um ramo que estava dormente por cerca de 3 semanas porque o recurso foi 'colocado em espera' e era impossível para mesclar. Eu só comecei a característica de novo em um novo ramo, usando o velho como referência para certas partes.

Com o risco de ser óbvio, eu diria que tentar evitar ramificação completamente. A quantidade de sobrecarga esta causas não deve ser subestimado. Mesmo quando você acha que não pode adiar por mais tempo (uma versão do sistema em produção, lançar dois sendo construído, mas também alterar pedidos para liberar um) ainda tentam encontrar uma outra maneira: Existe realmente nenhuma maneira você pode isolar a funcionalidade sem ramificação (por exemplo cisão um projeto "comum" e alguns subprojetos)? Não há realmente nenhuma maneira você pode integrar todo o código na cabeça (por exemplo, criar classes de estratégia que incorporam as diferenças ou criar interruptores para ligar novos recursos on ou off)?

Se você absolutamente tem que ramo, eu iria com a opção 1. tentar mesclar como pequenas mudanças quanto possível e fazê-lo com freqüência.

Commit cedo, cometem muitas vezes.

Ou neste caso ... Mesclar cedo, merge muitas vezes.

A integração contínua é a chave ... 1 pequeno lote de alterações de uma vez ...

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