capítulo 4, branching and merging, de ben collins-sussman, brian w. fitzpatrick, c. michael pilato,...

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 Coelho Rafael de Souza Santos

Upload: internet

Post on 17-Apr-2015

108 views

Category:

Documents


1 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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