Guia do Linux/Avançado/CVS/Introdução ao CVS

Origem: Wikilivros, livros abertos por um mundo aberto.

Introdução ao CVS[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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 [ch-d-cripto.html#s-d-cripto-sniffer Sniffer, Seção 20.2] 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[editar | editar código-fonte]

Pacote: cvs

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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 cvs-doc.


Iniciando o servidor/reiniciando/recarregando a configuração[editar | editar código-fonte]

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 [ch-rede.html#s-rede-servicos-inetd-c /etc/inetd.conf, Seção 4.7.2.1] 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[editar | editar código-fonte]

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 [#s-s-cvs-p Criando projetos para serem usados no CVS, Seção 17.3] para exemplos sobre cada uma delas.