Este documento descreve um laboratório sobre o uso de etiquetas, ramos e exportação de versões no CVS. O laboratório ensina como aplicar etiquetas, mover etiquetas entre revisões, criar e trabalhar em ramos, e exportar uma versão marcada com etiqueta.
1. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
Lab4-1: Aplicando Etiquetas
Objetivos
Ao final deste lab, você será capaz de:
• Aplicar uma etiqueta sobre os arquivos de um módulo.
• Mover etiquetas entre revisões de arquivos.
• Aplicar etiquetas sobre revisões em uma data específica.
• Renomear uma etiqueta.
Cenário
Este lab exercita o gerenciamento de etiquetas, o mecanismo que o CVS oferece para a marcação de
liberações.
Tarefa 1: Aplicar uma etiqueta sobre as revisões em uma cópia local
1. Certifique-se de que você tem duas áreas de trabalho para o módulo places, por exemplo,
C:Trabalhoplaces e C:Trabalhoplaces2. Vá à área de trabalho places2 e edite o arquivo
Country.java, adicionando um comentário de classe. Faça um check-in desse arquivo a partir
dessa cópia local.
2. Vá à cópia em C:Trabalhoplaces e verifique, com o comando status, que a revisão presente
na cópia local é anterior à última revisão no repositório. Veja a figura abaixo. Seus números de
revisão podem ser diferentes.
3. Vá à raiz da área de trabalho, em C:Trabalhoplaces, e aplique a etiqueta PLACES-2_1-
BETA. Observe a saída do comando. Para cada arquivo na cópia local, o comando tag indica
que a etiqueta foi aplicada.
4. Volte ao diretório onde se encontra Country.java e execute o comando log, para verificar
etiquetas e revisões desse arquivo. Observe que a etiqueta PLACES-2_1-BETA foi aplicada
sobre a revisão que estava na cópia local, 1.1.1.2, não sobre a última revisão, que era 1.2. Esse é
o comportamento padrão do comando tag: aplicar a etiqueta sobre as revisões presentes na
cópia local.
1
2. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
5. Atualize a cópia local e faça outra alteração em Country.java, adicionando mais uma linha ao
comentário. Não faça o check-in ainda. Vá novamente para a raiz do módulo e aplique a
etiqueta PLACES-2_1-BETA2, agora usando a opção –c. Veja o resultado do comando.
6. O comando tag, quando chamado com a opção –c, se recusa a criar a etiqueta se algum arquivo
do módulo foi modificado localmente. A etiqueta PLACES-2_1-BETA2 não foi aplicada.
Deixe-a assim.
Tarefa 2: Mover uma etiqueta
1. Submeta a modificação feita sobre o arquivo Country.java na última tarefa.
2. Iremos agora mover a etiqueta PLACES-2_1-BETA para a nova revisão de Country.java. Vá
à raiz da cópia local e execute novamente o comando tag, com a etiqueta PLACES-2_1-BETA.
Veja que ocorre um erro, pois a etiqueta já existe sobre o arquivo Country.java, em outra
revisão. O caractere “W” ao início da linha indica esse erro.
2
3. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
3. Use agora a opção –F com tag. Veja que o único arquivo que teve a etiqueta reaplicada foi
Country.java.
Tarefa 3: Aplicando uma etiqueta sem cópia local
1. Vá a um diretório fora da área de trabalho, por exemplo, C:. Agora aplicaremos uma etiqueta
diretamente sobre o repositório, marcando as revisões existentes em uma certa data.
2. Escolha uma data anterior às últimas modificações em arquivos como Country.java e
City.java. Por exemplo, nestas instruções, será usada a data “2005/12/11 18:00+0000”.
3. Invoque o comando rtag, aplicando a etiqueta PLACES-2_1-STABLE sobre as revisões
existentes nessa data. Não se esqueça da opção global –d, pois não estamos mais em uma área
de trabalho. Também será preciso especificar o nome do módulo.
3
4. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
4. Examine as etiquetas sobre o arquivo City.java. Note que a etiqueta marcou uma revisão
anterior. O mesmo ocorreu com Country.java.
Tarefa 4: (Desafio) Renomeando uma etiqueta
1. A equipe do projeto pediu para que você renomeie a etiqueta PLACES-2_1-BETA para
PLACES-2_1-FINAL. Atenda a solicitação da equipe.
Dica: Não existe um comando específico para renomear uma etiqueta. Use os comandos tag ou
rtag e as opções vistas no treinamento para atingir o objetivo solicitado.
4
5. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
Lab4-2: Trabalhando com Ramos
Objetivos
Ao final deste lab, você será capaz de:
• Criar ramos em um projeto CVS.
• Fazer o check-out de uma área de trabalho em um ramo.
• Submeter alterações em um ramo e entender os resultados.
• Mesclar as alterações em um ramo com o tronco de um projeto.
Cenário
Este lab é voltado para o funcionamento de ramos no CVS. Iremos criar um ramo sobre uma
etiqueta existente, utilizá-lo em uma cópia local, submeter alterações para esse ramo e verificar os
resultados. Por fim, mesclaremos as alterações neste ramo com o tronco.
Tarefa 1: Criar um ramo sobre uma etiqueta existente
Como vimos no treinamento, é uma boa prática marcar com uma etiqueta as revisões que formarão
a base de um ramo, antes de criar esse ramo. Usaremos uma etiqueta criada no lab anterior para
criar um ramo sobre as revisões marcadas por ela.
1. A partir de um diretório qualquer, por exemplo, C:, crie um ramo sobre a etiqueta PLACES-
2_1-FINAL (ou PLACES-2_1-BETA, caso você não a tenha renomeado no desafio do último
lab). O ramo será chamado places-2_2-devel. Compare com a saída a seguir.
2. Verifique que o ramo foi criado corretamente. Inspecione as etiquetas sobre o arquivos
Country.java e City.java. Note que places-2_2-devel está aplicada sobre a mesma revisão que
PLACES-2_1-FINAL. Observe também que o número do ramo já foi atribuído, de acordo com
o número da revisão marcado pela etiqueta original. Neste ponto, vale uma observação sobre o
CVS: apesar de nos referirmos ao ramo criado sobre a revisão 1.3 de Country.java com o
número 1.3.2, o comando log informa o número 1.3.0.2. Essa é apenas uma forma de se referir
ao mesmo ramo, usando um número par de elementos.
5
6. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
Tarefa 2: Criar uma nova área de trabalho sobre ramo
É comum um desenvolvedor trabalhar em dois ramos de um mesmo módulo. Criaremos uma nova
área de trabalho sobre o módulo places, apontando para o ramo criado na tarefa anterior.
1. Vá a seu diretório de trabalho (por exemplo, C:Trabalho) e faça um check-out do módulo
places, apontando para o ramo places-2_2-devel, usando a opção –r de checkout. Ela
automaticamente implica a opção –P, logo, não é preciso especificar esta. Use a opção –d, para
criar uma área de trabalho chamada places-2.2.
6
7. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
2. Inspecione o status dos arquivos Country.java e City.java. Veja as informações sobre a revisão
em uso e sobre a etiqueta aderente (“Sticky Tag”). As revisões de trabalho ainda estão no tronco
principal (1.3 e 1.7, respectivamente) porque ainda não foi criada uma revisão dentro do ramo.
Já a etiqueta aderente places-2_2-devel indica que estamos trabalhando nesse ramo.
Tarefa 3: Realizar e submeter uma alteração no ramo
1. Na área de trabalho recém-criada sobre o ramo places-2_2-devel, altere o arquivo
Country.java. Por exemplo, altere o uso de HashSet para TreeSet, nas linhas 3 e 12.
2. Efetue um check-in. Veja na figura abaixo que uma nova revisão foi criada, dentro do ramo de
número 1.3.2. Seu número é 1.3.2.1, indicando que ela é a primeira revisão do arquivo
Country.java nesse ramo.
3. Chame novamente o comando status. Veja que a revisão de trabalho (“Working revision”, isto
é, BASE) e a revisão no repositório (“Repository revision”, isto é, HEAD) mudaram. Essa visão
é exclusiva por ramo, portanto, outros ramos e o tronco principal vêem outra informação.
7
8. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
4. Execute agora o comando log para inspecionar o histórico de Country.java. Observe que a
nova revisão aparece junto com as demais. As revisões aparecem listadas por log em ordem
crescente de ramos e, dentro de um ramo, em ordem decrescente de revisões.
8
9. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
Tarefa 4: Propagar as alterações do ramo para o tronco
Agora iremos propagar as alterações feitas no ramo places-2_2-devel para o tronco do módulo
places. Antes disso, criaremos um cenário um pouco mais complexo.
1. Na área de trabalho places-2.2, altere o arquivo ReportPrinter.java, no diretório
src/java/br/portifolioti/places, mudando as strings “Países”, “Estados” e “Cidades” para o
singular. Faça o check-in.
2. Vá também à área de trabalho places, que atua sobre o tronco principal. Altere o mesmo
arquivo, mudando, na linha 35, a string “t” para “n”. Faça o check-in.
3. Veja o log desse arquivo. Repare na numeração das revisões. Um detalhe: o ramo places-2_2-
devel foi criado sobre a revisão 1.1.1.1, importada do fornecedor, pois não criamos nenhuma
revisão no tronco principal depois da importação. Apesar de a numeração parecer estranha, ela
não tem nada de diferente e pertence ao mesmo ramo que a revisão recém-criada de
Country.java.
4. Como o destino da nossa mescla é o tronco, vá à raiz da área de trabalho que atua sobre ele.
Faça um update, para garantir que não há alterações pendentes de commit ou update. Para ter
certeza de que não há nenhuma opção aderente pendente, use a opção –A. Use também –P e –d,
para limpar eventuais diretórios vazios e enxergar novos diretórios criados no repositório. Veja
a saída a seguir.
9
10. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
5. Aplique uma etiqueta sobre o tronco, para marcar seu estado antes da mescla. Use o nome
ANTES-MESCLA-2_2. Use a opção –c, para ter certeza de que não há alterações pendentes.
6. Execute a mescla. Note que a etiqueta que marca as revisões-base do ramo origem é PLACES-
2_1-FINAL, ao passo que a etiqueta do ramo em si é places-2_2-devel. Veja a saída a seguir e
perceba que o CVS realizou duas mesclas automáticas: nos arquivos ReportPrinter.java e
Country.java, exatamente os arquivos que alteramos dentro do ramo. Inspecione esses
arquivos, eles encontram-se agora modificados na cópia local. Veja que as alterações foram
corretamente propagadas, pois as mesclas tiveram sucesso.
Deve-se notar que há uma diferença entre a mescla feita sobre o arquivo Country.java e sobre
ReportPrinter.java. No caso de Country.java, a mescla não poderia gerar conflito, pois a
revisão presente no tronco principal, 1.3, era uma ancestral da revisão no ramo, 1.3.2.1. Já no
caso de ReportPrinter.java, houve modificações independentes: a revisão no tronco principal
era 1.2, enquanto que a revisão no ramo era 1.1.1.1.2.1. Portanto, aqui havia a possibilidade real
de um conflito. Como as alterações foram pequenas e distantes no arquivo, o algoritmo de
mescla automática teve sucesso.
10
11. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
7. Fique na raiz da área de trabalho, C:Trabalhoplaces, e execute um commit, propagando as
alterações geradas pela mescla. Para documentar melhor a mescla, você pode usar a opção –f,
forçando um check-in de todos os arquivos no módulo, e uma mensagem clara para a opção –m.
A opção –R também é usada, para garantir que o check-in é recursivo a todo o módulo.
11
12. CVS Avançado: Laboratório do Aluno Copyright® 2005, Marden Neubert
Lab4-3: Exportando uma Liberação
Objetivos
Ao final deste lab, você será capaz de:
• Exportar uma liberação de um projeto no CVS.
• Controlar a substituição de palavras-chave na exportação.
Cenário
Neste lab, exportaremos uma liberação já marcada de nosso projeto. Usaremos as opções de
controle de substituição de palavras-chave para que os arquivos exportados contenham somente
valores, não nomes de palavras-chave.
Tarefa 1: Exportar uma liberação marcada do projeto
1. Vá ao diretório onde os arquivos-fontes são armazenados em seu ambiente, por exemplo,
C:Fontes. Esse diretório não é uma área de trabalho.
2. Exporte a liberação marcada pela etiqueta PLACES-2_1-FINAL, usando o modo de
substituição de palavras-chave –kv. Use a opção de comando –d para criar um diretório
chamado places-2.1-final-src. Veja a saída abaixo.
3. Inspecione os arquivos no diretório places-2.1-final-src. Note que não existem diretórios CVS
sob esse diretório. Veja o conteúdo do arquivo City.java, especificamente a linha de comentário
contendo “@version”. Observe que a palavra-chave foi substituída por apenas seu valor,
desaparecendo os caracteres “$”.
12