uma introdução aos sistemas de controle de versão distribuídos
TRANSCRIPT
Uma Introdução aos Sistemas de Controle de Versão Distribuídos
Leonardo Gresta Paulino Murta [email protected]
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
Problema #1
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 3
Como vocês desenvolvem soHware?
MoKvação
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 4
Processo Incremental (Versões)
Big Bang
OU
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)
Revisões
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 6
Gerações do iMac (1998 – 2013)
Variantes
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 7
Hatchback
Coupe
Sedan
Honda Civic
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
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
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
2-‐way merge
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 11
?
3-‐way merge
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 12
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 =
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
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
Problema #2
Como viabilizar o trabalho em equipe?
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 16
Possíveis soluções
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 17
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?
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
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
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
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
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
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 ...
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
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
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
Individual
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 28
Cliente-‐servidor
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 29
Gerente de integração
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 30
Ditador/tenentes
Leonardo Murta Uma Introdução aos Sistemas de Controle de Versão Distribuídos 31
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Uma Introdução aos Sistemas de Controle de Versão Distribuídos
Leonardo Gresta Paulino Murta [email protected]