![Page 1: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/1.jpg)
Uma Introdução aos Sistemas de Controle de Versão Distribuídos
Leonardo Gresta Paulino Murta [email protected]
![Page 2: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/2.jpg)
Agenda • Versionamento • Sistemas de Controle de Versão • Formas de adoção de Sistemas de Controle de Versão Distribuídos
• Passo a passo • Ferramentas de apoio
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 2
![Page 3: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/3.jpg)
Problema #1
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 3
Como vocês desenvolvem soHware?
![Page 4: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/4.jpg)
MoKvação
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 4
Processo Incremental (Versões)
Big Bang
OU
![Page 5: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/5.jpg)
Mas afinal, o que são versões?
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 5
Versão
Revisão Variante Cooperação (Rascunho)
(Conradi and Westfechtel 1998)
![Page 6: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/6.jpg)
Revisões
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 6
Gerações do iMac (1998 – 2013)
![Page 7: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/7.jpg)
Variantes
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 7
Hatchback
Coupe
Sedan
Honda Civic
![Page 8: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/8.jpg)
Cooperação (versões rascunho)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 8
Espaço de trabalho do João
Espaço de trabalho da Maria
Espaço de trabalho do Pedro
Versão base
![Page 9: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/9.jpg)
Versões de rascunho podem ser combinadas (operação de merge)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 9
João Maria Pedro
Revisões
![Page 10: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/10.jpg)
Conflitos podem ocorrer durante o merge
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 10
João Paulo
Revisões
![Page 11: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/11.jpg)
2-‐way merge
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 11
?
![Page 12: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/12.jpg)
3-‐way merge
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 12
![Page 13: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/13.jpg)
Outras duas operações importantes…
… para guardar, transferir e compreender versões. Leonardo Murta Uma Introdução aos Sistemas de
Controle de Versão Distribuídos 13
Diff =
Patch =
![Page 14: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/14.jpg)
Versões no mundo real • Infinidade de revisões e variantes juntas (sem contar versões rascunho)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 14
Histórico do Linux
![Page 15: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/15.jpg)
Mas afinal, para que servem versões?
• Sincronizar equipes • Reproduzir estados anteriores do código • Explorar possibilidades • Segregar desenvolvedores • Customizar produtos (LPS) • Rastrear a introdução de bugs (bisect) • Entender a evolução de soHware (MSR) • Auditar mudanças (annotate) • Etc.
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 15
![Page 16: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/16.jpg)
Problema #2
Como viabilizar o trabalho em equipe?
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 16
![Page 17: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/17.jpg)
Possíveis soluções
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 17
![Page 18: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/18.jpg)
Problema/solução
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 18
Como viabilizar o versionamento?
Sistemas de Controle de Versão
Como viabilizar o trabalho em equipe?
![Page 19: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/19.jpg)
Histórico • Anos 70/80 – Sistemas locais
– SCCS (1972) – RCS (1982)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 19
![Page 20: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/20.jpg)
Histórico • Anos 70/80 – Sistemas locais
– SCCS (1972) – RCS (1982)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 20
Repositório Espaço de Trabalho
commit
checkout
![Page 21: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/21.jpg)
Histórico • Anos 80/90 – Sistemas cliente-‐servidor
– CVS (1986) – Subversion (2000)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 21
![Page 22: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/22.jpg)
Histórico • Anos 80/90 – Sistemas cliente-‐servidor
– CVS (1986) – Subversion (2000)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 22
Repositório Espaço de Trabalho
commit
check-out / update cliente servidor
![Page 23: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/23.jpg)
Histórico • Anos 2000 – Sistemas peer-‐to-‐peer
– Git (2005) – Mercurial (2005)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 23
![Page 24: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/24.jpg)
Histórico • Anos 2000 – Sistemas peer-‐to-‐peer
– Git (2005) – Mercurial (2005)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 24
clone / pull
push
Repositório Espaço de Trabalho
commit
check-out
Repositório ...
![Page 25: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/25.jpg)
O que é versionado?
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 25
Diretório Arquivo
Elemento FS
Arquivo Binário Arquivo Texto Linha
![Page 26: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/26.jpg)
Como é versionado?
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 26
Commit A Commit B
Commit C
Commit E
Commit D
Commit F
Commit Autor
Comminer Mensagem
Data
Elemento FS *
0..2 pais
![Page 27: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/27.jpg)
Formas de adoção • Apesar de ser peer-‐to-‐peer, normalmente é definido um “workflow” para adoção de DVCS em função de caracterísKcas do projeto – Individual – Cliente-‐servidor – Gerente de integração – Ditador/tenentes
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 27
![Page 28: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/28.jpg)
Individual
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 28
![Page 29: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/29.jpg)
Cliente-‐servidor
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 29
![Page 30: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/30.jpg)
Gerente de integração
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 30
![Page 31: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/31.jpg)
Ditador/tenentes
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 31
![Page 32: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/32.jpg)
Passo a passo • Vamos uKlizar o Git gradualmente em diferentes situações – Conceitos básicos – Repositório local – Inspecionando mudanças – Demarcando versões especiais – Repositório local com ramos – Repositório remoto – MúlKplos repositórios remotos
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 32
![Page 33: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/33.jpg)
Conceitos básicos: help! • git help
– Oferece ajuda geral sobre o git • git help <comando>
– Oferece ajuda sobre um comando específico do git
• Demais comandos dão dicas do que pode ser feito (leia com atenção as saídas dos comandos!)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 33
![Page 34: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/34.jpg)
Conceitos básicos: quem sou eu? • git config -‐-‐global user.name <seu nome>
– Configura o nome do usuário
• git config -‐-‐global user.email <seu email> – Configura o email do usuário
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 34
![Page 35: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/35.jpg)
Conceitos básicos: staging area • Área onde são colocados os arquivos que pretendemos enviar para o repositório
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 35
Área de Trabalho
Staging Area
Repositório Local
![Page 36: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/36.jpg)
Conceitos básicos: commit id • Cada sistema de controle de versão usa uma estratégia diferente para idenKficar commits – Número sequencial por arquivo (CVS) – Número sequencial por repositório (Subversion) – Hash (Git e Mercurial)
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 36
![Page 37: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/37.jpg)
Conceitos básicos: apelidos • A versão base do seu espaço de trabalho
– HEAD • O ramo principal do seu repositório
– master
• O repositório do qual seu repositório foi clonado – origin
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 37
![Page 38: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/38.jpg)
Repositório local • git init <nome>
– Cria um repositório Git no diretório
• git add – Adiciona um arquivo na staging area para ser enviado ao repositório no próximo commit
• git commit –m <mensagem> – Envia os arquivos que estão na staging area para o repositório
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 38
![Page 39: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/39.jpg)
Inspecionando mudanças • git status
– Inspeciona o espaço de trabalho • git log [-‐-‐graph] [-‐-‐decorate=short] [-‐-‐name-‐status]
– Inspeciona o histórico do repositório local • git show
– Inspeciona um commit • git diff
– Compara o espaço de trabalho com a staging area ou com alguma versão do repositório
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 39
![Page 40: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/40.jpg)
Interface gráfica • É possível fazer todos esses passos de forma visual
• Dentre várias ferramentas, vamos praKcar com...
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 40
![Page 41: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/41.jpg)
Demarcando versões especiais • git tag
– Lista os rótulos existentes • git tag <nome do rótulo> [commit id]
– Cria um rótulo sobre um dado commit (HEAD por default)
• git tag –d <nome do rótulo> – Remove um rótulo
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 41
![Page 42: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/42.jpg)
Repositório local com ramos • git branch -‐-‐all -‐v
– Lista os ramos existentes no repositório • git branch <nome do ramo>
– Cria um ramo à parKr da versão indicada no HEAD • git branch –d <nome do ramo>
– Remove um ramo • git checkout <commit id ou nome do ramo>
– Troca a versão base do espaço de trabalho • git merge <nome do ramo>
– Combina um ramo com o ramo corrente Leonardo Murta Uma Introdução aos Sistemas de
Controle de Versão Distribuídos 42
![Page 43: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/43.jpg)
Repositório remoto • git clone <url> <diretório>
– Cria um repositório local copiando o histórico de um repositório remoto
• git pull – Atualiza o repositório local e o espaço de trabalho em relação a um repositório remoto
• git push – Atualiza o repositório remoto em relação ao repositório local
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 43
![Page 44: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/44.jpg)
MúlKplos repositórios remotos • git remote -‐v
– Listar os repositórios remotos cadastrados
• git remote add <nome> <url> – Adiciona um novo repositório remoto
• git remote remove <nome> – Remove um repositório remoto existente
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 44
![Page 45: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/45.jpg)
Serviço de hospedagem • Há diversos serviços de hospedagem de repositórios Git na Internet
• Dentre eles, vamos praKcar com...
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 45
![Page 46: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/46.jpg)
Principais referências bibliográficas • Conradi, R. and Wes�echtel, B. Version Models for SoHware ConfiguraKon Management. ACM CompuKng Surveys, v.30, n.2, p. 232-‐282, 1998.
• Chacon, S. Pro Git. Apress, 1ª edição, 2009.
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 46
![Page 47: Uma Introdução aos Sistemas de Controle de Versão Distribuídos](https://reader031.vdocuments.pub/reader031/viewer/2022021815/58750d8f1a28ab9d228baa4c/html5/thumbnails/47.jpg)
Uma Introdução aos Sistemas de Controle de Versão Distribuídos
Leonardo Gresta Paulino Murta [email protected]