Blog do faraohh

Assuntos diversos, inclusive tecnologia.

Explicação de como trabalhar com subversion

leave a comment »


Autor: Marcello Henrique
Descricao: Explicação de como trabalhar com subversion
Fonte: http://code.google.com/p/svnbook-pt-br/

Legendas:
$ => usuário normal do sistema
[] => Tudo entre colchetes são comandos opcionais

Estrutura padrão de diretórios de projetos:

-<nome do projeto> (nome do projeto ou produto)
|
- trunk (Tronco, diretório base de desenvolvimento.)
|
- branches (ramos, para conter cópias de trabalho)
|
- 1.0
- 2.0
|
- tags (folhas ou releases pontuáis, que contém as versões congeladas.)
|
- v1.0.0
- v1.0.1
- v2.0.0

1. Criando um projeto (nosso projeto chama-se teste)

1.1 Fazer o checkout do projeto. (Baixar os código para sua máquina)

$svn checkout https://svn.cercomp.ufg.br/svn/teste
A teste/trunk
A teste/trunk/teste.txt
A teste/branches
A teste/tags
Gerado cópia de trabalho para revisão 3.

1.2 Entrando no projeto

$cd teste

2. Criando ramos

2.1 Fazendo um cópia do tronco para um ramo

$svn copy trunk branches/1.0
A branches/1.0

$svn commit -m "Criando cópia do /trunk para branches/1.0"
Adicionando branches/1.0
Adicionando branches/1.0/teste.txt

Commit da revisão 4.

$svn update
Na revisão 4.

3. Trabalhando em uma ramificação

3.1 Entrando na ramificação

$cd branches/1.0

3.2 Fazendo as alterações que forem necessárias

$echo -e "linha 2\n" >> teste.txt
$cat teste.txt
linha 1
linha 2

3.3 Fazendo o commit

$svn commit -m "Add linha 2, branches/1.0/teste.txt"
Enviando 1.0/teste.txt
Transmitindo dados do arquivo .
Commit da revisão 5.

3.4 Faça os testes de acordo com sua realidade, se houver erros volte ao passo 3.2 e siga adiante, sorria! ;-D.

3.5 Faça o update

$svn update
Na revisão 5.

4. Fazendo a fusão (Lembrem do Dragon Ball Z)

4.1 Indo para raiz do projeto

$cd /home/marcello/teste

4.2 Verificando os logs

$svn log
------------------------------------------------------------------------
r5 | marcello | 2008-07-16 23:22:29 -0300 (Qua, 16 Jul 2008) | 1 line

Add linha 2, branches/1.0/teste.txt
------------------------------------------------------------------------
r4 | marcello | 2008-07-16 23:20:47 -0300 (Qua, 16 Jul 2008) | 1 line

Criando cópia do /trunk para branches/1.0
------------------------------------------------------------------------
r3 | marcello | 2008-07-16 23:17:56 -0300 (Qua, 16 Jul 2008) | 1 line

Add linha 1 in trunk/teste.txt
------------------------------------------------------------------------
r2 | marcello | 2008-07-16 23:17:28 -0300 (Qua, 16 Jul 2008) | 1 line

Add trunk/teste.txt
------------------------------------------------------------------------
r1 | marcello | 2008-07-16 23:15:54 -0300 (Qua, 16 Jul 2008) | 1 line

Criando projeto.
------------------------------------------------------------------------

4.4 Fundindo a sua ramificação testada para o tronco

$svn merge https://svn.cercomp.ufg.br/svn/teste/trunk@3 https://svn.cercomp.ufg.br/svn/teste/branches/1.0@5 trunk/
U trunk/teste.txt

4.5 Commitando a fusão

$svn commit -m "Fundindo branches/marcello/trunk para trunk"
Enviando trunk/teste.txt
Transmitindo dados do arquivo .
Commit da revisão 6.

4.6 Atualizando

$svn update
Na revisão 6.

4.7 Verificando os logs

$svn log
------------------------------------------------------------------------
r6 | marcello | 2008-07-16 23:37:56 -0300 (Qua, 16 Jul 2008) | 1 line

Fundindo branches/marcello/trunk para trunk
------------------------------------------------------------------------
r5 | marcello | 2008-07-16 23:22:29 -0300 (Qua, 16 Jul 2008) | 1 line

Add linha 2, branches/1.0/teste.txt
------------------------------------------------------------------------
r4 | marcello | 2008-07-16 23:20:47 -0300 (Qua, 16 Jul 2008) | 1 line

Criando cópia do /trunk para branches/1.0
------------------------------------------------------------------------
r3 | marcello | 2008-07-16 23:17:56 -0300 (Qua, 16 Jul 2008) | 1 line

Add linha 1 in trunk/teste.txt
------------------------------------------------------------------------
r2 | marcello | 2008-07-16 23:17:28 -0300 (Qua, 16 Jul 2008) | 1 line

Add trunk/teste.txt
------------------------------------------------------------------------
r1 | marcello | 2008-07-16 23:15:54 -0300 (Qua, 16 Jul 2008) | 1 line

Criando projeto.
------------------------------------------------------------------------

5. Casos de conflito

5.1 Verificando o arquivo de conflito no ramo

$cat branches/1.0/teste.txt
linha 1
linha 2 //mexendo na linha 2 do branches/1.0/teste.txt

5.2 Commitando a ramificação para gerar o conflito

$svn commit -m "Alterando o arquivo branches/marcello/trunk/teste.txt para dar conflito"
Enviando branches/marcello/trunk/teste.txt
Transmitindo dados do arquivo .
Commit da revisão 7.

$svn update
Na revisão 7.

5.3 Alterando o tronco na mesma linha para gerar o conflito

$cat trunk/teste.txt
linha 1
linha 2 //mexendo na mesma linha 2 do trunk/teste.txt

5.4 Commitando o tronco para gerar o conflito

$svn commit -m "Alterando o arquivo trunk/teste.txt para dar conflito"
Enviando trunk/teste.txt
Transmitindo dados do arquivo .
Commit da revisão 8.

$svn update
Na revisão 8.

5.5 Vejam os logs com a armadilha pronta :-)

$svn log
------------------------------------------------------------------------
r8 | marcello | 2008-07-16 23:44:19 -0300 (Qua, 16 Jul 2008) | 1 line

Alterando o arquivo trunk/teste.txt para dar conflito
------------------------------------------------------------------------
r7 | marcello | 2008-07-16 23:43:31 -0300 (Qua, 16 Jul 2008) | 1 line

Alterando o arquivo branches/marcello/trunk/teste.txt para dar conflito
------------------------------------------------------------------------

5.6 Fazer um merge para simular o conflito

$svn merge https://svn.cercomp.ufg.br/svn/teste/trunk@7 https://svn.cercomp.ufg.br/svn/teste/branches/1.0@8 /trunk
C trunk/teste.txt

5.7 Fazendo o commit

$svn commit -m "merge braches/1.0 into trunk"
svn: Commit falhou (detalhes a seguir):
svn: Abortando commit: '.../trunk/teste.txt' continua em conflito

5.8 Resolvendo um conflito

$cd trunk

$ls
teste.txt teste.txt.mesclagem-direita.r8 teste.txt.mesclagem-esquerda.r7 teste.txt.trabalho

$cat teste.txt
linha 1
<<<<<<>>>>>> .mesclagem-direita.r8

5.9 Arrumando a bagunça segundo a nossa vontade, ficando:

linha 1
linha 2 //mexendo na linha 2 do branches/1.0/teste.txt

$svn resolved teste.txt
Estado de conflito resolvido para 'teste.txt'

$svn commit -m "merge braches/1.0 into trunk"
Enviando trunk/teste.txt
Transmitindo dados do arquivo .
Commit da revisão 9.

$svn update
revisão 9.

6. Ciclo de processo de trabalho no subversion

Minha Tradução svn-book.pdf
Revisão 116, Subtítulo: “Release Branches”

Noções prévias:
trunk = tronco, corpo
branches = ramos, braços
tags = folhas, marcas, liberações pontuáis
release = liberação

Página 95

Muitos software tem tipicamente os ciclo de vida: codificação, teste, liberação, volta a codificação. Há dois problemas neste processo. Primeiro, desenvolvedores precisam continuar escrevendo novas funcionalidades enquanto o equipe de qualidade testa a suposta versão estável do software. O trabalho não pode parar enquanto o software está sendo testando. Segundo, a equipe em muitos casos sempre suportam outras versões do software; se um bug é descoberto na última versão, é provável que exista em versões liberadas, e os usuários vão querer que você corrija sem ter que esperar por novas liberações em grande escala.

Isto pode ajudar no controle de versão. O processo típico tem esta aparência:

  • Desenvolvedores commitam todo o trabalho para dentro do trunk. Dia após dia mudaças são acrescentadas ao /trunk: novas funcionalidades correção de defeitos e outros.
  • O tronco é copiado para a “liberação” ramo. Então a equipe acredita que o software já está pronto para liberação (dizemos, uma liberação 1.0), então /trunk poderá ser copiado para /branches/1.0
  • Equipes continuam trabalhando em paralelo. Uma equipe inicia um rigoroso teste em uma liberação ramo, enquanto uma outra equipe trabalha para uma versão em grande escala (dizemos, versão 2.0) sobre o /trunk. Se defeitos são descobertos em outros locais, correções são transportadas de volta e são criadas quando necessário. Neste ponto, no entanto o processo pàra. A branch é “congelada” para testes finais antes de uma liberação.
  • O ramo é marcado e liberado. Então o teste está completo, /branches/1.0 é copiado para /tags/1.0.0 como referência da imagem. A tag é empacotada e liberada para os usuários.
  • O ramo é mantida por todo o tempo. Enquanto o trabalho continua sobre o /trunk para a versão 2.0, correções continuam a ser transportadas do /trunk para branches/1.0. Quanto acumula-se correções, o gerente pode decidir fazer a liberação 1.0.1: /branches/1.0 é copiada para /tags/1.0.1, e a folha é empacotada e distribuída.

Toda repetição desse processo amadurece: então o trabalho 2.0 está completo, uma nova liberação ramo é criada, testada, marcada e eventuamente liberada. Depois de alguns anos, o repositório termina com um número de liberações nos ramos em modo manutenção, e o número de folhas representa a versões finais expedidas.

Written by Marcello Moura

21/07/2008 às 19:40

Publicado em versionamento de código fonte

Tagged with ,

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: