Successfully reported this slideshow.

Controle de versão

1,085 views

Published on

Saiba o essencial sobre controladores de versão e tenha uma visão gerencial do processo de gestão de versões de software.

Published in: Technology
  • Be the first to comment

Controle de versão

  1. 1. Controle de VersãoPrimeiro Tempo<br />Guilherme BalenaVersiani <guibv@take.io><br />
  2. 2. Entender elementos básicos e gerenciais de Controle de Versão sem se prender a uma tecnologia específica.<br />Objetivo<br />
  3. 3. Vocabulário básico<br />Mundos Paralelos<br />Padrões de Branching<br />Se der tempo: Anti-padrões<br />Agenda (45min)<br />
  4. 4. Palavras e conceitos básicos<br />Vocabulário Básico<br />
  5. 5. Repositório<br />Local de armazenamento dos arquivos-fonte.<br />Servidor<br />A máquina que contém o repositório.<br />Cliente<br />A máquina que conecta ao repositório.<br />Cópia de trabalho<br />Pasta local onde se realizada alterações.<br />Ambiente<br />
  6. 6. Cliente<br />Ambiente<br />Servidor<br />Cópia de trabalho<br />Repositório<br />
  7. 7. Adicionar (add)<br />Incluir o arquivo para controle de versão<br />Modificar<br />Alterar a cópia de trabalho<br />Submeter alterações (commit)<br />Enviar alterações locais para o repositório<br />Reverter (revert)<br />Descartar alterações locais e voltar à última revisão<br />Operações Básicas<br />
  8. 8. Operações Básicas<br />Reverter<br />Adicionar<br />Foobar.txt<br />Foobar.txt<br />Submeter<br />alterações<br />Submeter<br />alterações<br />Modificar<br />Apagar<br />Reverter<br />Submeter<br />alterações<br />Foobar.txt<br />Foobar.txt<br />
  9. 9. Revisão<br />Conjunto de alterações<br />Histórico (Changelog)<br />Lista de revisões realizadas durante um intervalo de tempo<br />Artefatos Básicos<br />
  10. 10. Artefatos Básicos<br />Última revisão (head)<br />1222<br />beltrano<br />Refactoring do módulo C.<br />file1.txt<br />file2.txt<br />file4.txt<br />Changelog / Histórico<br />1221<br />fulano<br />Inclusão do BUG B.<br />file2.txt<br />file4.txt<br />1220<br />ciclano<br />Inclusão da feature A.<br />file1.txt<br />file3.txt<br />Número da revisão<br />fulano<br />1219<br />file1.txt<br />file2.txt<br />file3.txt<br />file4.txt<br />Inclusão inicial.<br />Autor da revisão<br />Mensagem de identificação<br />Arquivos modificados<br />Revisão<br />
  11. 11. Baixar atualizações (update)<br />Sincronizar alterações do repositório para a cópia de trabalho<br />Sincronismo<br />
  12. 12. Sincronismo<br />1219<br />1220<br />1221<br />1222<br />Jerry<br />Submeter<br />alterações<br />Servidor<br />1222<br />1219<br />1220<br />1221<br />Baixar atualizações<br />Tom<br />1219<br />1220<br />1221<br />1222<br />
  13. 13. Tags<br />Criação de nomes fáceis para marcar o histórico de revisões.<br />Etiquetas<br />
  14. 14. Etiquetas<br />1.0.2<br />1222<br />1222<br />beltrano<br />Refactoring do módulo C.<br />file1.txt<br />file2.txt<br />file4.txt<br />1221<br />1221<br />fulano<br />Inclusão do BUG B.<br />file2.txt<br />file4.txt<br />1220<br />1220<br />ciclano<br />Inclusão da feature A.<br />file1.txt<br />file3.txt<br />1.0.1<br />fulano<br />1219<br />1219<br />file1.txt<br />file2.txt<br />file3.txt<br />file4.txt<br />Inclusão inicial.<br />
  15. 15. Diferenciais (diffs) e Remendos (patches)<br />A comparação entre dois arquivos texto de revisões diferentes é feita normalmente por um aplicativo diff-like que gera um formato de saída que alimenta outro aplicativo patch-like capaz de refazer as alterações.<br />Computar as diferenças é normalmente denominada de diff, enquanto que a “geração de um arquivo de diferenças”, que pode ser trocado em e-mails e outros meios, é denominada de patch.<br />Alterações<br />
  16. 16. Alterações – Exemplo<br />
  17. 17. Alterações – Exemplo<br />
  18. 18. Alterações – Exemplo<br />
  19. 19. diff 4<br />diff 1<br />diff 2<br />diff 3<br />1218<br />1219<br />1220<br />1221<br />1222<br />Alterações<br />
  20. 20. Conceitos de ramificação, junções e conflitos<br />Mundos Paralelos<br />
  21. 21. Mundos Paralelos<br />WhatIf? Marvel, 1977-201x.<br />
  22. 22. Universos paralelos oferecem infinitas possibilidades.<br />Permitem que você permaneça em segurança, abrigado no universo particular de sua escolha, isolado de todos os outros eventos em universos alternativos.<br />Mundos Paralelos<br />
  23. 23. Uma ramificação é como um mundo paralelo.<br />Alterações realizadas em um ramo não afetam outro ramo.<br />Assim como nos quadrinhos de What If?, apesar de sermos capazes de pensar inúmeros mundos paralelos, um número muito grande deles pode dificultar o entendimento.<br />Mundos Paralelos<br />
  24. 24. Ramificações (branch)<br />Z<br />Criar ramificação<br />X<br />Criar ramificação<br />Y<br />Criar ramificação<br />W<br />
  25. 25. Em algum momento, o código de um ramo precisa se juntar a outro ramo.<br />Junções (merge)<br />
  26. 26. Junções (merge)<br />X<br />Junção<br />Y<br />
  27. 27. Quando alterações são realizadas em paralelo no mesmo arquivo, conflitos acontecem.<br />Conflitos<br />
  28. 28. Como solucionar conflitos?<br />
  29. 29. Pergunta:<br />Os conflitos podem ser resolvidos automaticamente?<br />Como solucionar conflitos?<br />
  30. 30. Não!!!<br />Como solucionar conflitos?<br />
  31. 31. Antes de continuar:<br />É melhor evitar conflitos desnecessários.<br />Como solucionar conflitos?<br />
  32. 32. Como solucionar conflitos?<br />Junção de duas vias (two way merge)<br />A<br />B<br />A<br />C = A + B<br />C<br />B<br />
  33. 33. Como solucionar conflitos?<br />Junção de três vias (three way merge)<br />A<br />C<br />B<br />B<br />Junção<br />D = A + B + C<br />Criar ramificação<br />A<br />D<br />C<br />
  34. 34. Ferramentas: KDiff3<br />
  35. 35. Ferramentas: WinMerge<br />
  36. 36. Ferramentas: TortoiseMerge<br />
  37. 37. E existem várias outras…<br />Meld<br />Guiffy SureMerge<br />Ultracompare<br />DiffMerge<br />Notepad++<br />Apple Filemerge<br />Araxis<br />tkmerge<br />TFS diffmerge<br />xxdiff<br />...<br />
  38. 38. Mas qual devo escolher?<br />Escolha a que melhor se adaptar à sua equipe!<br />Mais informações:http://bit.ly/cknTrr<br />
  39. 39. Como manter ramificações durante o ciclo de vida dos softwares<br />Padrões de ramificação<br />
  40. 40. Mainline<br />1.0.1<br />1.0<br />criar<br />ramo<br />junção<br />1.1.1<br />1.1.2<br />1.1<br />criar<br />ramo<br />junção<br />1.2.1<br />1.2.2<br />1.2<br />criar<br />ramo<br />junção<br />junção<br />2.0.1<br />2.0<br />
  41. 41. Mainline<br />Trazer uma correção do ramo n ao ramo m requer m-n junções (complexidade linear em função do número de ramos).<br />
  42. 42. Mainline<br />Lição aprendida:<br />Realize junções o mais cedo e mais frequentemente possível.<br />
  43. 43. Mainline / Variant<br />2.0.1<br />2.0<br />criar<br />ramo<br />1.2.1<br />1.2.2<br />1.2<br />junção<br />junção<br />junção<br />criar<br />ramo<br />mainline<br />criar<br />ramo<br />criar<br />ramo<br />junção<br />junção<br />3.0<br />1.1<br />1.1.1<br />
  44. 44. Cenário:<br />Você acabou de desenvolver uma versão estável do projeto e precisa desenvolver uma nova versão com novas funcionalidades e ainda dar manutenção à última versão estável.<br />
  45. 45. Parallel Maintenance / Development Lines<br />Alternativa mais usada<br />1.1.1<br />1.1.2<br />1.1<br />junção<br />junção<br />criar<br />ramo<br />1.0.0<br />2.0.1<br />devel<br />
  46. 46. Parallel Maintenance / Development Lines<br />Atenção ao ramo interno<br />2.0.1<br />2.0.2<br />2.0<br />junção<br />junção<br />criar<br />ramo<br />1.0.0<br />devel<br />criar<br />ramo<br />junção<br />junção<br />1.1<br />1.1.1<br />
  47. 47. Cenário:<br />Você precisa desenvolver duas funcionalidades distintas num prazo muito curto.<br />(risos)<br />
  48. 48. Overlapping Release Lines<br />mainline<br />criar<br />ramo<br />func_1<br />junção<br />criar<br />ramo<br />junção<br />junção<br />func_2<br />
  49. 49. Cenário:<br />Você colocou um novo desenvolvedor trabalhando numa base de código muito arriscada; apesar de confiar nele, é melhor “moderar” suas alterações algum tempo.<br />
  50. 50. DockingLine<br />devel<br />junção<br />junção<br />junção<br />moderador<br />sincroniza<br />sincroniza<br />sincroniza<br />docking<br />line<br />modifica<br />estabiliza<br />modifica<br />estabiliza<br />modifica<br />estabiliza<br />desenvolvedor<br />
  51. 51. Cenário:<br />Suas atividades de desenvolvimento necessitam progredir em estágios discretos de maturidade: (1) propostas de modificação, (2) análise, (3) revisão, (4) testes de unidade, (5) testes de integração, (6) testes de sistema, etc.<br />
  52. 52. StagedIntegrationLines<br />devel<br />propostas<br />(1)<br />revisão<br />(2)<br />testes<br />(3)<br />
  53. 53. Alguns padrões para situações mais comuns.<br />Quando ramificar?<br />
  54. 54. Ramificação por Entrega<br />1.0<br />1.1<br />1.2<br />1.3<br />Release 1<br />Junção<br />Criar ramo<br />Release 2<br />2.1<br />2.2<br />2.3<br />2.0<br />
  55. 55. Ramificação por Atividade<br />Atividade 1<br />1.0<br />1.2<br />1.1<br />Devel<br />Atividade 2<br />
  56. 56. Ramificação por Componente<br />Componente A<br />1.0<br />1.2<br />1.1<br />Devel<br />Componentes A + B<br />Componente B<br />
  57. 57. Ramificação por Tecnologia<br />1.1<br />Android<br />1.1<br />1.2<br />Common<br />1.1<br />1.2<br />iOS<br />
  58. 58. O que pode acontecer quando as ramificações são mal gerenciadas<br />Anti-padrões<br />

×