Guia do Linux/Avançado/CVS/Introdução ao CVS
Introdução ao CVS
editarO 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
editarA 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
editarO 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
editarAtravé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
editarAbaixo 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
editarPacote: 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 oCVS
. Utilizado na migração desta ferramenta para oCVS
. - 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
editarPara 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
editarProblemas 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
editarO 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
editarA ú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
editarAs 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.