Git$ - Universidade Federal Fluminenseleomurta/courses/2014.1/gps/git.pdf · 2020-02-03 ·...

Post on 21-Jul-2020

1 views 0 download

Transcript of Git$ - Universidade Federal Fluminenseleomurta/courses/2014.1/gps/git.pdf · 2020-02-03 ·...

Git  Bruno  de  Pinho  Sche.no  bsche.no@id.uff.br  

Histórico  •  Desenvolvido  para  apoiar  o  projeto  do  kernel  do  Linux    

•  De  1991  até  2002  as  mudanças  no  código  eram  passadas  através  de  troca  de  arquivos  

 •  De  2002  a  2005  projeto  do  kernel  do  Linux  uIlizou  um  SCV  chamado  BitKeeper  

 •  Em  2005,  o  BitKeeper  deixaria  de  ser  gratuito    

•  EsImulou  Linus  Torvalds  a  desenvolver  o  próprio  SCV  para  apoiar  o  projeto  do  kernel.  

2

Características  •  Topologia  distribuída  • Armazenamento  de  snapshots  •  Facilidade  para  trabalhar  com  ramos  (branches)  e  eIquetas  (tags)    

3

Fonte: Slides do professor Leonardo Murta

Problema  da  concorrência  

4

Fonte: Slides do professor Leonardo Murta

Política  pessimista  

5

Fonte: Slides do professor Leonardo Murta

Política  pessimista  •  Problemas  administraIvos  

•  Bloqueios  esquecidos  podem  atrasar  o  andamento  do  projeto  

•  Problemas  de  serialização  desnecessária  •  Em  alguns  casos,  as  modificações  atuam  sobre  partes  independentes  dos  arquivos  bloqueados  

•  Falsa  sensação  de  segurança  •  Dependências  semânIcas  podem  cruzar  a  fronteira  de  arquivos  

•  Bloqueios  são  necessários  •  Quando  se  trata  de  arquivos  que  não  podem  ser  combinados   6

Política  otimista  (1/2)  

7

Fonte: Slides do professor Leonardo Murta

Política  otimista  (2/2)  

8

Fonte: Slides do professor Leonardo Murta

Controle  de  concorrência  no  Git  •  PolíIca  oImista  

•  Vários  usuários  podem  alterar  o  mesmo  arquivo  •  Git  tenta  realizar  um  merge  automáIco  •  Caso  haja  conflitos,  eles  devem  ser  resolvidos  pelo  usuário  

9

Sistema  de  arquivos  tradicional  

10

Dimen

são  ESPA

ÇO  

Fonte: Slides do professor Leonardo Murta

Sistema  de  arquivos  versionado  

11

Dimen

são  ESPA

ÇO  

Dimensão  TEMPO  

Fonte: Slides do professor Leonardo Murta

Repositório  local  • Diretório  comum  no  sistema  de  arquivos  local  • Guarda  uma  cópia  do  repositório  

•  Permite  algumas  operações  off-­‐line  •  Permite  transmissão  de  commits  para  o  repositório  remoto  

•  Área  isolada  das  modificações  de  outros  desenvolvedores  •  Suas  modificações  podem  ser  publicadas  com  push  •  Modificações  de  outros  podem  ser  incorporadas  com  pull  

12

Espaço  de  Trabalho  e  Índice  •  Espaço  de  Trabalho  

•  Área  onde  as  mudanças  são  realizadas  pelo  usuário  •  Arquivos  são  modificados,  criados  ou  removidos  

•  Índice  •  Área  temporária  uIlizada  entre  o  repositório  local  e  o  espaço  de  trabalho  

•  Permite  escolher  quais  mudanças  feitas  no  espaço  de  trabalho  serão  adicionadas  a  um  commit  

13

14

Adaptado de http://nbviewer.ipython.org/github/LUMC/programming-course/blob/master/images/git-remote.png

Fluxo  

Comando  clone  

15

•  Clona um repositório em um novo diretório

•  Cria o vínculo entre as branches do clone e do repositório clonado

Comando  clone  

16

Exemplo  

Sintaxe  

git  clone  [URL]  

HEAD  

17

•  Ponteiro que controla em qual estado do repositório o sistema está trabalhando

•  Aponta para um commit

Comando  status  

18

•  Mostra o estado do repositório local

•  Mostra os arquivos e diretórios que contêm diferenças entre o índice e o HEAD

Comando  status  

19

Exemplo  

Sintaxe  

git  status  

Comando  add  

20

•  Adiciona conteúdo de arquivos ao índice

•  Prepara para o commit

Comando  add  

21

Exemplo  

Sintaxe  

git  add  [caminho]  

Comando  rm  

22

•  Remove arquivos do índice e do espaço de trabalho

•  Adiciona a remoção do arquivo nas mudanças do commit

Comando  rm  

23

Exemplo  

Sintaxe  

git  rm  [caminho]  

Comando  commit  

24

•  Grava mudanças no repositório local

•  Armazena o conteúdo atual do índice em um novo commit, juntamente com uma mensagem de log do usuário que descreve as mudanças

Comando  commit  

25

Exemplo  

Sintaxe  

git  commit  [<caminho>]  [<opções>]  

Comando  commit  

26

Comando  commit  

27

Comando  push  

28

•  Atualiza o repositório remoto com as mudanças locais

Comando  push  

29

Exemplo  

Sintaxe  

git  push  [<caminho_repositorio>]  [<opções>]  

Comando  pull  

30

•  Incorpora as alterações de um repositório remoto no ramo (branch) atual

Comando  pull  

31

Sintaxe  

git  pull  [<caminho_repositorio>]  [<opções>]  

Comando  pull  

32

Exemplo  

Comando  checkout  

33

•  Alterna entre ramos

•  Retorna arquivos ao estado de uma versão específica

•  Se nenhum parâmetro for especificado, retorna à versão do índice

•  Pode retornar para um commit ou tag

Comando  checkout  

34

Exemplo  

Sintaxe  

git  checkout  <ramo>  

Comando  checkout  

35

Sintaxe  

git  checkout  <caminho>  

Comando  checkout  

36

Exemplo  

Comando  reset  

37

•  Muda o ponteiro do HEAD para o estado especificado

Comando  reset  

38

Sintaxe  

git  reset  [commit_id]  

Comando  reset  

39

Exemplo  

Comportamento  dos  comandos  Novos

commits locais

Novos commits remotos

Comando push Commando pull

Não Não Nenhuma ação Nenhuma ação

Não Sim Nenhuma ação Versão local substituída pela versão do repositório remoto

Sim Não Publica a versão local no repositório remoto

Nenhuma ação

Sim Sim Falha, avisando que o repositório local está desatualizado

Versão local combinada com a versão do repositório remoto

40

Ciclo  básico  de  trabalho  

41

Construção do espaço de trabalho

git clone git pull

git branch git checkout

Implementação

git add git rm git log

Verificação

git status git diff

git checkout git reset

Integração

git pull git commit git push

Etiquetas  e  Ramos  •  EIquetas  (tags)  

•  Ponteiros  para  snapshots  •  Uso  do  nome  da  eIqueta  no  lugar  do  hash  do  commit  

•  Ramos  (branches)  •  Também  são  ponteiros  para  snapshots  •  Ponteiro  se  move  independente  do  ponteiro  de  outros  ramos  

42

Junção  (fast-­‐foward)  

43

Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

Junção  (fast-­‐foward)  

44

Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

Junção  (three  way)  

45

Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

Junção  (three  way)  

46

Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

Junção  (three  way)  

47

Fonte: http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging

Comando  branch  

48

•  Lista, cria ou deleta ramos

Comando  branch  

49

Exemplo  

Sintaxe  

git  branch  [<opções>]  

Comando  merge  

50

•  Mescla duas histórias de desenvolvimento

•  Incorpora alterações dos commits no ramo atual

Comando  merge  

51

Sintaxe  

git  merge  [nome_do_ramo]  

Comando  merge  

52

Exemplo  

Comando  merge  

53

Exemplo  

Resolvendo  conSlitos  

54

Resolvendo  conSlitos  

55

Resolvendo  conSlitos  

56

Resolvendo  conSlitos  

57

Comando  tag  

58

•  Lista, cria ou deleta etiquetas

Comando  tag  

59

Exemplo  

Sintaxe  

git  tag  [<opções>]  <nome>  

Comando  log  •  Fornece  um  relatório  sobre  as  versões  do  repositório  •  Por  arquivo  •  Por  commit  

•  Exibe,  para  cada  versão  •  IdenIficação  (hash  do  commit)  •  Quem  (autor)  •  Quando  (data)  •  Onde  (caminhos)  •  Como  (ação  nos  caminhos)  •  O  que  (mensagem)  •  Por  que  (número  da  solicitação  de  modificação)  

60

Comando  log  

61

Sintaxe  

git  log  [<opções>]  [<intervalo  de  revisões>]  [[-­‐-­‐]  <caminho>…]  

Comando  log  

62

Exemplo  

Comando  log  

63

Exemplo  

Comando  diff  

64

•  Mostra diferenças entre arquivos

•  Normalmente, usamos para ver diferenças entre a versão atual de um arquivo no repositório e o mesmo arquivo no espaço de trabalho

Comando  diff  

65

Exemplo  

Sintaxe  

git  diff  [<opções>]  

Ferramentas  úteis  

•  hpps://github.com/  

•  hpps://bitbucket.org/  

 

 

66

Ferramentas  úteis    •  hpp://www.sourcetreeapp.com/  

 •   Dyevc  

•  Plugins  em  IDEs  (Netbeans,  Eclipse  (EGit),  Rubymine)  

 67

Exercício  Apresente  as  principais  funcionalidades  do  GitHub  ou  Bitbucket  

 

68

Principais  Referências  •  hpp://git-­‐scm.com/  •  Jon  Loeliger  (2009).  “Version  Control  with  Git:  Powerful  tools  and  techniques  for  collaboraIve  soyware  development”,  O'Reilly  Media  

•  Slides  do  professor  Leonardo  Murta.  Disponíveis  em  hpp://www2.ic.uff.br/~leomurta/courses/2012.2/es2/aula5.pdf  

69

Git  Bruno  de  Pinho  Sche.no  bsche.no@id.uff.br