Uma Introdução aos Sistemas de Controle de Versão Distribuídos Leonardo Gresta Paulino Murta leomurta@ic.uff.br
Versionamento Agenda 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 2
Problema #1 Como vocês desenvolvem sohware? 3
MoKvação Big Bang OU Processo Incremental (Versões) 4
Mas afinal, o que são versões? Versão Revisão Variante Cooperação (Rascunho) (Conradi and Westfechtel 1998) 5
Revisões Gerações do imac (1998 2013) 6
Variantes Honda Civic Hatchback Sedan Coupe 7
Cooperação (versões rascunho) Versão base Espaço de trabalho do Pedro Espaço de trabalho da Maria Espaço de trabalho do João 8
Versões de rascunho podem ser combinadas (operação de merge) João Maria Pedro Revisões 9
Conflitos podem ocorrer durante o merge João Paulo Revisões 10
2- way merge? 11
3- way merge 12
Outras duas operações importantes Diff = Patch = para guardar, transferir e compreender versões. 13
Versões no mundo real Infinidade de revisões e variantes juntas (sem contar versões rascunho) Histórico do Linux 14
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. 15
Problema #2 Como viabilizar o trabalho em equipe? 16
Possíveis soluções 17
Problema/solução Como viabilizar o versionamento? Como viabilizar o trabalho em equipe? Sistemas de Controle de Versão 18
Histórico Anos 70/80 Sistemas locais SCCS (1972) RCS (1982) 19
Histórico Anos 70/80 Sistemas locais SCCS (1972) RCS (1982) checkout Espaço de Trabalho Repositório commit 20
Histórico Anos 80/90 Sistemas cliente- servidor CVS (1986) Subversion (2000) 21
Histórico Anos 80/90 Sistemas cliente- servidor CVS (1986) Subversion (2000) cliente check-out / update servidor Espaço de Trabalho commit Repositório 22
Histórico Anos 2000 Sistemas peer- to- peer Git (2005) Mercurial (2005) 23
Histórico Anos 2000 Sistemas peer- to- peer Git (2005) Mercurial (2005) check-out clone / pull Espaço de Trabalho Repositório Repositório... commit push 24
O que é versionado? Elemento FS Diretório Arquivo Arquivo Binário Arquivo Texto Linha 25
Como é versionado? Commit Autor Comminer Mensagem Data pais 0..2 * Elemento FS Commit C Commit D Commit A Commit B Commit F Commit E 26
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 27
Individual 28
Cliente- servidor 29
Gerente de integração 30
Ditador/tenentes 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 32
git help Conceitos básicos: 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!) 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 34
Conceitos básicos: staging area Área onde são colocados os arquivos que pretendemos enviar para o repositório Área de Trabalho Staging Area Repositório Local 35
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) 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 37
git init <nome> Repositório local 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 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 39
Interface gráfica É possível fazer todos esses passos de forma visual Dentre várias ferramentas, vamos prakcar com... 40
git tag Demarcando versões especiais 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 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 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 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 44
Serviço de hospedagem Há diversos serviços de hospedagem de repositórios Git na Internet Dentre eles, vamos prakcar com... 45
Principais referências bibliográficas Conradi, R. and Wesechtel, 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. 46
Uma Introdução aos Sistemas de Controle de Versão Distribuídos Leonardo Gresta Paulino Murta leomurta@ic.uff.br