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.
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.
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)
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.
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.
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:
# 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
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
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
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.
Desejando desconectar-se do servidor, usaremos:
cvs logout ou cvs -d :pserver:usuário@servidor.cvs.br:/home/cvs logout
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!
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 ...
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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários