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 irã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. Da mesma forma, quando desejam obter o trabalho mais recente disponível, eles atualizam as áreas de trabalho para as alterações na ramificação. Assim, a ramificação está constantemente sendo alterada, avançada conforme os membros das equipes submetem novo trabalho.
A ramificação efetivamente representa o estado atual do projeto. Em qualquer ponto, um membro da equipe pode atualizar essas áreas de trabalho da ramificação e saber que elas 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 o anterior, 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 gabarito otimista é aquele no qual qualquer membro da equipe possa fazer alterações em qualquer recurso ao qual 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, os recursos não existem isoladamente: normalmente, eles contêm dependências implícitas ou explícitas em 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:
Iniciar a atualização: Antes de começar o trabalho, atualize os recursos na área 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.
Fazer alterações: Trabalhe localmente no Workbench criando novos recursos, modificando recursos existentes, salvando localmente durante o trabalho.
Sincronizar: Quando estiver pronto para consolidar o trabalho, sincronize-se com o repositório:
Atualizar: Examine alterações de entrada e as inclua no workbench local. Isso permite determinar se há alterações que podem afetar a integridade do que você está prestes a consolidar. Resolver conflitos. Reteste, 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).
Consolidar: Agora que você está certo de que as alterações estão bem integradas com o conteúdo mais recente do fluxo, consolide-as 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 capturar. Entretanto, é aconselhável que os membros da equipe esforcem-se para seguir um fluxo semelhante ao acima para verificarem se a integridade da ramificação não foi 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