Guia do Linux/Avançado/CVS/Introdução ao CVS
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 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
[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.