uma introdução aos sistemas de controle de versão distribuídos

47
Uma Introdução aos Sistemas de Controle de Versão Distribuídos Leonardo Gresta Paulino Murta [email protected]ff.br

Upload: hoanghanh

Post on 10-Jan-2017

218 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Uma Introdução aos Sistemas de Controle de Versão Distribuídos

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Uma  Introdução  aos  Sistemas  de    Controle  de  Versão  Distribuídos  

Leonardo  Gresta  Paulino  Murta  [email protected]