Capítulo 17. CVS

Índice

Introdução ao CVS
Versão
História
Contribuindo com o CVS
Características
Ficha técnica
Requerimentos de Hardware
Arquivos de log criados pelo CVS
Instalação
Iniciando o servidor/reiniciando/recarregando a configuração
Opções de linha de comando
Servidor de CVS - configurando métodos de acesso ao repositório
local
fork
ext
pserver (password server)
Configurando um servidor pserver
gssapi
Criando projetos para serem usados no CVS
Repositório
Criando um repositório
Logando no servidor de CVS via pserver
Encerrando uma seção de CVS
Baixando arquivos
Adicionando um novo projeto
Sincronizando a cópia remota com a cópia local
Enviando as mudanças para o servidor remoto
Adicionando um arquivo ao módulo CVS do servidor
Adicionando um diretório ao módulo CVS do servidor
Removendo um arquivo do módulo CVS remoto
Removendo um diretório do módulo CVS remoto
Dizendo que o módulo atual não está mais em uso
Visualizando diferenças entre versões de um arquivo
Visualizando o status de versão de arquivos
Outros utilitários para trabalho no repositório
Arquivos administrativos em CVSROOT
config
modules
cvswrappers
commitinfo
verifymsg
loginfo
cvsignore
checkoutlist
history
Clientes de CVS
cvs
gcvs - Linux
WinCVS - Windows
MacCVS - Macintosh (PPC)
viewcvs
Exemplo de uma seção CVS

Este capítulo explica os requerimentos, instalação, configuração, segurança e diversos modelos de configuração de acesso para trabalho em grupo utilizados pelo CVS.

Não tome-o como uma referência completa ao uso e configuração do cvs, a pesquisa de sua info page é muito importante.

Introdução ao CVS

O CVS (Concurrent Version Software) permite que se organizem grupos de trabalho para desenvolvimento de projetos colaborativos. Um projeto pode ser desde um programa em C, documentação em equipe, etc. O uso do CVS é recomendado para qualquer desenvolvimento de projeto que tenha vários envolvidos trabalhando ao mesmo tempo.

Para cada mudança feita no programa, é pedido uma descrição dos trabalhos realizados e o sistema registra todas as modificações realizadas ao longo do desenvolvimento, permitindo voltar a uma versão anterior ou ver as mudanças entre elas facilmente.

Imagine uma situação onde você está desenvolvendo um programa de computador e após a última modificação ele para de funcionar. Com o CVS é possível ver o que foi modificado e voltar até a versão que estava funcionando para consertar o problema. No desenvolvimento de documentação e tradução o CVS também desempenha um papel importante, pois com ele o tradutor pode ver o que foi modificado entre a versão do documento original que ele usou para tradução e uma versão recente, traduzindo apenas as diferenças.

Uma seção de cvs é feita de modo interativo através do comando cvs. Por exemplo:

  • logar no sistema - cvs login

  • baixar um projeto - cvs checkout projeto

Cada comando do cvs será explicado em detalhes no decorrer deste capítulo.

Versão

A versão do CVS documentada no guia é a 1.11.1. As explicações aqui certamente serão compatíveis com versões posteriores deste programa.

História

O CVS é uma substituição do sistema RCS (Revision Control System) ele possui mais recursos e foi criado sendo compatível com o RCS.

A história do CVS (extraída de sua info page) é que ele foi iniciado a partir de um conjunto de scripts shell escritos por Dick Grune que foram postados ao grupo de notícias comp.sources.unix no volume 6 de Dezembro de 1986. Na versão atual não estão mais presentes shell scripts porque muitos dos conflitos de resolução de algorítmos vem deles.

Em Abril de 1989, Brian Berliner fez o design e programou o CVS. Mais tarde, Jeff Polk ajudou Brian com o design do módulo CVS.

Contribuindo com o CVS

Através da lista de discussão info-cvs. Para se inscrever envie uma mensagem com o subject "subscribe" para info-cvs-request@gnu.org. Outra alternativa é através do grupo de noticias (newsgroup) da Usenet comp.software.config-mgm.

Características

Abaixo uma lista de características que tornam o CVS útil no gerenciamento de trabalhos em grupo:

  • Gerenciamento de projeto em equipe

  • Log de todas as alterações realizadas

  • Lock de arquivos, permitindo que somente uma determinada pessoa modifique o arquivo durante o desenvolvimento do projeto.

  • Histórico de todas as mudanças feitas, isto permite voltar a uma versão anterior em caso de problemas, e ver o que houve de errado com o código.

  • Os projetos podem ser hospedados em repositórios.

  • Podem ser criados diversas equipes de trabalho para cada repositórios, e definidos quem terá ou não acesso ao repositório individualmente. O desenvolvedor gleydson, por exemplo, podem ter acesso ao projeto x_beta e não ter acesso a projeto secret_y.

  • Permissões de acesso individuais de leitura/gravação.

  • É possível criar um usuário com acesso anônimo sem dar uma conta no sistema.

  • Pode tanto utilizar o banco de dados de contas/senhas do sistema como um banco de dados de autenticação do próprio CVS.

  • Permite utilizar diversos "métodos" de acesso ao servidor: local, pserver, ext, etc. Cada um destes métodos será descrito a seguir.

  • Permite o acesso via ssh para usuários que já possuam conta na máquina servidora. Este método garante segurança no envio da senha criptografada (veja “Sniffer” para detalhes).

  • Permite visualizar facilmente o que foi modificado entre duas versões de um arquivo.

OBS: O CVS possui algumas limitações e falhas, uma delas que mais me faz falta é um suporte a protocolo pserver via ssh que resolveria o problema de tráfego em texto plano e gerenciamento de grupos com permissões diferenciadas.

Ficha técnica

Pacote:

Utilitários:

  • cvs - Servidor/ferramenta cliente.

  • cvsbug - Envia um bug sobre o CVS para a equipe de suporte.

  • rcs2log - Converte arquivos de log do formato usado pelo RCS para o CVS. Utilizado na migração desta ferramenta para o CVS.

  • cvsconfig - Usado pela Debian para ativar/desativar o servidor pserver. Pode também ser usado o dpkg-reconfigure cvs para desativar o servidor pserver e suas características.

  • cvs-makerepos - Script da Debian que lê a lista de repositórios de /etc/cvs-pserver.conf, cria os repositórios no local apropriado, corrige as permissões do diretório e adiciona os repositórios no servidor pserver.

  • cvs-pserver - Script da Debian responsável por fazer uma inicialização mais inteligente do servidor de CVS via pserver, leitura e processamento de repositórios, etc. Normalmente ele é chamado a partir do arquivo /etc/inetd.conf.

Requerimentos de Hardware

Para executar o CVS é requerido pelo menos 3 vezes mais memória que o tamanho do maior arquivo usado pelo projeto (para realização de diffs entre as atualizações) e uma boa quantidade de espaço em disco.

Na realidade os requerimentos sobre o CVS dependem muito da aplicação que será desenvolvida. É recomendável que a máquina tenha memória suficiente para evitar o uso de swap, que degrada bastante a performance do sistema.

Arquivos de log criados pelo CVS

Problemas na inicialização do CVS são registrados no arquivo /var/log/daemon.log. Os logs de modificações feitas nos arquivos de um projeto no CVS são armazenadas no formato arquivo.extensão,v (é adicionado o ",v" ao final do arquivo para indicar que é um arquivo de controle de modificações do CVS).

Instalação

O CVS pode ser baixado de http://www.cvshome.org/.

Para pacotes Debian basta apenas executar o comando: apt-get install cvs e seguir as telas de configuração para ter o pacote CVS instalado e (opcionalmente) com o servidor sendo executado. Você poderá a qualquer momento reconfigurar o CVS executando: dpkg-reconfigure cvs.

Uma boa documentação de referência é encontrada no pacote .

Iniciando o servidor/reiniciando/recarregando a configuração

A única configuração requerida é quando o CVS é executado via pserver. Para isto, é necessária a seguinte linha no arquivo /etc/inetd.conf

cvspserver      stream  tcp     nowait.200      root    /usr/sbin/tcpd /usr/sbin/cvs-pserver

Note que o parâmetro "200" indica quantas vezes o processo CVS poderá ser executado por minuto no sistema. Caso esse número seja excedido, o serviço será desabilitado e será necessário reiniciar o servidor inetd com o comando killall -HUP inetd para reativar o servidor CVS pserver (veja “/etc/inetd.conf” capítulo do inetd para detalhes). Ajuste este valor de forma adequada ao seu servidor!

Veja o script cvs-pserver sendo executado no final da linha. Ele foi desenvolvido para lidar de forma mais inteligente com a configuração do servidor CVS pserver.

Opções de linha de comando

As seguintes opções são aceitas pelo CVS.

-z [num]

Utiliza o gzip para fazer a transferência compactada dos arquivos. O valor especificado pode ser de 0 a 9, quanto maior o número maior o nível de compactação e uso da CPU.

Exemplo: cvs -z 3 checkout teste

-q

Oculta mensagens sobre recursão de diretório durante os comandos do CVS.

-d [repositório]

Permite especificar o repositório através da linha de comando.

-e [editor]

Define qual é o editor de textos usado para registrar o texto de commits.

-n

Executa o cvs em modo "simulação" não modificando qualquer arquivo do repositório.

-t

Mostra mensagens mostrando o processo de execução de comandos do CVS. É bastante útil para aprendizado do cvs usado junto com a opção -n.

-r

Torna os novos arquivos criados somente para leitura. É a mesma coisa que especificar a variável CVSREAD.

-w

Torna os novos arquivos criados leitura/gravação que é o padrão.

-x

Utiliza criptografia para a transferência dos arquivos quando é utilizado em conjunto com o Kerberos.

Você pode obter detalhes sobre opções sobre um comando em especial do CVS (commit, checkout, etc) digitando: cvs comando --help. Veja “Criando projetos para serem usados no CVS” para exemplos sobre cada uma delas.