Prática de controle de versão para regravações

29

Desenvolvemos um produto (protótipo) P_OLD no idioma X e agora o reescrevemos do zero como P_NEW no idioma Y.

Como P_NEW e P_OLD são o mesmo produto:

P_NEW deveria ter apenas um Pach de idade de P_OLD ou deveria ser seu próprio repositório?

Qual é a maneira usual de lidar com essas grandes mudanças na perspectiva de controle de versão?

1v0
fonte
relacionado (possivelmente uma duplicata): Escolhendo entre projetos únicos ou múltiplos em um repositório git?
Gnat
@gnat Obrigado pelo link. É interessante, mas a principal diferença é que, para nós, é o mesmo produto, completamente redesenhado. O projeto antigo era basicamente um protótipo (feio).
1v0 14/07/2015

Respostas:

46

Você quase certamente quer um novo repositório.

O objetivo do repositório é:

  • para acompanhar o histórico e as alterações, para que você possa compará-los facilmente
  • gerenciar ramificações e mesclagens, em vez de apenas enviar arquivos de patch por e-mail e aplicá-los aos diretórios de trabalho manualmente

Se você estiver reescrevendo totalmente um projeto do zero, não faz sentido colocar a reescrita no mesmo repositório. Você não poderá aplicar patches escritos no idioma antigo à sua reescrita. A troca de repositórios não fará com que a história do repositório antigo desapareça e, se você alternar, não terá etapas intermediárias estranhas, nas quais haverá dois idiomas em seu repositório.

O único motivo pelo qual eu consideraria manter o repositório ao alterar idiomas seria se: a) os idiomas forem tão semelhantes que o código possa ser copiado e colado de um para o outro sem fazer alterações; ou b) você tenha um projeto no qual a maioria do conteúdo funcional no controle de versão é semelhante a modelos em um idioma de modelo que você está mantendo, e o idioma do núcleo que você está alterando é traduzido linha por linha para outro idioma (e mesmo assim somente se você souber você precisará continuar iterando os modelos durante a migração).

user52889
fonte
2
Dependendo da duração da transição, é útil ter o anterior vivo e facilmente acessível para comparações. Você pode até estar introduzindo casos de teste no sistema antigo para ajudá-lo a validar os resultados correspondentes no novo sistema.
Eric
16

Eu sempre coloco reescritas em novos repositórios. Dessa forma, as compilações, testes e implantações podem ser feitos de forma independente.

Quando você reescreve um projeto em outro idioma, geralmente há muito pouca semelhança em qualquer uma dessas tarefas, como construção, execução de testes e implantação. Você economizará a dor se apenas os isolar em seu próprio repositório. Então, você só precisa se preocupar com a dificuldade de gerenciar o usuário e a transição de dados do sistema antigo para o novo; isso é sempre uma coisa divertida. :)

dsw88
fonte
5

Se seus sistemas forem suficientemente modulares e compatíveis com link, você se beneficiaria de um único repositório e construção. Por exemplo, se o sistema C estiver sendo reescrito em C ++, o código C ++ poderá chamar a funcionalidade existente e substituí-la gradualmente.

No entanto, mesmo nesse caso, alguns podem argumentar para iniciar um novo repositório no qual o código antigo relevante é extraído conforme necessário.

Keith
fonte