Eu trabalho com uma equipe de programadores como analista de negócios. Acabamos de lançar a versão 2.0 do nosso produto e estamos trabalhando na próxima versão a ser lançada em 3 meses (é um produto de software interno). Infelizmente, a versão 2.0 tem alguns problemas que eles tiveram que corrigir e vamos implantá-las em algumas semanas. O problema é que também não queremos implantar as alterações que ainda estão sendo trabalhadas e que não serão lançadas por mais três meses.
Os programadores decidiram que a maneira de gerenciar isso era que apenas o código dos defeitos seria verificado e o código dos novos aprimoramentos será mantido nas máquinas locais do desenvolvedor até que sejam concluídos. Terei que fazer as compilações locais de suas máquinas para testar, porque se eles fizerem o check-in do código e precisarmos enviar outro patch para corrigir defeitos, ainda não queremos incluir esses aprimoramentos. Também existe o problema em que o mesmo arquivo de código contém correções e aprimoramentos de defeitos, portanto, eles precisam copiar o arquivo de código localmente e, em seguida, fazer uma alteração para corrigir um bug e verificar esse erro, retomando o trabalho nos aprimoramentos, usando o comando cópia local que eles fizeram.
Parece bastante complicado - existe uma maneira melhor de lidar com esse tipo de cenário? Estamos usando o Team Foundation Server e o Visual Studio 2010.
Respostas:
A V2.0 deveria ter o que chamamos de 'ramificação de estado estacionário' (usamos o Perforce, não o TFS) para ele depois que ele foi lançado. Quaisquer correções para a v2 teriam sido feitas nessa ramificação e depois propagadas de volta para a ramificação de desenvolvimento da v3 enquanto os recursos da v3 também estavam sendo trabalhados, ou seja, um defeito na v2 resultaria em um defeito também na v3.
A existência de alterações nas máquinas do desenvolvedor por um longo tempo provavelmente resultará em um pesadelo de integração.
fonte
Bem, existem várias maneiras de lidar com questões como essa, geralmente cobertas pela tag 'ramificação' , cada uma com seu próprio conjunto de benefícios e desvantagens.
Mas a abordagem escolhida pelos seus desenvolvedores ... gee, vou citá-la verbalmente para garantir que não tenha interpretado mal ...
... da maneira como acima é provavelmente o único que está totalmente errado!
O que a torna criminosa para mim é que, para o TFS, existe um Guia de Ramificação para Microsoft Team Foundation Server excelente e fácil de entender - documento enorme e detalhado com recomendações de estratégias de ramificação cuidadosamente adaptadas e explicadas para todos os tipos de projetos diferentes ( versão HTML aqui ).
fonte
editar
Você não está atuando como um repositório de equipe de fato. É para gerenciar seu próprio trabalho, refatorar esforços, etc.
finalizar edição
fonte
O que você está descrevendo é uma maneira terrível de usar o controle de versão. Deveria ter havido uma ramificação feita para a liberação 2.0, uma etiqueta ou algum identificador. Dessa forma, as modificações nessa versão podem ser contidas e mais desenvolvimento pode continuar a acontecer.
Este artigo pode lhe dar algumas idéias. Está escrito tendo
git
em mente, mas não há razão para que não funcionemercurial
também. Percebo que você não está usando nenhum deles, mas também é um problema que você deve consertar.fonte
Resposta rápida: A equipe de desenvolvimento deve ter um ramo de produção separado para manter a base de código V2.0 implantada separada do tronco principal .
Todas as correções precisam ser feitas primeiro nesse ramo e depois testadas e implantadas em outros ramos, para manter o código sincronizado .
Seu projeto também deve ter vários ambientes,
for health development
como Prod, Staging, QA e Dev (às vezes UAT). Esses ambientes devem ser configurados antes de ir para o release de produção.Em suma, estar pronto para erros e modificações é a maneira de oferecer suporte a um aplicativo lançado.
Como o TFS foi mencionado como controle de versão, também compilei uma lista de artigos que serão úteis para definir o (s) ambiente (s) de desenvolvimento de saúde:
fonte
Não, porque enquanto você estiver usando um VCS, você não está fazendo o controle de versão.
O conceito central do controle de versão é rastrear as diferenças ao longo do tempo; você planeja registrar algumas diferenças, mas no momento a maioria das alterações não é registrada.
Como outros já disseram, você deve usar ramos. Depois de definir essa configuração, você deverá verificar todas as alterações funcionais (ou seja, nem todas as teclas, mas sempre que você corrigir um bug, adicionar um recurso, excluir um recurso ou concluir uma alteração de forma que ela ainda crie e funcione).
fonte
Sou desenvolvedor e recebemos código de ramificação e db diferentes para correções da versão atual e diferentes para aprimoramentos e para a versão consecutiva posterior.
Depois que nossas correções são concluídas, elas são mescladas com a produção e implantadas, obtemos uma nova ramificação para trabalhar novamente nas melhorias.
Além disso, seguimos uma prática como se eu tivesse 10 correções para minha versão atual
Eu escrevo como
Da mesma forma, para outras correções, eu apenas faço isso para todas as linhas que altero ou adiciono para correção. E basta comparar e confirmar. Da mesma forma, se eles estavam fazendo paralelo no mesmo ramo, eles podem usar
Ctrl+Shift+F
O comando e o tipo//Start Iteration 2, Fix No-1, Branch No-"ABC"
de pesquisa em toda a solução ajudam muito a descobrir os locais exatos, os arquivos nos quais o código é alterado e o código novo, apenas essa parte pode ser usada para confirmação.fonte