SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
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
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
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
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
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
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
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
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
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
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
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
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

Mais conteúdo relacionado

Destaque

Curso de CVS - Parte 0 - Sobre o curso
Curso de CVS - Parte 0 - Sobre o cursoCurso de CVS - Parte 0 - Sobre o curso
Curso de CVS - Parte 0 - Sobre o cursoMarden Neubert
 
CVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o CursoCVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o CursoMarden Neubert
 
Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...
Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...
Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...Marden Neubert
 
CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoMarden Neubert
 
CVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoCVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoMarden Neubert
 

Destaque (6)

Curso de CVS - Parte 0 - Sobre o curso
Curso de CVS - Parte 0 - Sobre o cursoCurso de CVS - Parte 0 - Sobre o curso
Curso de CVS - Parte 0 - Sobre o curso
 
Curso de CVS - Lab 2
Curso de CVS - Lab 2Curso de CVS - Lab 2
Curso de CVS - Lab 2
 
CVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o CursoCVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o Curso
 
Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...
Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...
Shopping UOL: Uma nova perspectiva sobre comparação de preços e seu papel no ...
 
CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - Introdução
 
CVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - AdministraçãoCVS - Slides Parte 2 - Administração
CVS - Slides Parte 2 - Administração
 

Semelhante a Gerenciamento de etiquetas e ramos no CVS

SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerTchelinux
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 
Como fazer controle de versões de dados e modelos de Machine Learning usando...
 Como fazer controle de versões de dados e modelos de Machine Learning usando... Como fazer controle de versões de dados e modelos de Machine Learning usando...
Como fazer controle de versões de dados e modelos de Machine Learning usando...Alexandre Ray
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoFelipe
 
SVN - Subversion: Guia de sobrevivência do usuário
SVN - Subversion: Guia de sobrevivência  do usuárioSVN - Subversion: Guia de sobrevivência  do usuário
SVN - Subversion: Guia de sobrevivência do usuárioFabrício Campos
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesLeandro Cavalcante
 

Semelhante a Gerenciamento de etiquetas e ramos no CVS (13)

SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael Becker
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
Lab ect 02 pt
Lab ect 02 ptLab ect 02 pt
Lab ect 02 pt
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Como fazer controle de versões de dados e modelos de Machine Learning usando...
 Como fazer controle de versões de dados e modelos de Machine Learning usando... Como fazer controle de versões de dados e modelos de Machine Learning usando...
Como fazer controle de versões de dados e modelos de Machine Learning usando...
 
Conceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de códigoConceitos e exemplos em versionamento de código
Conceitos e exemplos em versionamento de código
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Maven - Aula 03
Maven - Aula 03Maven - Aula 03
Maven - Aula 03
 
SVN - Subversion: Guia de sobrevivência do usuário
SVN - Subversion: Guia de sobrevivência  do usuárioSVN - Subversion: Guia de sobrevivência  do usuário
SVN - Subversion: Guia de sobrevivência do usuário
 
Maven
MavenMaven
Maven
 
Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
 
Git - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de VersõesGit - Sistema Descentralizado de Controle de Versões
Git - Sistema Descentralizado de Controle de Versões
 
Git
GitGit
Git
 

Gerenciamento de etiquetas e ramos no CVS

  • 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