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

Post on 10-Jan-2017

218 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Leonardo  Gresta  Paulino  Murta  leomurta@ic.uff.br  

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  leomurta@ic.uff.br  

top related