![Page 1: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/1.jpg)
Capítulo 4, “Branching and Merging”,de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,
“Version Control with Subversion”
Grupo 5
André Ribeiro Coelho
Rafael de Souza Santos
![Page 2: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/2.jpg)
2
Branch
Linha de desenvolvimento que existe independentemente de outra linha
no SVN, ramificação implícita
Diferente de outros SCV
![Page 3: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/3.jpg)
3
Layout Inicial do Repositório
![Page 4: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/4.jpg)
4
Criando o Branch
svn copy <trunk> <branch> -m “...”
![Page 5: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/5.jpg)
5
Trabalhando com o Branch
svn checkout <branch>
![Page 6: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/6.jpg)
6
Trabalhando com o Branch
... E continua evoluindo com o trunk
![Page 7: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/7.jpg)
7
Trabalhando com o Branch
svn log –v <file> (do branch)
![Page 8: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/8.jpg)
8
Trabalhando com o Branch
svn log –v <file> (do trunk)
![Page 9: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/9.jpg)
9
Merge
Minimizar os conflitos replicar as mudanças durante a evolução do branch
Versão 1.5
Changesets - conjunto de mudanças com um único nome
![Page 10: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/10.jpg)
10
Mantendo o Branch em Sync
Ainda não terminou as mudanças do branch
![Page 11: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/11.jpg)
11
Mantendo o Branch em Sync
svn merge ^/trunk ( do branch )
![Page 12: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/12.jpg)
12
Reintegrando o Branch
svn merge ^/trunk ( do branch )
![Page 13: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/13.jpg)
13
Reintegrando o Branch
svn merge -- reintegrate ^/branches/my-calc-branch
![Page 14: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/14.jpg)
14
Reintegrando o Branch
svn delete ^/branches/my-calc-branch \ -m “...”
![Page 15: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/15.jpg)
15
Desfazendo mudanças
svn merge -c -303 ^/trunk
• remove do Head, mas mantém o histórico
• remover definitivamente ADM
![Page 16: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/16.jpg)
16
Ressuscitando item deletado
svn merge não é uma boa opção
svn copy ^/trunk/real.c@807 ./real.c• mantém o histórico
svn cat ^/trunk/real.c@807 > ./real.c• não mantém o histórico
![Page 17: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/17.jpg)
17
Cherrypicking
Aplicar um changeset específico de um branch a outro• identificar a diferença entre o changeset
específico e o trunk• svn diff -c 355 ^/trunk/
• levar o conteúdo da revisão 355 pro trunk• svn merge -c 355 ^/trunk/
![Page 18: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/18.jpg)
18
Sintaxe do merge
Leva o conceito de “diff-and-apply” e possui 3 parâmetros• repositório inicial• repositório final• alvo do merge
Exemplo:• svn merge -r 100:200
http://svn.example.com/repos/trunk my-working-copy
![Page 19: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/19.jpg)
19
Reverter o merge
É possível desfazer o resultado gerado do merge• svn revert . --recursive
![Page 20: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/20.jpg)
20
Rastreabilidade com o SVN
Exibição através de log $ cd my-calc-branch$ svn log -q------------------------------------------------------------------------r390 | user | 2002-11-22 11:01:57 -0600 (Fri, 22 Nov 2002) | 1 line------------------------------------------------------------------------r388 | user | 2002-11-21 05:20:00 -0600 (Thu, 21 Nov 2002) | 2 lines------------------------------------------------------------------------r381 | user | 2002-11-20 15:07:06 -0600 (Wed, 20 Nov 2002) | 2 lines------------------------------------------------------------------------r359 | user | 2002-11-19 19:19:20 -0600 (Tue, 19 Nov 2002) | 2 lines------------------------------------------------------------------------r357 | user | 2002-11-15 14:29:52 -0600 (Fri, 15 Nov 2002) | 2 lines------------------------------------------------------------------------r343 | user | 2002-11-07 13:50:10 -0600 (Thu, 07 Nov 2002) | 2 lines------------------------------------------------------------------------r341 | user | 2002-11-03 07:17:16 -0600 (Sun, 03 Nov 2002) | 2 lines------------------------------------------------------------------------r303 | sally | 2002-10-29 21:14:35 -0600 (Tue, 29 Oct 2002) | 2 lines------------------------------------------------------------------------r98 | sally | 2002-02-22 15:35:29 -0600 (Fri, 22 Feb 2002) | 2 lines------------------------------------------------------------------------
![Page 21: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/21.jpg)
21
Rastreabilidade com o SVN
Usando o histório do merge através do -g $ svn log -v -r 390 -g------------------------------------------------------------------------r390 | user | 2002-11-22 11:01:57 -0600 (Fri, 22 Nov 2002) | 1 lineChanged paths:M /branches/my-calc-branch/button.cM /branches/my-calc-branch/READMEFinal merge of trunk changes to my-calc-branch.------------------------------------------------------------------------r383 | sally | 2002-11-21 03:19:00 -0600 (Thu, 21 Nov 2002) | 2 linesChanged paths:M /branches/my-calc-branch/button.cMerged via: r390Fix inverse graphic error on button.------------------------------------------------------------------------r382 | sally | 2002-11-20 16:57:06 -0600 (Wed, 20 Nov 2002) | 2 linesChanged paths:M /branches/my-calc-branch/README
![Page 22: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/22.jpg)
22
Rastreabilidade com o SVN
Usando o comando svn blame para identificar alterações dentro do arquivo $ svn blame button.c…390 user retval = inverse_func(button, path);390 user return retval;390 user }…
$ svn blame button.c -g…G383 sally retval = inverse_func(button, path);G 383 sally return retval;390 user }…
![Page 23: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/23.jpg)
23
Tags
Fotografia do projeto no tempoUtiliza o mesmo conceito de copy utilizado na
criação de branches $ svn copy http://svn.example.com/repos/calc/trunk \http://svn.example.com/repos/calc/tags/release-1.0 \-m "Tagging the 1.0 release of the 'calc' project."Committed revision 902.
![Page 24: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/24.jpg)
24
Tags
Crítica!• usuário desavisado• usuário mal intencionado• solução de contorno via script do
administrador• apesar disso, não se recomenda o script
![Page 25: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/25.jpg)
25
Tags Complexas
Disponibilização da working-copy para outros desenvolvedores
$ lsmy-working-copy/$ svn copy my-working-copy \http://svn.example.com/repos/calc/tags/mytag \-m "Tag my existing working copy state."Committed revision 940.
![Page 26: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/26.jpg)
26
Manutenção dos branches
Organização dos diretórios do repositório• /trunk• /branches• /tags
Poderíamos então termos um diretório funcionando como uma prateleira?• /shelf
![Page 27: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/27.jpg)
27
Remoção de branches e tags
Branches podem ser removidos e recuperados• remoção
$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \-m "Removing obsolete branch of calc project."Committed revision 375.
$ svn copy http://svn.example.com/repos/calc/branches/my-calc-branch@374 \http://svn.example.com/repos/calc/branches/my-calc-branch \-m "Restore my-calc-branch."Committed revision 376.
• restauração
![Page 28: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/28.jpg)
28
Políticas de branches comuns
Release Branches• desenvolvedores trabalhando no trunk• o trunk é copiado para o “release branch”• times trabalham em paralelo• o branch é “tagged” e “released”
![Page 29: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/29.jpg)
29
Políticas de branches comuns
Feature Branches• um branch temporário é criado para
trabalhar em mudanças complexas• nascem, são integrados no trunk e morrem• são úteis quando uma modificação
necessita de commits instáveis (“quebrados”)
![Page 30: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/30.jpg)
30
Políticas de branches comuns
Vendor Branches• é geralmente usado quando depende-se de
customizações em bibliotecas de terceiros• cria-se um diretório /vendor• adiciona-se a lib a este diretório
(/vendor/libxpto)
![Page 31: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/31.jpg)
31
Políticas de branches comuns
Vendor Branches• mantém-se uma versão atual
(/vendor/libxpto/current)• versões específicas (/vendor/libxpto/1.0)
![Page 32: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/32.jpg)
32
Políticas de branches comuns
Vendor Branches• exemplo
$ svn import /path/to/libcomplex-1.0 \http://svn.example.com/repos/vendor/libcomplex/current \-m "importing initial 1.0 vendor drop"
$ svn copy http://svn.example.com/repos/vendor/libcomplex/current \http://svn.example.com/repos/vendor/libcomplex/1.0 \-m "tagging libcomplex-1.0"…
$ svn copy http://svn.example.com/repos/vendor/libcomplex/1.0 \http://svn.example.com/repos/calc/libcomplex \-m "bringing libcomplex-1.0 into the main branch"
$ cd working-copies/calc$ svn merge ^/vendor/libcomplex/1.0 \^/vendor/libcomplex/current \libcomplex… # resolve all the conflicts between their changes and our changes$ svn commit -m "merging libcomplex-1.1 into the main branch"
![Page 33: Capítulo 4, Branching and Merging, de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato, Version Control with Subversion Grupo 5 André Ribeiro](https://reader036.vdocuments.com.br/reader036/viewer/2022062318/552fc11b497959413d8c9948/html5/thumbnails/33.jpg)
Capítulo 4, “Branching and Merging”,de Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato,
“Version Control with Subversion”
Grupo 5
André Ribeiro Coelho
Rafael de Souza Santos