[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ next ]

Guia Foca GNU/Linux
Chapter 17 - 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.


17.1 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:

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


17.1.1 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.


17.1.2 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 (extraida 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.


17.1.3 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.


17.1.4 Características

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

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.


17.1.5 Ficha técnica

Pacote: cvs

Utilitários:


17.1.6 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.


17.1.7 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).


17.1.8 Instalação

O CVS pode ser baixado de http://www.cvshome.org/ http://www.loria.fr/~molli/cvs-index.html.

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.


17.1.9 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, Section 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.


17.1.10 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. É bastente ú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, Section 17.3 para exemplos sobre cada uma delas.


17.2 Servidor de CVS - configurando métodos de acesso ao repositório

O CVS é uma aplicação cliente/servidor, possuindo diversas maneiras de fazer o acesso seu repositório (veja Repositório, Section 17.3.1 repositórios). Estes métodos são os seguintes:

Eles são explicados em detalhes nas sub-seções a seguir.


17.2.1 local

Acessa o diretório do repositório diretamente no disco local. A vantage deste método é que não é requerido nem nome nem senha para acesso (você precisa apenas ter permissões para acesso aos arquivos que deseja trabalhar) e também não é preciso nenhuma conexão de rede.

Este método é ideal para trabalhar na máquina local ou com os arquivos administrativos do CVS existentes no diretório CVSROOT do repositório. É muito útil também para configurar outros métodos de acesso, como o pserver.

Para criar seu repositório, veja Criando um repositório, Section 17.3.2.


17.2.1.1 Configurando o método local

Para utilizar o método de acesso local, basta definir a variável CVSROOT da seguinte forma (assumindo que o repositório esteja instalado em /var/lib/cvs):

     export CVSROOT=/var/lib/cvs
     
     ou 
     
     export CVSROOT=local:/var/lib/cvs

Depois disso, basta utilizar os comandos normais do cvs sem precisar se autenticar no sistema. Veja os detalhes de utilização dos comandos de CVS após o login na seção Clientes de CVS, Section 17.5.


17.2.2 fork

Este método é semelhante ao local, mas ele "simula" uma conexão de rede com o servidor. É muito usado para fins de testes.


17.2.2.1 Configurando o método fork

Para utilizar o método de acesso fork, basta definir a variável CVSROOT da seguinte forma (assumindo que o repositório esteja instalado em /var/lib/cvs):

     export CVSROOT=fork:/var/lib/cvs

Depois disso, basta utilizar os comandos normais do cvs, sem precisar se autenticar no sistema. Veja os detalhes de utilização dos comandos do CVS após o login em Clientes de CVS, Section 17.5.


17.2.3 ext

Este método de acesso lhe permite especificar um programa externo que será usado para fazer uma conexão remota com o servidor cvs.Este programa é definido na variável CVS_RSH e caso não ela seja especificada o padrão é rsh.

Este método requer que o usuário possua um login/senha no banco de dados de autenticação /etc/passwd do servidor de destino. Suas permissões de acesso ao CVS (leitura/gravação) serão as mesmas definidas neste arquivo.

O uso do acesso criptografado via ssh é possível definindo o programa ssh na variável CVS_RSH. Veja os exemplos a seguir em Configurando o método ext, Section 17.2.3.1.

Para criar seu repositório, veja Criando um repositório, Section 17.3.2.


17.2.3.1 Configurando o método ext

Defina a variável CVSROOT da seguinte forma para utilizar este método de acesso (assumindo /var/lib/cvs como repositório):

     export CVSROOT=:ext:conta@servidor.org.br:/var/lib/cvs
     cvs login

A "conta" é uma conta de usuário existente no servidor remoto (por exemplo, gleydson) seguido do nome do servidor remoto (separado por uma "@"). Por exemplo para acessar o servidor cvs.cipsga.org.br usando a conta michelle:

     export CVSROOT=:ext:michelle@cvs.cipsga.org.br:/var/lib/cvs
     cvs checkout

OBS: A senha via método de acesso "ext" será pedida somente uma vez quando for necessário o primeiro acesso ao servidor remoto. Veja os detalhes de utilização dos comandos de CVS após o login na seção Clientes de CVS, Section 17.5. O uso mais frequente do ext é para conexões seguras feitas via ssh, feita da seguinte forma:

     export CVS_RSH=ssh
     export CVSROOT=:ext:michelle@cvs.cipsga.org.br:/var/lib/cvs
     cvs checkout

O acesso de leitura/gravação do usuário, é definido de acordo com as permissões deste usuário no sistema. Uma maneira recomendada é definir um grupo que terá acesso a gravação no CVS e adicionar usuários que possam fazer gravaçao neste grupo.

OBS1: O acesso via ssh traz a vantagem de que as senhas trafegarão de forma segura via rede, não sendo facilmente capturadas por sniffers e outros programas de monitoração que possam estar instalados na rota entre voce e o servidor.

OBS2: É possível especificar a senha na variável CVSROOT usando a sintaxe semelhante a usada no ftp:

     export CVSROOT=:ext:michelle:senha@cvs.cipsga.org.br:/var/lib/cvs

Entretanto isto não é recomendado, pois os processos da máquina poderão capturar facilmente a senha (incluindo usuários normais, caso a máquina não esteja com patches de restrições de acesso a processos configurada, que é o padrão em quase todas as distribuições de Linux).


17.2.4 pserver (password server)

Este é um método de acesso remoto que utiliza um banco de dados de usuários senhas para acesso ao repositório. A diferença em relação ao método de acesso ext é que o pserver roda através de um servidor próprio na porta 2401. O acesso dos usuários (leitura/gravação) no repositório pode ser feita tanto através do banco de dados de usuários do sistema (/etc/passwd) como através de um banco de dados separado por repositório.

A grande vantagem deste segundo método é que cada projeto poderá ter membros com acessos diferenciados; o membro x poderá ter acesso ao projeto sgml mas não ao projeto focalinux; ou o usuário y poderá ter acesso de gravação (para trabalhar no projeto focalinux) mas somente acesso de leitura ao projeto sgml.

Este é o método de acesso preferido para a criação de usuários anonimos (uma vez que o administrador de um servidor que hospede muitos projetos não vai querer abrir um acesso anônimo via ext para todos os projetos).

Também existe a vantagem que novos membros do projeto e tarefas administrativas são feitas por qualquer pessoa que possua acesso de gravação aos arquivos do repositório.


17.2.5 Configurando um servidor pserver


17.2.5.1 Ativando o servidor pserver

Para ativar o pserver (caso ainda não o tenha feito). Execute o comando dpkg-reconfigure cvs e selecione a opção Ativar o servidor pserver. Uma maneira de fazer isso automaticamente é modificando o arquivo /etc/inetd.conf adicionando a seguinte linha:

     # na Debian
     cvspserver      stream  tcp     nowait.400      root    /usr/sbin/tcpd /usr/sbin/cvs-pserver
     
     # em outras Distribuições 
     cvspserver  stream  tcp  nowait  root  /usr/bin/cvs cvs -f --allow-root=/var/lib/cvs pserver

Na Debian, o cvs é iniciado através do script /usr/sbin/cvs-pserver que checa os binários e executa o cvs para todos os repositórios especificados no arquivo /etc/cvs-pserver.conf.

Caso precise adicionar mais repositórios para acesso via pserver ou outro método de acesso, veja Criando um repositório, Section 17.3.2.


17.2.5.2 Servidor pserver usando autenticação do sistema

Para usar o banco de dados de autenticação do sistema (/etc/passwd) para autenticar os usuários remotos, primeiro tenha certeza que o servidor pserver está ativado (como descrito em Ativando o servidor pserver, Section 17.2.5.1. Repetindo o exemplo anterior, a usuária Michelle deverá ter uma conta em /etc/passwd para fazer acesso ao cvs:

     export CVSROOT=:pserver:michelle@cvs.cipsga.org.br:/var/lib/cvs
     cvs login

Será pedido a senha da usuária michelle. Entrando com a senha correta, o sistema retornará para o aviso de comando. Uma mensagem será mostrada caso a senha entrada seja incorreta. Daqui em diante, o resto da seção CVS é normal e você terá as permissões de acesso ao repositório de acordo com as suas permissões de acesso naquele diretório.

OBS1: A senha poderá ser passada junto com o login da mesma forma como o ftp. Veja a observação em Configurando o método ext, Section 17.2.3.1.

OBS2: A desvantagem do método pserver padrão é que a seção é feita em texto plano, desta forma, alguns cuidados podem ser tomados para tornar o sistema um pouco mais seguro. Um deles é dar /bin/false como shell de usuário (para desativar o login no sistema) ou usar o método de acesso descrito em Servidor pserver usando autenticação do sistema, Section 17.2.5.2 em combinação com este. Tenha conciencia das influências disso se a máquina for usada para outras tarefas, como um servidor "pop3" por exemplo.


17.2.5.3 Servidor pserver com autenticação própria

Esta forma de acesso armazena os usuários em um banco de dados próprio, não requerendo a criação de contas locais no arquivo /etc/passwd. Para criar um servidor deste tipo siga os seguintes procedimentos:

A configuração do CVS quanto ao acesso é restritiva, portanto se um nome de usuário exitir no arquivo readers e writers o que valerá será o menor nível de acesso. Vendo os exemplos acima, os usuários gleydsonm e anonymous terão somente acesso a leitura do repositório e macan, otavio, hmh, kov acesso de leitura e gravação.


17.2.6 gssapi

Quando o CVS é compilado com o suporte a Kerberos 5, ele tenta estabelecer automáticamente uma conexão segura usando este método. Este método funciona somente se o CVS estiver compilado com o suporte a kerberos (opção --with-gssapi).


17.3 Criando projetos para serem usados no CVS

Esta seção descreve todos os passos necessários para colocação de um projeto para ser desenvolvido através do CVS, os comandos do cvs, considerações a repeito dos co mandos e sua utilização através de exemplos didáticos.


17.3.1 Repositório

Um repositório CVS é o local que armazena módulos e também os arquivos administrativos (que contém permissões, etc) são armazenados em um subdiretório chamado CVSROOT.

O acesso a um repositório é feito através de parâmetros especificados na variável CVSROOT ou pela opção -d repositório do cvs. Veja Servidor de CVS - configurando métodos de acesso ao repositório, Section 17.2 para ver exemplos de métodos de acesso.

O Repositório pode conter um ou mais módulos, cada módulo representa um projeto no servidor, criado após o uso do comando import. Segue um exemplo da estrutura de um repositório CVS:

     var/lib
          |
          +- cvs
              |- CVSROOT
              |- projeto1
              +- projeto2

O subdiretório cvs é o repositóro (veja o subdiretório CVSROOT dentro dele) e os diretórios dentro dele projeto1 e projeto2 são os módulos criados através do comando cvs import ...(veja Adicionando um novo projeto, Section 17.3.6).

Para acessar o projeto do CVS, então é definido o repositório que tem permissões de acesso na variável CVSROOT e então é executado um comando (checkout, update, commit, etc) no módulo que desejamos utilizar:

     export CVSROOT=:ext:anonymous@servidor.org.br:/var/lib/cvs (<- Repositório "cvs")
     cvs checkout projeto1 (<- módulo que desejamos pegar do servidor)

Nas seções seguintes serão explicados cada um dos comandos usados para trabalhar com um projeto no cvs.


17.3.2 Criando um repositório

Para adicionar um novo repositório no sistema, edite o arquivo /etc/cvs-pserver.conf e defina o nome de cada repositório na variável CVS_PSERV_REPOS separados por espaços.

Feito isso execute o comando cvs-makerepos para que os diretórios especificados no arquivo /etc/cvs-pserver.conf sejam criados com as devidas permissões.

Para adicionar manualmente um repositório (/var/lib/cvs), execute os seguintes passos:

  1. Execute o comando cvs -d /var/lib/cvs init (para criar o repositório e os arquivos administrativos que ficam armazenados dentro de CVSROOT.
  2. Mude as permissões do diretório para sgid com: chmod 2775 /var/lib/cvs.
  3. Mude o dono/grupo com o comando: chown root.src /var/lib/cvs
  4. Opcional: caso utilize o método de acesso pserver será necessário adicinar a opção --allow-root=/var/lib/cvs na linha que inicia o servidor pserver. Este parâmetro deve ser usada para cada repositório adicionado no servidor.

A partir de agora, seu repositório já está pronto para ser utilizado.


17.3.3 Logando no servidor de CVS via pserver

Quando é usado o método de acesso pserver (pserver (password server), Section 17.2.4), é necessário fazer para ter acesso ao repositório. Por exemplo, para acessar o repositório /var/lib/cvs no servidor servidor.org.br:

     export CVSROOT=:pserver:anonymous@servidor.org.br:/var/lib/cvs
     cvs login
     
     ou 
     
     cvs -d :pserver:anonymous@servidor.org.br:/var/lib/cvs login

Então será solicitada a senha para ter acesso ao sistema. Note que toda a seção de cvs ocorre por comandos interativos que logo após concluidos retornam para o interpretador de comandos. O restante desta seção descreverá estes comandos e como utiliza-los de maneira eficiente.

OBS: O uso da variável CVSROOT torna a utilização bastante prática necessário especificar o repositório, método de acesso,etc. a todo momento que usar um comando do cvs.


17.3.4 Encerrando uma seção de CVS

Embora que não seja necessário, após o uso do cvs é recomendável executar o logout do servidor para encerrar sua conexão com a máquina remota.

     # (assumindo que a variável CVSROOT está definida)
     cvs logout
     
     ou 
     
     cvs -d :pserver:anonymous@servidor.org.br:/var/lib/cvs logout

OBS: Para os paranóicos é importante encerrar uma seção de CVS, pois ele possui alguns bugs e um spoofing pode tornar possível o uso de uma seção deixada aberta.


17.3.5 Baixando arquivos

O comando checkout (ou "co") é usado para fazer isto. Para utilizá-lo seguindo os exemplos anteriores:

     mkdir /tmp/cvs
     cd /tmp/cvs
     cvs checkout modulo
     cvs -d :pserver:anonymous@servidor.org.br:/var/lib/cvs

Será criado um subdiretório chamado modulo que contém todos os arquivos do servidor de CVS remoto. É necessário apenas que tenha acesso de leitura ao servidor de CVS para executar este comando. Você pode usar a opção -z [num] para ativar a compactação na transferência dos arquivos, isso acelera bastante a transferência em conexões lentas: cvs -z 3 checkout modulo.

Também é possível especificar apenas subdiretórios de um módulo para baixa-lo via CVS e a estrutura de diretórios criada localmente será idêntica ao do servidor remoto.


17.3.6 Adicionando um novo projeto

Use o comando cvs import para adicionar um novo projeto ao CVS. As entradas nos arquivos administrativos serão criadas e o projeto estará disponível para utilização dos usuários. Para adicionar o projeto cvsproj ao cvs:

     export CVSROOT=:ext:usuario@servidor.com.br:2401/var/lib/cvs
     cvs import /home/projetos/cvsproj nome_modulo cvsproj start

O diretório /home/projetos/cvsproj contém os arquivos que desejamos adicionar ao servidor de cvs. O parâmetro nome_modulo define o nome do subdiretório do módulo que será adicionado ao repositório. O parâmetro "start" diz para criar o módulo.


17.3.7 Sincronizando a cópia remota com a cópia local

Este comando sincroniza a cópia remota do CVS (ou arquivo) com a cópia local que está trabalhando em sua máquina. Quando se trabalha nativamente no CVS em equipe é recomendado a utilização deste comando pois alguém pode ter modificado o arquivo antes de voce, então uma incompatibilidade entre sua versão e a nova poderia causar problemas.

Supondo que tenha acabado de modificar o arquivo main.c do módulo cvsproj, então antes de fazer o commit (Enviando as mudanças para o servidor remoto, Section 17.3.8) use o update:

     cvs update main.c
     
     ou 
     
     cvs -d :ext:usuario@servidor.com.br:2401/var/lib/cvs update main.c

Após alguns segundos, sua cópia local ficará sincronizada com a cópia remota. Caso ele mostre alguma mensagem de saída, verifique o arquivo para solucionar qualquer conflito e então envie o arquivo para o servidor remoto (Enviando as mudanças para o servidor remoto, Section 17.3.8).

Você pode fazer o update de mais arquivos usando referências globais (*, ? ou []).


17.3.8 Enviando as mudanças para o servidor remoto

O comando "commit" (ou "ci"), envia as mudanças feitas nos arquivos locais para o servidor remoto. Um exemplo de commit no arquivo main.c:

     cvs commit main.c
     
     cvs commit main.?
     
     cvs commit *

O editor padrão do sistema será aberto e pedirá uma descrição das modificações para o commit. Esta descrição será usada como referência sobre as atualizações feitas em cada etapa do desenvolvimento. A mensagem também pode ser especificada usando a opção "-m mensagem", principalmente quando o texto explicando as alterações é pequeno.

Para mudar o editor de texto padrão que será usado pelo cvs, altere a variável de ambiente EDITOR ou especifique o editor que deseja usar na linha de comando com a opção "-e editor":

     cvs commit -e vi main.c

17.3.9 Adicionando um arquivo ao módulo CVS do servidor

Após criar/copiar o arquivo para seu diretório de trabalho, use o comando add para fazer isto. O arquivo será enviado ao servidor, bastando apenas executa o commit para salvar o arquivo:

     cvs add main.h
     cvs commit main.h

17.3.10 Adicionando um diretório ao módulo CVS do servidor

O método para adicionar um diretório com arquivos é semelhante ao de adicionar apenas arquivos ao cvs. O único ponto que deve se seguido é que primeiro deve ser adicionado o diretório (com o "cvs add") salvar no servidor remoto ("cvs commit") e depois adicionar os arquivos existentes dentro dele (assim como descrito em Adicionando um arquivo ao módulo CVS do servidor, Section 17.3.9). Para adicionar o diretório teste e seus arquivos no servidor cvs remoto:

     cvs add teste
     cvs commit -m "Adicionado" teste
     cvs add teste/*
     cd teste
     cvs commit -m "Adicionados" .

Os dois primeiros comandos agendam o diretório teste e fazem o commit no diretório remoto. Os dois últimos, enviam os arquivos existentes dentro deste diretório para o servidor remoto.


17.3.11 Removendo um arquivo do módulo CVS remoto

O comando para fazer isto é o "remove". Primeiro use o rm para remover o arquivo/diretório de sua cópia local, depois execute o remove seguido de commit para confirmar a remoção do arquivo:

     cvs remove main.h
     cvs commit main.h

17.3.12 Removendo um diretório do módulo CVS remoto

Para remover um diretório, primeiro remova todos os arquivos existentes dentro dele com o comando rm e salve para o servidor (seguindo os métodos descritos em Removendo um arquivo do módulo CVS remoto, Section 17.3.11). O CVS não remove diretamente diretórios vazios, uma maneira de contornar isto é usar o update ou commit seguido da opção -P para ignorar diretórios vazios. Então a cópia remota do diretório será removida do servidor:

     rm -f teste/*
     cvs remove teste/.
     cvs commit teste/.
     cd ..
     cvs checkout modulo

Depois do checkout, o subdiretório teste terá sido removido.


17.3.13 Dizendo que o módulo atual não está mais em uso

O comando "release" faz esta função. Ele não é requerido, mas caso você tenha feito modificações que ainda não foram salvas no servidor de cvs (commit), ele alertará de arquivos modificados e perguntará se deseja continuar. Registrando também o abandono das modificações no histórico do cvs. O comando pode ser acompanhado de "-d" para remover o módulo anteriormente baixado com o "commit":

     cvs release modulo
     
     cvs release -d modulo

O release retorna os seguintes códigos quando verifica que as duas cópias (local e remota) não estão sincronizadas:

U ou P
Existe uma versão nova do arquivo no repositório. Para corrigir isso, execute o comando "update".
A
O arquivo não foi adicionado ainda ao repositório remoto. Se apagar o repositório local, este arquivo não será adicionado. Para corrigir isto, executa o comando "add" do cvs.
R
O arquivo foi removido localmente, mas não foi removido do servidor remoto. Use os procedimentos em Removendo um arquivo do módulo CVS remoto, Section 17.3.11 para corrigir a situação.
M
O arquivo está modificado localmente e não foi salvo ainda no servidor. Use os procedimentos em Sincronizando a cópia remota com a cópia local, Section 17.3.7 e Enviando as mudanças para o servidor remoto, Section 17.3.8 para salvar o arquivo.
?
O arquivo está em seu diretório de trabalho mas não tem referências no repositório remoto e também não está na lista de arquivos ignorados do CVS.

17.3.14 Visualizando diferenças entre versões de um arquivo

Com o comando "diff" é possível visualizar que diferenças o arquivo que está sendo editado possui em relação ao arquivo do repositório remoto. Outra funcionalidade útil do "diff" é comparar 2 versões de arquivos do mesmo repositório CVS. Exemplos:

cvs diff main.c
Verifica as diferenças entre o arquivo main.c local e remoto.
cvs diff -u -r 1.1 -r 1.2 main.c
Mostra as diferenças em formato unificado para mostrar as diferenças entre as versões 1.1 e 1.2 do arquivo main.c.

17.3.15 Outros utilitários para trabalho no repositório

Além dos comandos do cvs descritos aqui, existem comandos no pacote cvsutils que auxiliam desde quem está aprendendo a utilizar o CVS (com o comando cvsdo para simular algumas operações de adição/remoção de arquivos) até profissionais que usam o programa no dia a dia (cvsu, cvsco, cvschroot).


17.4 Arquivos administrativos em CVSROOT

Esta seção descreve a função de cada um dos arquivos administrativos, isto pode ser útil na configuração e personalização do CVS e de seu repositório.

Para não alongar muito o capítulo, procurei colocar uma breve descrição da função de cada um deles, o comentários e exemplos existentes nos arquivos oferecem uma boa compreensão do seu conteúdo.


17.4.1 config

Este arquivo é segue os padrões do arquivos de configuração e possui alguns parâmetros que controlam o comportamento do CVS. Segue uma lista deles:

SystemAuth
Define se será utilizado a autenticação via /etc/passwd quando o método pserver for utilizado. Note que se o arquivo passwd for criado no CVSROOT, o SystemAuth será definido automaticamente para noo.

Exemplo: SystemAuth=yes.

LockDir
Especifica o diretório onde serão gravados os arquivos de lock. Caso não seja especificado, será usado o diretório do CVS.

Exemplo: LockDir=/var/lock/cvs

TopLevelAdmin
Permite criar ou não um diretório chamado CVS no root do diretório de trabalho durante o cvs checkout.
LogHistory
Utiliza opções para especificar o que será registrado nos arquivos de log do CVS.

17.4.2 modules

Especifica opções e programas externos que serão usados durante a execução de comandos no repositório CVS.


17.4.3 cvswrappers

Este arquivo define ações de controle de características de arquivos, de acordo com seu nome.

Pode ser também definidas ações através de arquivos .cvswrappers.


17.4.4 commitinfo

Define programas para fazer uma checagem baseada no diretório e dizer se o commit é permitido.


17.4.5 verifymsg

Especifica o programa usado para verificar as mensagens de log.


17.4.6 loginfo

Programa que é executado após o commit. Ele pode ser usado para tratar a mensagem de log e definir onde ela será gravada/enviada, etc.


17.4.7 cvsignore

Tudo que constar neste arquivo não será gravado (commit) no cvs. Referências globais podem ser usadas para especificar estes arquivos. Veja a info page do cvs para detalhes sober seu formato.

Pode também ser especificado através de arquivos .cvsignore.


17.4.8 checkoutlist

Especifica os arquivos que deseja manter sobre o controle do CVS que se encontram em CVSROOT. Se adicionar um script adicional, ou qualquer outro arquivo no diretório CVSROOT ele deverá constar neste arquivo.


17.4.9 history

É usado para registrar detalhes do comando history do CVS.


17.5 Clientes de CVS

Esta seção traz alguns programas cliente em modo texto/gráfico e visualizadores de repositórios via web. Eles facilitam o trabalho de controle de revisão por parte de iniciantes e flexibilidade para pessoas mais experientes, além de ter uma interface de navegação disponível para todos os interessados em fazer pesquisas no repositório.


17.5.1 cvs

Este é o cliente Unix padrão, bastante poderoso e que opera em modo texto. As explicações neste capítulo do guia assumem este cliente de cvs, então as explicações sobre sua utilização se encontra em Criando projetos para serem usados no CVS, Section 17.3 e os parâmetros de linha de comando em Opções de linha de comando, Section 17.1.10

É altamente recomendável a leitura caso deseje utilizar um cliente de cvs gráfico, pois os conceitos são os mesmos.


17.5.2 gcvs - Linux

Este é um cliente CVS em GTK+Python para Linux que interage externamente com o cliente cvs externo, possui todas as opções do cvs disponíveis através de checkboxes nas telas de comando, incluindo suporte a compactação, visualizador gráfico da árvore de releases, históricos, diffs, etc.

Sua instalação é bastante fácil, instale o programa com apt-get install gcvs e execute o programa através do menu do sistema ou do terminal, nele siga os seguinte procedimento para começar sua utilização:

  1. Defina o repositório CVSROOT através do menu Admin/Preferences. Selecione o método de acesso, entre com o login, servidor e repositório.
  2. Faça o login no sistema em: Admin, Login.
  3. A partir de agora você poderá explorer o programa e fazer uso das funções habituais do CVS. Para fazer um checkout, acesse: Create/Checkout.... Será preciso especificar o nome do diretório local e o nome do módulo que será baixado.
  4. Para selecionar um repositório para trabalho, clique no botão "Set" na parte superiora esquerda da janela de seleção de diretórios.

Após isto, explore bastante as opções do programa. Todas as funcionalidades do CVS estão organizadas entre os menus do programa. Caso não entenda bem as funções do programa, leia atentamente Criando projetos para serem usados no CVS, Section 17.3 e também não deixe de consultar detalhes na info page do cvs.

OBS: Evite a utilização do repositório local com o nome de CVS, pois ele será ocultado pelo programa.


17.5.3 WinCVS - Windows

Este é um cliente CVS em Python para Windows equivalente ao gcvs para Linux. Suas funcionalidades e recomendações são idênticas aos do gcvs. Este cliente pode ser baixado de: http://telia.dl.sourceforge.net/sourceforge/cvsgui/WinCvs13b9.zip e o Python para Windows de http://starship.python.net/crew/mhammond/downloads/win32all-148.exe.

Para sua utilização, as explicações em gcvs - Linux, Section 17.5.2 são totalmente válidas.


17.5.4 MacCVS - Macintosh (PPC)

Idêntico ao gcvs, pode ser baixado de http://telia.dl.sourceforge.net/sourceforge/cvsgui/MacCvsX-3.3a1-1.dmg.


17.5.5 viewcvs

Este é um visualizador de repositórios CVS via web, ele precisa apenas de um servidor web instalado com suporte a CGI. Para instalar, execute o comando apt-get install viewcvs e siga os passos para configurar programa. Para adequar melhor o viewcvs ao seu sistema, edite o arquivo /etc/viewcvs/viewcvs.conf.

O viewcvs possui uma interface que se parece com a navegação de um diretório de ftp, recursos como a extração de diffs coloridos entre versões de um arquivo selecionado, visualização de commits (com data, log do commit, usuário, etc.), classificação da listagem exibida.

OBS:Leve em consideração as implicações de segurança impostas por aplicativos cgi sendo executados em seu sistema. Veja Apache, Chapter 12 para explicações detalhadas sobre o assunto.


17.6 Exemplo de uma seção CVS

Nota: este exemplo é apenas didático, não foi feita nenhuma modificação real no conteúdo do repositório do dillo :-)

     # Definir o CVSROOT
     export CVSROOT=:pserver:gleydson@ima.cipsga.org.br:/var/lib/cvs
     
     # entrar no servidor
     gleydson@host:/tmp/teste$ cvs login
     Logging in to :pserver:gleydson@ima.cipsga.org.br:2401/var/lib/cvs
     CVS password: <password>
     
     gleydson@oberon:/tmp/teste$ 
     
     # Pegar o módulo "dillo do cvs"
     cvs -z 3 co dillo
     
     cvs server: Updating dillo
     cvs server: Updating dillo/CVSROOT
     U dillo/CVSROOT/checkoutlist
     U dillo/CVSROOT/commitinfo
     U dillo/CVSROOT/config
     U dillo/CVSROOT/cvswrappers
     U dillo/CVSROOT/editinfo
     U dillo/CVSROOT/loginfo
     U dillo/CVSROOT/modules
     U dillo/CVSROOT/notify
     U dillo/CVSROOT/rcsinfo
     U dillo/CVSROOT/taginfo
     U dillo/CVSROOT/verifymsg
     cvs server: Updating dillo/CVSROOT/Emptydir
     cvs server: Updating dillo/dillo
     U dillo/dillo/AUTHORS
     U dillo/dillo/COPYING
     U dillo/dillo/ChangeLog
     U dillo/dillo/ChangeLog.old
     U dillo/dillo/INSTALL
     U dillo/dillo/Makefile.am
     U dillo/dillo/Makefile.in
     U dillo/dillo/NEWS
     U dillo/dillo/README
     U dillo/dillo/aclocal.m4
     U dillo/dillo/config.h.in
     U dillo/dillo/configure
     U dillo/dillo/configure.in
     U dillo/dillo/depcomp
     U dillo/dillo/dillorc
     U dillo/dillo/install-sh
     U dillo/dillo/missing
     U dillo/dillo/mkinstalldirs
     U dillo/dillo/stamp-h.in
     cvs server: Updating dillo/dillo/doc
     U dillo/dillo/doc/Cache.txt
     U dillo/dillo/doc/Cookies.txt
     U dillo/dillo/doc/Dillo.txt
     U dillo/dillo/doc/Dw.txt
     U dillo/dillo/doc/DwImage.txt
     U dillo/dillo/doc/DwPage.txt
     ...
     
     # Modifica o arquivo do projeto
     cd /dillo/dillo/doc
     vi Cache.txt
     
     
     # Update no arquivo para atualizar a cópia local com a remota
     cvs update Cache.txt
     M Cache.txt
     
     gleydson@host:/tmp/teste
     
     # Damos o commit no arquivo
     cvs commit Cache.txt
     
     
     # Saimos do sistema
     cvs logout

[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ next ]

Guia Foca GNU/Linux

Versão 6.10 - Sunday, 03 de November de 2002
Gleydson Mazioli da Silva gleydson@cipsga.org.br