No ambiente de programação de equipe do CVS (Concurrent Versions System), os membros de equipe executam todo seu trabalho em seus próprios Workbenches, isolados dos outros. Eventualmente, eles desejarão compartilhar seu trabalho. Eles fazem isso através de um Repositório do CVS.
O CVS utiliza um modelo de ramificação para suportar vários cursos de trabalho que são relativamente isolados uns dos outros mas ainda altamente interdependentes. As ramificações são onde uma equipe de desenvolvimento compartilha e integra o trabalho em andamento. Uma ramificação pode ser como uma área de trabalho compartilhada que é atualizada por membros da equipe à medida que eles fazem alterações no projeto. Esse gabarito permite aos indivíduos trabalhar em um projeto em equipe do CVS, compartilhar seu trabalho com outros durante a realização de alterações e acessar o trabalho de outros durante o desenvolvimento do projeto. Uma ramificação especial, mencionada como HEAD, representa o curso principal de trabalho no repositório (muitas vezes HEAD é referido como o tronco).
Enquanto os membros das equipes produzem novo trabalho, eles o compartilham consolidando essas alterações na ramificação. De forma semelhante, quando desejam obter o trabalho mais recente disponível, eles atualizam seus espaços de trabalho locais para as alterações na ramificação. Assim, a ramificação está constantemente sendo alterada, avançando conforme os membros de equipe submetem novo trabalho.
A ramificação efetivamente representa o estado atual do projeto. Em qualquer ponto, um membro da equipe pode atualizar os espaços de trabalho da ramificação que possui e saber que eles estão sendo atualizadas.
O CVS fornece dois recursos importantes requeridos para trabalhar em uma equipe:
Um histórico do trabalho submetido pela equipe
Uma maneira de coordenar e integrar esse trabalho
A manutenção do histórico é importante para que cada um possa comparar o trabalho atual com os rascunhos anteriores, reverter para o trabalho mais antigo que for melhor e assim por diante. A coordenação do trabalho é essencial para que exista uma definição do estado atual do projeto contendo o trabalho integrado da equipe. Essa coordenação é fornecida através do gabarito de ramificação.
Um modelo otimista é um modelo em que qualquer membro da equipe pode fazer alterações em qualquer recurso ao qual esse membro tenha acesso. Como dois membros da equipe podem consolidar na ramificação as alterações para o mesmo recurso, poderão ocorrer conflitos os quais precisarão ser resolvidos. Esse gabarito é chamado de otimista porque assume que os conflitos são raros.
Geralmente não existem recursos isolados; de forma geral, eles contêm dependências implícitas ou explícitas de outros recursos. Por exemplo, as páginas da Web possuem links para outras páginas da Web e o código fonte possui referências a artefatos descritos em outros recursos do código fonte. Nenhum recurso é uma ilha.
Conforme os recursos são consolidados na ramificação, essas dependências podem ser afetadas. Assegurando-se de que a integridade das dependências é importante porque a ramificação representa o estado atual do projeto: em qualquer ponto, um membro da equipe poderá pegar o conteúdo da ramificação como base para novo trabalho.
Portanto, o fluxo de trabalho ideal é aquele no qual a integridade da ramificação é preservada.
O fluxo de trabalho ideal prossegue da seguinte maneira:
Inicie a atualização. Antes de iniciar o trabalho, atualize os recursos no espaço de trabalho com o estado atual da ramificação. Se tiver certeza de que não haja trabalho local pelo qual esteja interessado, a maneira mais rápida de manter-se atualizado será selecionar os projetos nos quais estiver interessado na ramificação e selecionar Registrar Saída Como Projeto (ou Substituir por > Último do Repositório se os projetos já existirem localmente). Isso irá sobrepor os recursos locais por aqueles da ramificação.
Faça as alterações. Trabalhe localmente no Workbench, criando novos recursos, modificando os existentes, salvando localmente durante o trabalho.
Sincronize. Quando estiver pronto para consolidar seu trabalho, sincronize-se com o repositório.
Atualize. Examine as alterações de entrada e adicione-as ao Workbench local. Isso permite determinar se há alterações que podem afetar a integridade do que você está prestes a consolidar. Resolver conflitos. Teste novamente, execute verificadores de integridade (por exemplo, verifique se há links de hipertexto interrompidos, assegure-se de que o código seja compilado e assim por diante).
Consolide. Agora que você está certo de que as alterações estão bem integradas com o conteúdo de ramificação mais recente, consolide as alterações na ramificação. Por segurança, repita a etapa anterior se houver novamente novas alterações de entrada.
Naturalmente, esse é um fluxo de trabalho ideal. Sob determinadas condições você pode ficar seguro de que as alterações de entrada não o afetarão e escolher consolidar sem atualização. Entretanto, os membros de equipe deverão fazer o possível para seguir um fluxo semelhante ao mencionado anteriormente a fim de assegurar-se de que a integridade da ramificação não seja comprometida acidentalmente.
Você pode encontrar mais informações no CVS no endereço http://www.cvshome.org.
Repositórios do CVS
Ramificações
Versões
Sincronizando com um repositório do CVS
Criando uma localização do repositório do CVS
Registrando saída de um projeto de um repositório do CVS
Substituindo os recursos no Workbench
Compartilhando um novo projeto utilizando o CV
Sincronizando com o repositório
Atualizando
Resolvendo conflitos
Mesclando a partir de uma ramificação
Consolidando