Universidade Estadual de Campinas CVS - Concurrent Version System Eduardo Robinson Paganeli Universidade Estadual de Campinas UNICAMP 1
Sumário Módulo 1 Introdução ao CVS...3 Visão geral...4 Vantagens...6 Arquitetura do CVS...7 O repositório...8 Revisões...11 Tags...12 Branching and merging...13 Módulo 2 Administração do CVS...15 Obtendo e Instalando o CVS...16 Criando um repositório...17 Configurando o servidor...18 Criando grupo e usuário...22 Arquivo de senhas...23 Acesso somente-leitura (read-only)...24 Exercicio 1...25 Módulo 3 Comandos básicos...26 O comando CVS...27 Login...28 Import...29 Checkout...30 Update...31 Commit...32 Diff...33 Release...34 Add...35 Remove...36 Status...37 Exercicio 2...38 Módulo 4 Dicas...39 Interface gráfica...40 Referências...41 Coordenação do Programa...42 Universidade Estadual de Campinas UNICAMP 2
Módulo 1 Introdução ao CVS CVS Concurrent Version System Módulo 1 Introdução ao CVS Universidade Estadual de Campinas UNICAMP 3
Visão geral CVS - Cuncurrent Version System é um sistema de controle de versões de código fonte de programas. Este sistema mantém um histórico das alterações feitas nos programas Podemos recuperar versões mais antigas do código para descobrir erros introduzidos durante o desenvolvimento Podemos manter uma lista de comentários associados às versões do código para não perdermos contexto das mudanças Às vezes queremos saber exatamente o que foi mudado de uma versão a outra do programa Ajuda a evitar conflitos em código desenvolvido no acesso simultâneo entre uma equipe de desenvolvedores Visão geral CVS - Cuncurrent Version System é um sistema de controle de versões de código fonte de programas. Este sistema mantém um histórico das alterações feitas nos programas Podemos recuperar versões mais antigas do código para descobrir erros introduzidos durante o desenvolvimento Podemos manter uma lista de comentários associados às versões do código para não perdermos contexto das mudanças Às vezes queremos saber exatamente o que foi mudado de uma versão a outra do programa Ajuda a evitar conflitos em código desenvolvido no acesso simultâneo entre uma equipe de desenvolvedores Universidade Estadual de Campinas UNICAMP 4
Visão geral CVS não faz: Substituição de um gerenciamento de projeto Substituição da comunicação entre os desenvolvedores Controle sobre as mudanças Construção de sistemas CVS não faz: Substituição de um gerenciamento de projeto (O líder de projeto deve conversar freqüentemente com os desenvolvedores certificando que todos estão cientes do planejamento). Substituição da comunicação entre os desenvolvedores (Os desenvolvedores precisam se comunicar sobre as alterações nos códigos para evitar conflitos que possam atrasar o desenvolvimento do projeto). Controle sobre as mudanças. (O correto é gerar um banco de dados de bugs relatados e o estado em que cada um se encontra). Construção de sistemas. (A estrutura do diretório e arquivo é feita pelo desenvolvedor, o CVS só armazenamento). Universidade Estadual de Campinas UNICAMP 5
Vantagens Vantagens de se utilizar o CVS: Armazenar as diferenças entre versões em um único arquivo Auxiliar grupos de desenvolvedores no mesmo projeto Restaurar facilmente as versões antigas Ajudar a manter a história do desenvolvimento Vantagens O CVS armazena apenas as diferenças entre versões em um único arquivo, de uma forma inteligente. Outra vantagem do CVS é auxiliar grupos de desenvolvedores trabalhando em um mesmo projeto, sendo que cada um trabalhe no seu próprio diretório e o sistema CVS se encarregue de unir todos quando o trabalho estiver pronto. O CVS ajuda a manter a história do desenvolvimento, através de uma LOG de mudanças, seus autores, datas e diferenças entre as versões. Universidade Estadual de Campinas UNICAMP 6
ArquiteturadoCVS Arquitetura do CVS O desenho mostra que os desenvolvedores podem trabalhar simultaneamente com o repositório, trazendo uma cópia do módulo para o diretório de trabalho, fazer as alterações devidas e mandar atualizar o repositório. O repositório por sua vez faz um gerenciamento através de seus arquivos de controle. Universidade Estadual de Campinas UNICAMP 7
O repositório O repositório armazena cópias completas de todos os arquivos e diretórios que estão sob seu controle. Os arquivos no repositório não são acessados diretamente: Comandos do CVS são utilizados para acessar o repositório e gerar cópias em um diretório de trabalho Usar os comandos do CVS para enviar as mudanças do diretório de trabalho para o repositório O repositório pode estar na máquina local ou em uma máquina remota. O repositório O repositório armazena cópias completas de todos os arquivos e diretórios que estão sob seu controle. Os arquivos no repositório não são acessados diretamente: Comandos do CVS são utilizados para acessar o repositório e gerar cópias em um diretório de trabalho Usar os comandos do CVS para enviar as mudanças do diretório de trabalho para o repositório O repositório pode estar na máquina local ou em uma máquina remota. Universidade Estadual de Campinas UNICAMP 8
O repositório O repositório é dividido em duas partes: CVSROOT contém arquivos administrativos dos CVS Outros Diretórios contém módulos definidos pelos desenvolvedores /usr local repcvs CVSROOT Diretório contendo arquivos administrativos tc CVS Arquivos do código outro-programa fonte do módulo curso O repositório é dividido em duas partes: CVSROOT contém arquivos administrativos dos CVS. Outros Diretórios contém módulos definidos pelos desenvolvedores. Universidade Estadual de Campinas UNICAMP 9
O repositório Cada arquivo sob controle do CVS tem um history files (nomes terminados com,v ) São arquivos chamados de RCS files Variável de ambiente $CVSROOT CVSROOT=/usr/local/repcvs tc Makefile,v driver.c,v parser.c,v Cada arquivo sob controle do CVS tem um history file, são nomes terminados com,v. São arquivos chamados de RCS files. Universidade Estadual de Campinas UNICAMP 10
Revisões Cada revisão de um arquivo tem um número de revisão único. Um número de revisão tem a forma 1.1, 1.2, 1.3.2.2 ou 1.3.2.2.4.5. Por padrão a primeira revisão é sempre 1.1. Um número de revisão sempre tem um par de números decimais separados por ponto. 1.1 1.2 1.3 1.4 1.5 Revisões Cada revisão de um arquivo tem um número de revisão único. Esse número de revisão tem a seguinte forma 1.1, 1.2, 1.3.2 ou 1.3.2.2.4.5. Os números de revisão estão sempre tem um par de números decimais separados por ponto e por padrão a primeira revisão é sempre 1.1. Universidade Estadual de Campinas UNICAMP 11
Tags Tag é um nome simbólico para apelidar um conjunto de projetos ou um release do software. rel-1_9 1.9 Tag Release do software Um tag deve sempre começar com uma letra Pode conter dígitos - ou _ Tags Tag é um nome simbólico para apelidar um conjunto de projetos ou um release de software. Para se criar um nome de tag deve ser criado uma conversão, evitando possíveis conflitos na programação. Nomes de tag devem começar com uma letra maiúscula ou minúscula, podendo conter letras e dígitos especial como - ou _ Universidade Estadual de Campinas UNICAMP 12
Branching and merging Branch é quando o CVS isola as alterações em uma linha separada de desenvolvimento. Merging é quando o CVS move as alterações feitas de um branch para o tronco principal. Merging 1.1 1.2 1.3 1.4 1.5 Tronco principal 1.3.1.1 1.3.1.2 1.3.2.2 Branch Branching and merging O CVS permite isolar as alterações e linhas separadas de desenvolvimento. Quando ocorre essa mudança em um ramo (branch) não é visualizado no tronco principal ou em outras ramificações (branches). Também podemos mover mudanças de um ramo (branch) para outro ou para o tronco principal através do agrupamento (merging). Universidade Estadual de Campinas UNICAMP 13
Branching and merging Exemplo programa java desenvolvimento A figura ilustra o funcionamento de um esquema de versionamento de um determinado arquivo chamado arquivo.java.a cada efetivação (commit) uma nova revisão é gerada. Podemos abrir uma determinada correção numa certa revisão (branch) enquanto o desenvolvimento desta classe continua. Na revisão 1.3 apelidamos através da tag BUILD_0_0 uma revisão para testes. Supondo que a versão que vai para a produção seja a 1.9, apelidamos através da tag ACAD_1_0 que esta é a versão de produção. Universidade Estadual de Campinas UNICAMP 14
Módulo 2 Administração do CVS CVS Concurrent Version System Módulo 2 AdministraçãodoCVS Universidade Estadual de Campinas UNICAMP 15
Obtendo e instalando O código fonte do CVS pode ser encontrado em: http://ximbiot.com/ Recomenda-se baixar a última versão estável (stable) dos fontes. Procedimento de compilação e instalação do CVS: # tar -xzvf cvs-1.11.21.tar.gz # cd cvs-1.11.21 #./configure #make # make install Obtendo e Instalando o CVS O mesmo pacote CVS contém o código do servidor e cliente, portanto, não há um procedimento diferente de instalação para cada um destes componentes. É recomendado que se instale a última versão estável (stable). O código fonte do CVS pode ser encontrado em http://ximbiot.com/cvs/cvshome/ Será utilizada a versão cvs-1.11.21 Procedimento de compilação e instalação do CVS: # tar xvfz cvs-1.11.21.tar.gz # cd cvs-1.11.21 #./configure #make #makeinstall O CVS também pode ser instalado via pacote com o comando: # apt-get install cvs Por padrão, o arquivo executável do CVS fica no diretório /usr/local/bin/cvs. Para verificar se a instalação ocorreu com sucesso utilize o comando: # cvs version Universidade Estadual de Campinas UNICAMP 16
Criando um repositório Para criar um repositório, executar o comando cvs init. $ cvs d /usr/local/repcvs init diretório caminho O comando cria um repositório vazio, com arquivos administrativos para o CVS dentro do subdiretório CVSROOT. O comando nunca sobre-escreve um repositório já existente. Criando um repositório Para criar um repositório, devemos rodar o comando cvs init. $ cvs d /usr/local/repcvs init diretório caminho Esse comando cria um repositório vazio, gerando um subdiretório CVSROOT com arquivos de controle utilizados pelo CVS. O comando nunca sobre-escreve qualquer arquivo existente no repositório, evitando que danifique um repositório já ajustado. Universidade Estadual de Campinas UNICAMP 17
Configurando o servidor Criando a variável de ambiente $CVSROOT. Para usuários que utilizam shells csh e tcsh incluir a seguinte linha no arquivo.cshrc ou.tcshrc setenv CVSROOT /usr/local/repcvs Já os usuários do shell sh e bash incluir as seguintes linhas no arquivo.profile ou.bashrc CVSROOT=/usr/local/repcvs export CVSROOT Configurando o servidor Criando a variável de ambiente $CVSROOT. Para usuários que utilizam shells csh e tcsh incluir a seguinte linha no arquivo.cshrc ou.tcshrc. setenv CVSROOT /usr/local/repcvs Já os usuários do shell sh e bash incluir as seguintes linhas no arquivo.profile ou.bashrc. CVSROOT=/usr/local/repcvs export CVSROOT Universidade Estadual de Campinas UNICAMP 18
Configurando o servidor Adicionando o grupo cvs no sistema operacional, com o comando: # groupadd cvs Alterando o grupo e a permissão do repositório, com o comando: # cd /usr/local/repcvs # chgrp R cvs. # chmod ug+rwx. CVSROOT É recomendado definir um grupo para acessar o CVS, para controlar permissões de acesso ao repositório. Adicione o grupo cvs no sistema operacional, com o comando: # groupadd cvs Alterando o grupo e a permissão do repositório, com o comando: # cd /usr/local/repcvs # chgrp R cvs. # chmod ug+rwx. CVSROOT Universidade Estadual de Campinas UNICAMP 19
Configurando o servidor Configurando o servidor para autenticação de senha. Acrescentar o serviço pserver: Por padrão é utilizado a porta 2401 No arquivo /etc/services cvspserver 2401/tcp No arquivo /etc/initd.conf cvspserver stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/local/repcvs pserver Configurando o servidor para autenticação de senha deve acrescentar o serviço pserver no inetd ou xinitd, depende do sistema operacional. Acrescentar a seguinte linha no arquivo /etc/inetd.conf : cvspserver stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/local/repcvs pserver A opção alow-root especifica o diretório CVSROOT. Se um cliente se conectar em um diretório diferente será impedido. Se o xinetd exigir um nome de serviço simbólico, acrescentar a seguinte linha no arquivo /etc/services : cvspserver 2401/tcp Universidade Estadual de Campinas UNICAMP 20
Configurando o servidor No arquivo /etc/xinetd.d/cvspserver service cvspserver { port = 2401 socket_type = stream protocol = tcp wait = no user = root passenv = PATH server = /usr/local/bin/cvs server args = -f --allow-root=/usr/local/repcvs pserver } Reiniciar o serviço através do comando: # /etc/init.d/xinetd reload Dentro do diretório /etc/xinetd.d criar um arquivo para o serviço com o nome cvspserver, contendo os seguintes valores: service cvspserver { port = 2401 socket_type = stream protocol = tcp wait = no user = root passenv = PATH server = /usr/local/bin/cvs server_args = -f --allow-root=/usr/local/repcvs pserver } Nota: Se cvspserver estiver definido no /etc/services, a linha port = poderá ser omitida. Reiniciar o serviço através do comando: # /etc/init.d/xinetd reload Universidade Estadual de Campinas UNICAMP 21
Criando grupo e usuário Definir um grupo e um usuário dedicado para acesso ao repositório CVS. # groupadd curso # useradd c Usuário para acesso ao CVS d /home/joao g curso G cvs,curso s /bin/false joao # passwd joao Criando grupo e usuário Recomenda-se definir um grupo e um usuário dedicado para acesso ao repositório CVS. Este grupo deve ser criado no servidor que hospedará o repositório de dados. # groupadd curso # useradd c Usr. para o CVS d /home/joao g curso G cvs,curso s /bin/false joao #passwdjoao Universidade Estadual de Campinas UNICAMP 22
Arquivo de senhas O arquivo de senhas para acessar o CVS deve ser criado dentro do subdiretório CVSROOT. No arquivo /usr/local/repcvs/cvsroot/passwd <cvsuser>:<crypt-passwd>:<sysuser> usuário no sistema operacional senha criptografada usuário para utilizar o login Arquivo de senhas Criar as contas e senhas no repositório do novo projeto dentro do arquivo $CVSROOT/CVSROOT/passwd, cujas linhas são formadas por: <cvsuser>:<crypt-passwd>:<sysuser> cvsuser é nome do usuário que fará o login no repositório crypt-passwd é a senha criptografada do próprio sistemas operacional sysuser é o nome do usuário no sistema operacional Para o acesso anônimo crie a seguinte linha: Anonymous::cvsanon Universidade Estadual de Campinas UNICAMP 23
Acesso somente-leitura (read-only) Para forçar acesso read-only para alguns usuários, deve ser criado dentro do subdiretório CVSROOT. No arquivo /usr/local/repcvs/cvsroot/readers O formato do arquivo é um nome de usuário por linha. Geralmente, o usuário anonymous é colocado nesse arquivo. Acesso somente-leitura (read-only) É possível dar permissões de somente-leitura ao repositório utilizando o servidor de autenticação de senhas. Um usuário com permissão de leitura pode apenas executar comandos do CVS que não modifique os arquivos do repositório, exceto arquivos como histórico, por exemplo. Existem duas maneiras de especificar esse acesso, por inclusão e exclusão. Inclusão: O método de inclusão significa criar os nomes dos usuários que terão acesso de leitura no arquivo $CVSROOT/CVSROOT/readers, separado somente por uma nova linha no final de cada nome. Geralmente, o usuário anonymous é colocado nesse arquivo. Exclusão: O método de exclusão significa listar todos os usuários que tem acesso de escrita e todos que tem acesso de leitura no arquivo o $CVSROOT/CVSROOT/writers, utilizando a mesma formatação do arquivo readers. Nota: Se um mesmo nome de usuário estiver listado nos dois arquivos haverá um conflito fazendo com que o CVS utilize a opção mais segura ao repositório que é de dar acesso somente-leitura ao usuário. Universidade Estadual de Campinas UNICAMP 24
Exercício Objetivo: Instalar o CVS em seu computador Criar grupo e usuário dedicado para o acesso ao repositório Criar o repositório Configurar o servidor Exercicio 1 Objetivo: Instalar o CVS em seu computador Criar grupo e usuário dedicado para o acesso ao repositório Criar o repositório Configurar o servidor Universidade Estadual de Campinas UNICAMP 25
Módulo 3 Comandos básicos CVS Concurrent Version System Módulo 3 Comandos básicos Universidade Estadual de Campinas UNICAMP 26
O comando CVS O formato geral do comando CVS é: cvs [cvs-opções] subcomando [sub-opções] [args] cvs-opções são opções gerais do comando sub-opções são opções do subcomando $ cvs q commit m mensgem Opçãodocvs Opçãodocommit O comando CVS O formato geral do comando CVS é: cvs [cvs-opções] subcomando [sub-opções] [args] cvs-opções são opções gerais do comando sub-opções são opções do subcomando subcomando pode ser: checkout, commit, update... $ cvs q commit m mensgem Opção do cvs Opção do commit Universidade Estadual de Campinas UNICAMP 27
Login Logando no servidor usando o cliente com autenticação de senhas. $ cvs d :pserver:joao@lab.ccuec.unicamp.br:/usr/local/repcvs login CVS password: ********* pserver é o protocolo joao é o usuário criado no arquivo passwd lab.ccuec.unicamp.br é o host do repositório /usr/local/repcvs é o caminho do repositório Login Logando no servidor usando o cliente com autenticação de senhas. $ cvs d :pserver:joao@lab.ccuec.unicamp.br:/usr/local/repcvs login CVS password: ********* pserver é o protocolo joao é o usuário criado no arquivo passwd lab.ccuec.unicamp.br é o host do repositório /usr/local/repcvs é o caminho do repositório Universidade Estadual de Campinas UNICAMP 28
Import Importando os arquivos fontes para o repositório com o comando cvs import. $cd/sistemas/projeto $ cvs import m Estrutura de diretório criada projeto joao start projeto é o nome do módulo joao é o vendor (autor) -m é a mensagem de log do comando start é a tag release Import Importando os arquivos fontes para o repositório com o comando cvs import. $ cd /sistemas/projeto $ cvs import m Estrutura de diretório criada projeto joao start projeto é o nome do módulo joao é o vendor (autor) -m é a mensagem de log do comando start é a tag release Universidade Estadual de Campinas UNICAMP 29
Checkout Extraindo os fontes do repositório para um diretório de trabalho com o comando cvs checkout. $cd/work $ cvs checkout projeto projeto é o nome do módulo Checkout Extraindo os fontes do repositório para um diretório de trabalho com o comando cvs checkout. $cd/work $ cvs checkout projeto projeto é o nome do módulo Universidade Estadual de Campinas UNICAMP 30
Update Atualizando os arquivos no diretório de trabalho com o conteúdo mais recente do repositório, utilizando o comando cvs update. $ cvs update projeto projeto é o nome do módulo. Update Atualizando os arquivos no diretório de trabalho com o conteúdo mais recente do repositório, utilizando o comando cvs update. $ cvs update projeto projeto é o nome do módulo Universidade Estadual de Campinas UNICAMP 31
Commit Enviando os arquivos modificados no diretório de trabalho para o repositório com o comando cvs commit. $ cvs commit m Alterado a conexão do banco admin.php admin.php é o arquivo alterado -m éamensagemdelogdocomando Commit Enviando os arquivos modificados no diretório de trabalho para o repositório com o comando cvs commit. $ cvs commit m Alterado a conexão do banco admin.php Checking in admin.php; /usr/local/repcvs/projeto/admin.php,v <-- admin.php new revision: 1.2; previous revision: 1.1 done admin.php é o arquivo alterado -m é a mensagem de log do comando Universidade Estadual de Campinas UNICAMP 32
Diff Verificando as diferenças com o comando cvs diff. $ cvs diff admin.php Diff Verificando as diferenças entre a versão do repositório e o que está no diretório de trabalho, com o comando cvs diff. $ cvs diff admin.php depois de verificar as diferenças execute um commit do arquivo alterado para gerar um histórico no repositório Universidade Estadual de Campinas UNICAMP 33
Release Limpando o diretório de trabalho com o comando cvs release. $ cvs release d projetos -d remove os arquivos do diretório de trabalho Release Limpando o diretório de trabalho com o comando cvs release. $cvsrelease dprojetos You have [1] altered files in this repository Are you sure you want to release (and delete) directory projetos : y -d remove os arquivos do diretório de trabalho Antes de executar esse comando verifique se todas as modificações foram enviadas para o repositório Universidade Estadual de Campinas UNICAMP 34
Add Adicionando arquivos ao módulo no repositório com o comando cvs add. $ cvs add locale.php opção -m pode ser utilizada para descrever o novo arquivo Depois execute o comando $ cvs commit locale.php Add Adicionando arquivos ao módulo no repositório com o comando cvs add. $ cvs add locale.php opção -m pode ser utilizada para descrever o novo arquivo Depois execute o comando $ cvs commit locale.php Universidade Estadual de Campinas UNICAMP 35
Remove Removendo arquivos do módulo do repositório com o comando cvs remove. $ cvs remove locale.php opção -m pode ser utilizada para descrever a remoção Depois execute o comando $ cvs commit locale.php Remove Removendo arquivos do módulo do repositório com o comando cvs remove. $ cvs remove locale.php opção -m pode ser utilizada para descrever a remoção Depois execute o comando $ cvs commit locale.php Universidade Estadual de Campinas UNICAMP 36
Status Mostrando o estado que se encontra os arquivos com o comando cvs status. $ cvs status adimin.php Status Mostrando o estado que se encontra os arquivos com o comando cvs status. $ cvs status admin.php ================================================ File: admin.php Status: Up-to-date Working revision: 1.2 Tue Mar 23 18:30:00 2006 Repository revision: 1.2 /usr/local/repcvs/projeto/admin.php,v Sticky Tag: (none) Sticky Date: (none) Sticky Options: (none) Universidade Estadual de Campinas UNICAMP 37
Exercício Objetivo: Importar o projeto para o repositório Trazer os fontes para o diretório de trabalho Fazer mudanças no arquivo Efetivar essas mudanças no repositório Verificar as diferenças Exercicio 2 Objetivo: Importar o projeto para o repositório Trazer os fontes para o diretório de trabalho Fazer mudanças no arquivo Efetivar essas mudanças no repositório Verificar as diferenças Universidade Estadual de Campinas UNICAMP 38
Módulo 4 Dicas CVS Concurrent Version System Módulo 4 Dicas Universidade Estadual de Campinas UNICAMP 39
Interface gráfica Interface gráfica para o CVS Para Windows: WinCVS (http://www.wincvs.org/) TortoiseCVS (http://www.tortoisecvs.org/) Para Linux: gcvs (http://www.gcvs.org/) LinCVS (http://lincvs.org/) Interface gráfica Utilizar uma ferramenta gráfica para acessar o repositório CVS, de forma simples e fácil de usar. Para interface Windows: Para Linux: WinCVS site: (http://www.wincvs.org/) TortoiseCVS site: (http://www.tortoisecvs.org/) gcvs site: (http://www.gcvs.org/) LinCVS site: (http://lincvs.org/) Universidade Estadual de Campinas UNICAMP 40
Referências http://ximbiot.com/cvs/cvshome http://www.loria.fr/~molli/cvs-index.html http://en.wikipedia.org/wiki/concurrent_versions_system http://www.ccuec.unicamp.br/ead Referências Portal CVS Home http://ximbiot.com/cvs/cvshome The CVS Bubbles http://www.loria.fr/~molli/cvs-index.html Concurrent Versions System - From Wikipedia, the free encyclopedia http://en.wikipedia.org/wiki/concurrent_versions_system Portal do EAD/CCUEC http://www.ccuec.unicamp.br/ead Universidade Estadual de Campinas UNICAMP 41
Coordenação do Programa Patrocinadores Parceiros Universidade Estadual de Campinas UNICAMP 42