De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Usando cvs - Concurrent Version System

Colaboração: Jairo Willian Pereira

Data de Publicação: 07 de Dezembro de 2004

Neste mini-how-to, será apresentado às diversas interfaces de comunicação no ambiente cvs (Concurrent Version System). Neste primeiro documento, será demonstrado os principais comandos utilizados em modo client, neste caso, baseado no ambiente RedHat / Fedora.

01 - Linux, Fedora & similares

A maioria das distribuições já instala o cvs por padrão. Depois de instalado, normalmente aparecem dois utilitários no sistema, sendo: cvs - a ferramenta de acesso, que é tanto cliente como servidor. cvsbug - utilizado para envio de bugs para a equipe de desenvolvimento CVS

O CVS é baseado e totalmente compátivel com seu antecessor, o RCS (Revision Control System) e é recomendado para qualquer tipo de projeto que envolva diversas pessoas trabalhando ao mesmo tempo, e em alguns casos (não recomendado), no mesmo documento. Para saber se o CVS encontra-se já instalado em seu sistema, execute:

  # rpm -qi cvs
  Name        : cvs                           Relocations: (not relocateable)
  Version     : 1.11.5                        Vendor: PLD
  Release     : 1                             Build Date: Seg 20 Jan 2003
  21:37:59 BRST
  Install date: Qua 29 Jan 2003 09:42:13 BRST Build Host: ep09.kernel.pl
  Group       : Desenvolvimento/Ferramentas   Source RPM: cvs-1.11.5-
  1.src.rpm
  Size        : 1513857                       License: GPL
  Packager    : PLD bug tracking system ( http://bugs.pld.org.pl/ )
  URL         : http://www.cyclic.com/
  Summary     : Um sistema de controle de versões.

Se nada for encontrado, teremos como retorno o próprio prompt da shell sem nenhuma informação adicional. Para instalação, podemos baixar os pacotes da última versão a partir da URL de https://www.cvshome.org, instalá-lo a partir do próprio CD de instalação do RH (normalmente fica do CD#2), ou fazer o download a partir dos diversos sites da categoria (rpmfind, freshmeat.). A instalação em modo cliente, não requer muitos ajustes, veja os processos abaixo:

  # mount /dev/cdrom /mnt/cdrom
  # rpm -i /mnt/cdrom/RedHat/RPMS/cvs-1.11.1p1-3.i386rpm   (ou)
  # rpm -Uvh /mnt/cdrom/RedHat/RPMS/cvs-1.11.1p1-3.i386rpm

Com o CD-ROM montado, devemos rodar o rpm para a instalação. Se o pacote já estiver na máquina, basta trocar o caminho destino do rpm para a localização do pacote na máquina em questão. A maioria das distribuições já opera com o apt-get, e se esse for o seu caso:

  # apt-get update && apt-get install cvs      (ou)
  # emerge install cvs                   (usuários Gentoo Linux)

02 - Entendendo repositórios & módulos

Os repositórios podem conter diversos módulos, sendo que cada módulo representa um projeto em separado para o servidor. Observe a estrutura abaixo:

  # ls /home/cvs
  projeto1
  projeto2
  projeton

Nesse caso, cvs é o diretorio de primeiro nivel, criado para armazenar os diversos projetos existentes. Como repositórios, temos projeto1 e projeto2.

03 - Checando, instalando e/ou padronizando o acesso

Para o processo de login, inicialmente teremos que definir a variável de ambiente CVSROOT. Para ver o atual conteúdo da variável em seu sistema, digite:

  # echo $CVSROOT

Se o retorno for nulo, observe como é realizado o processo de definição:

  # export CVSROOT=:pserver:usuário@servidor.cvs.br:/repositorios

Assim, definimos o método de acesso (servidor de password local), usuário, servidor e diretórios no qual o usuário em questão deseja acessar. Se desejar que essa informação seja armazenada definitivamente, edite o arquivo /etc/profile e adicione:

  CVSROOT=":pserver:$USER@nome_ou_ip_servidor:/home/cvs/repositorio"

Algumas linhas abaixo devemos encontrar a seguinte estrutura de exportação de variáveis.

  # export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC CVSROOT

Mais uma vez, faça a inclusão da variável CVSROOT, como no exemplo acima.

04 - Conectando no servidor

Feito os ajustes do ambiente, numa shell qualquer, a seção CVS pode ser iniciada da seguinte maneira:

  # cvs login     (ou)
  # cvs -d :psever:usuário@servidor.cvs.br:/home/cvs/nome_projeto login

O servidor será contactado e uma password válida será requisitada para o usuário solicitante.

Logging in to :pserver:saddan@10.0.0.3:2401/home/cvs/repositorios CVS password:

Nesse caso específico, minha conta não tem privilégios suficientes para acessar tal estrutura. Observe:

Cannot access /home/cvs/repositorio/CVSROOT Permission denied Se tudo correr bem, estando já conectado no servidor CVS, para ter acesso a um projeto e importá-lo (baixá-lo) para seu ambiente, você precisa:

  • criar um diretório de destino (onde os projetos serão publicados);
  • mudar para o diretório em questão e
  # cvs checkout nome_projeto

De acordo com a localização passada pela variável CVSROOT e seus privilégios sobre o(s) projeto(s) requisitado(s), uma nova estrutura de diretórios deverá ser criada localmente na máquina para comportar a estrutura CVS remota. Observe o resultado do processamento, agora com um usuário habilitado para acessar o diretório desejado.

  [jack@araruta cvstest]$ cvs checkout Desenvolvimento
  cvs server: Updating Desenvolvimento
  cvs server: Updating Desenvolvimento/Apresentacoes
  U Desenvolvimento/Apresentacoes/ApresentacaoE01.ppt
  cvs server: Updating Desenvolvimento/Documentos/Projeto/Iteracoes
  U Desenvolvimento/Documentos/Projeto/Iteracoes/DiretorioParticipantes.doc
  U Desenvolvimento/Documentos/Projeto/Iteracoes/PlanoProjeto.doc
  cvs server: Updating
  Desenvolvimento/Documentos/Projeto/Iteracoes/Auxiliares
  U Desenvolvimento/Documentos/Projeto/Iteracoes/Auxiliares/Equipe.xls
  cvs server: Updating Desenvolvimento/Documentos/Projeto/2_GerenciaRiscos
  U Desenvolvimento/Documentos/Projeto/2_GerenciaRiscos/._AnaliseRiscos.doc
  U Desenvolvimento/Documentos/Projeto/2_GerenciaRiscos/MatrizRiscos.doc
  cvs server: Updating Desenvolvimento/Documentos/Projeto/3_GerenciaAmbiente
  U
  Desenvolvimento/Documentos/Projeto/3_GerenciaAmbiente/._PlanoGerenciaAmbiente.doc
  U
  Desenvolvimento/Documentos/Projeto/3_GerenciaAmbiente/PlanoGerenciaAmbiente.doc
  cvs server: Updating Desenvolvimento/Documentos/Negocio
  U Desenvolvimento/Documentos/Negocio/DocRegrasNegocio.doc
  U Desenvolvimento/Documentos/Negocio/EstudoModCasosUso.doc
  U Desenvolvimento/Documentos/Negocio/Glossario.doc
  cvs server: Updating Desenvolvimento/Documentos/3_Requisitos
  U Desenvolvimento/Documentos/3_Requisitos/Sistema/Gestor/VisaoGEIUH.doc
  ...

Toda a estrutura pertencente ao módulo (projeto) solicitado foi transferida para a máquina local. Em nosso exemplo, depois de criado um arquivo chamado test.java, faremos a transferência do mesmo para o servidor cvs.

  [jack@araruta]$ cvs import -m "importacao de arquivo de teste"
  Desenvolvimento EmpresaX release1_0
  N Desenvolvimento/test.java
  No conflicts created by this import

A opção -m adiciona comentários no arquivo de log facilitando a identificação da operação, sendo que o texto entre aspas representa o conteúdo do comentário. Depois temos o repositório, um identificador do produtor e a versão respectivamente. Para diretórios inteiros, podemos:

  # cvs import <nome_diretorio_remoto> <nome_diretorio_local> start

05 - Adicionando novos projetos ao CVS

Recordando, toda a distribuição e compartilhamento de arquivos devem ser propagados com o uso do commando import, e é sempre interessante antes de iniciar a edição de qualquer documento, realizar a sincronização da base local com a remota. Segue sintaxe do comando, no exemplo para atualização de um arquivo único.

  # cvs update test.java        (ou)
  # cvs -d :pserver:usuário@servidor.cvs.br:/home/cvs update test.java

06 - Envio, adição e remoção via de arquivos e diretórios

Depois de realizada toda a mudança pertinente no arquivo local, voce precisa pedir que o arquivo desejado seja adicionado para controle de versões, e posteriormente transferido para o servidor:

  # cvs add test.java
  cvs server: scheduling file `test.java' for addition
  cvs server: use 'cvs commit' to add this file permanently

A partir deste momento, o arquivo em questão já está sendo "marcado" para participar do processo de controle de versões, porém ainda não foi fisicamente transferido para o servidor. A transferência somente acontecesse após a execução do commit, observe:

  # cvs commit test.java

Será aberto seu editor padrão, onde poderá ser comentado o motivo das alterações ou algumas observações relevantes sobre a mudança. Saindo do editor, você deverá ver algo como:

  RCS file: /home/cvs/repositorio/Desenvolvimento/test.java,v
  done
  Checking in test.java;
  /home/cvs/repositorio/Desenvolvimento/test.java,v <-- test.java
  initial revision: 1.1
  done

Em alguns casos, é interessante a adição de diretórios num primeiro momento, e depois seu conteúdo.

  cvs add teste                           <== Adição diretório
  cvs commit -m "Adicionado" teste        <== Publicação diretório
  cvs add teste/*                         <== Adição conteúdo
  cd teste                                <== Mudando para local
  cvs commit -m "Adicionados Arquivos"    <== Publicação conteúdo

O processo de remoção deve ocorrer primeiramente na máquina local, e depois processado no servidor. Finalizado esses procedimentos, a sincronização deve ser executada.

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

07 - Analisando diferenças entre versões de arquivos

Se em algum momento precisar visualizar as diferenças entre o arquivo que está sendo editado e sua respectiva cópia no servidor, use o diff. Exemplo:

  cvs diff test.java ou
  cvs diff -u -r 1.0 -r 1.1 test.java

Vale lembrar, que os recursos do diff são processados externamente, sendo ele um utilitário unix/linux e não um recurso do próprio cvs. Assim, se o mesmo não estiver instalado (raramente isso não está na máquina), o recurso não terá efeito.

08 - Fechando uma sessão CVS

Desejando desconectar-se do servidor, usaremos:

  cvs logout ou
  cvs -d :pserver:usuário@servidor.cvs.br:/home/cvs logout

09 - Utilitários CVS & Concorrentes

Os comandos demonstrados nesse how-to, não representam 20% do potencial do programa. Esse mesmo documento não visa substituir qualquer tipo de documentação e a consulta a man-pages do programa e qualquer outra fonte de informação é incentivada. O pacote cvs-utils possui ótimas ferramentas e promove simulações (cvsdo) da maioria das operações reais do cvs, ótimo para quem está iniciando no uso do cvs.

O aplicativo cvs-up, usado em conjunto por um ou mais servidores, oferece um sistema de espelhamento de servidores (redundância), mas infelizmente trabalha em sentido unidirecional, obrigando existir um esquema servidor master - slave(s). Com cvsacl é possível implementar listas de controles de acesso ao cvs, tanto em nível de arquivos como diretórios. Há também acréscimo de alguns atributos interessantes, melhorando muito o atual ambiente cvs que fornece apenas opções de read e write baseado em arquivos. O subversion apresenta-se como um concorrente do cvs, cujas principais características está em prover soluções exatamente onde o cvs é precário. Atualmente, parece ser uma ferramenta bem mais completa e flexível, realizando "deltas" em processo bidirecional, diff de binários, além de possuir uma ferramenta própria para migração de repositórios cvs para subversion.. Se você ainda não tem uma estrutura cvs, faça um teste com o subversion!

10 - Resumo de comandos mais triviais - CVS

Embora a quantidade de recursos do programa justificasse um livro em separado (CVS Pocket Reference, Gregor N. Purdy, O'Reilly), alguns comandos adicionais que são usados com mais freqüência.

  add         Adição de arquivos/diretórios ao repositório
  annotate    Mostra linhas modificadas na última revisão
  checkout    Verifica e incorpora os fontes para edição
  commit           Checagem a partir do repositório
  diff        Mostra diferenças entre versões
  edit        Disponibiliza para edição um arquivo monitorado
  editors          Mostra que está editando um arquivo monitorado
  export           Exporta fontes, similar ao checkout (servidor-local)
  history          Mostra as ocorrências do repositório
  import           Publica fontes origem -> servidor
  init        Inicializa novo repositório, se não existir!
  log         Imprime histórico de arquivos
  login       Processo de autenticação no servidor
  logout           Desconexão do servidor cvs
  remove      Remove a entrada do repositório
  rtag        Associa um identificador simbólico para o projeto
  status           Informações gerais sobre a estrutura
  unedit           Desfaz um comando de edição
  update           Sincroniza estrutura local x remota x local
  version          Mostra versão cvs
  watch       Inicia ponto de monitoração para o arquivo/diretório
  watchers    Mostra usuários e respectivos arquivos monitorados

Tanto via linha de comando, como a partir de outros aplicativos (eclipse, maccvs, wincvs, etc...) é possível habilitar compressão durante a transferência dos dados. Isso produz um acréscimo de processamento local/servidor, mas acelera muito o processo de transferência via rede quando a quantidade de dados é significativa.

  # cvs -z 9 co cvs
  cvs server: Updating cvs
  cvs server: Updating cvs/CVSROOT
  U cvs/CVSROOT/notify
  ...

11 - Desvantagens CVS

  • Não faz diff de binários;
  • Sincronização unidirecional;
  • Costuma deixar alguns lixos no servidor, que devem ser removidos manualmente;
  • Controle de acesso baseado apenas em duas permissões: read e write

12 - Fontes adicionais de informação

13 - Finalizando

O CVS possui uma grande quantidade de recursos, diversos aplicativos e utilitários estão surgindo para melhorar a integração entre os mais diferentes ambientes/sistemas. Na próxima dica, caso haja interesse por parte dos usuários da lista (vamos comentar as dicas!!!), mostraremos como fazer a configuração do cvs em modo servidor. Apresentar alguns casos interessantes de uso, scripts de administração, facilidades, controle de acesso, alguns front-ends gráficos ([Mac/Lin/Win]CVS, Eclipse..), integração com alguns utilitários apresentados, além de uma explanação mais detalhada sobre os arquivos de controle existentes no diretório CVSROOT.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Jairo Willian Pereira