Posts Tagueados ‘svn’
Explicação de como trabalhar com subversion
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.