Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Controle de Versões com Git

Controle de Versões com Git

This presentation talks about how to start a project using git. From installation and configuration, through concepts of structure commits, index management, stash, branch, merge, rebase, remote repositories and extra themes.

Avatar for Vagner Santana

Vagner Santana

March 18, 2013
Tweet

More Decks by Vagner Santana

Other Decks in Programming

Transcript

  1. Agenda Introdução Instalação Configuração Iniciando um projeto Áreas do git

    Commit Gerenciamento de índice Stash / Branch Merge / Rebase Repositórios remotos: Modelo Centralizado / Modelo Distribuído Extras
  2. Introdução História: Criado por para gerenciar o desenvolvimento do kernel

    do linux (antes era utilizado o bitKeeper). Linus Torvalds
  3. Introdução Git não tem nada a ver com o .

    Git é um filesystem distribuído. Ou seja não só códigos fontes, e sim qualquer tipo de arquivos. Muito eficiente e confiável. Utiliza para identificação dos commits. Dificilmente ocorre perca de arquivos no git. Subversion SHA1
  4. Instalação Linux Instalando git e ssh Gerando chaves ssh: s

    u d o a p t - g e t i n s t a l l g i t - c o r e g i t - s v n s s h s s h k e y g e n - t r s a
  5. Instalação Windows Download: Abrir git bash e gerar chaves ssh:

    http://git-scm.com/download/win s s h k e y g e n - t r s a
  6. Configuração Definindo nome e email para identificar autor Verificando Highlight

    g i t c o n f i g - - g l o b a l u s e r . n a m e " v a g n e r v j s " g i t c o n f i g - - g l o b a l u s e r . e m a i l " v a g n e r v j s @ g m a i l . c o m " c a t / U s e r s / v a g n e r / . g i t c o n f i g / / a r q u i v o . g i t c o n f i g c o l o r : a u t o
  7. Iniciando um projeto Iniciar git em um projeto Ajuda Status

    c d p a s t a _ d o _ p r o j e t o g i t i n i t g i t h e l p i n i t g i t s t a t u s
  8. Continuando... Adicionando arquivos ao índice Após adicionar os arquivos ficam

    como new file, ou seja, a serem adicionados no próximo commit. Retirar do índice Commit Log g i t a d d . f i l e . t x t / / a p e n a s a r q u i v o f i l e . t x t g i t a d d . " * . t x t " / / t o d o s a r q u i v o s . t x t g i t a d d . / / T o d o s a r q u i v o s d o w o r k i n g d i r e c t o r y g i t r m - - c a c h e d f i l e . t x t g i t c o m m i t - m " P r i m e i r o c o m m i t " g i t l o g
  9. Estrutura do commit Commit é um pacote, um envelope. Após

    adicionar os arquivos ficam como new file, ou seja, a serem adicionados no próximo commit. Branch e tags apontam sempre para commits Commits posuem um identificador em SHA1, o que torna praticamente impossível conflito de commits. Mesmo utilizando trechos do SHA1 (até 5 caracteres no máximo), ainda assim é possível identificar o commit. O git nunca duplica conteúdos entre commits, apenas faz referência ao blob do commit anterior e adiciona os novos arquivos.
  10. Gerenciando o índice Imagine as ações abaixo: Como desfazer? E

    para voltar ao ínicio (antes de modificiar o arquivo file.txt) Para todos os arquivos M o f i c a ç ã o n o a r q u i v o f i l e . t x t g i t a d d f i l e . t x t g i t r e s e t H E A D f i l e . t x t g i t c h e c k o u t - - f i l e . t x t g i t r e s e t H E A D / / t o d o s o s a r q u i v o s v o l t a m p a r a s t a t u s u n t r a c k e d
  11. Gerenciando o índice Jogar fora último commit Esta operação parece

    destrutiva mas não é: Voltar arquivos de commit para o índice g i t r e s e t H E A D ~ 1 - - h a r d / / a g o r a a c a b e ç a a p o n t a p a r a o c o m m i t a n t e r i o r g i t r e f l o g / / g u a r d a t o d a s a s c o i s a s q u e f o r a m j o g a d a s f o r a g i t m e r g e < s h a 1 d o c o m m i t d e s e j a d o > g i t r e s e t H E A D ~ 1
  12. Gerenciando o índice Remover arquivos do índice Limpar arquivos do

    working directory Mais operações de índice... g i t r m - - c a c h e d < f i l e > g i t c l e a n - f g i t a d d - i
  13. Stash Situação: você está desenvolvendo uma nova funcionalidade e chega

    um pedido para resolver um bug. Não é viável fazer um commit neste momento pois a funcionalidade não está pronta. Para auxiliar situações como essa, existe uma quarta área (temporária) no git, chamada stash.
  14. Stash Criando um stash anônimo Listando Para voltar ao desenvolvimento

    após corrigir o bug descrito na situação acima Removendo stash g i t s t a s h g i t s t a s h l i s t g i t s t a s h a p p l y g i t s t a s h c l e a r
  15. Stash Criando stash e definindo uma identificação Outros comandos para

    stash g i t s t a s h s a v e " f a z e n d o a l g o " g i t s t a s h a p p l y s t a s h @ [ 0 ] / / v o l t a p a r a o s t a s h d e s e j a d o g i t s t a s h p o p / / t i r a d a l i s t a , a p l i c a e a p a g a o s t a s h g i t s t a s h d r o p s t a s h { 0 } / / r e t i r a d a l i s t a d e s t a s h
  16. Branch Objetivo de trabalhar com branches: separar funcionalidades durante o

    desenvolvimento. Troca de contexto sem atrito Criando branch chamando "desenvolvimento" Trocando de master para "desenvolvimento" Listando g i t c h e c k o u t - b " d e s e n v o l v i m e n t o " g i t c h e c k o u t d e s e n v o l v i m e n t o g i t b r a n c h
  17. Branch Visualizando histórico Unindo alterações feitas em um branch (ex:

    "desenvolvimento") para o master Removendo branch GUI para visualização Mesclando pequenos commits em um único g i t l o g - - g r a p h g i t c h e c k o u t m a s t e r g i t m e r g e d e s e n v o l v i m e n t o g i t g i t b r a n c h - d d e s e n v o l v i m e n t o g i t k - - a l l & g i t m e r g e < b r a n c h > - - s q u a s h
  18. Dica: Evite trabalhar no master. O ideal é que cada

    branch tenha uma funcionalidade. http://git-scm.com/book/en/Git-Branching-Branching-Workflows
  19. Merge / Rebase Situação: estou trabalhando em um branch e

    alguém alterou o master O que deve ser feito é: manter sempre o branch atual atulizado pelo master. Se existir um conflito, ou seja, arquivo local é diferente do arquivo que está no master, o arquivo deve ser analizado e depois de corrigir o conflito: g i t r e b a s e m a s t e r g i t r e b a s e - - c o n t i n u e
  20. Merge / Rebase Se estiver em trabalhando com um servidor

    remoto, deve ser feito merge, pois o rebase é destruitivo. Com rebase a linha de histório é reta, com merge é criado um desvio. Merge traz os commits e adiciona mais um no final. Rebase junta todos os commits linearmente.
  21. Respositórios remotos Clonando um repositório Mostrando origem Criando branch local

    a partir de branch remoto Exibindo braches locais e remotos Enviando para repositório remoto g i t c l o n e t e s t e / . g i t t e s t e 2 g i t r e m o t e g i t r e m o t e s h o w o r i g i n g i t c h e c k o u t - b d e s e n v o l v i m e n t o o r i g i n / d e s e n v o l v i m e n t o g i t b r a n c h - a g i t p u s h o r i g i n m a s t e r
  22. Modelo Centralizado Cenário: Dois desenvolvedores, cada um com uma cópia

    local e um servidor remoto. Criando repositório no servidor Adicionando permissão de acesso Chave ssh no usuário m k d i r t e s t e . g i t c d t e s t e . g i t g i t i n i t - - b a r e c d ~ / . s s h e c h o " c h a v e r s a d o u s u a r i o " > > a u t o r i z e d _ k e y s c a t ~ / . s s h / i d _ r s a . p u b
  23. Modelo Centralizado No usuário, adicionando remote ao repositório local Trazendo

    alterações do repositório remoto para um branch especial Fech seguido de merge g i t r e m o t e a d d o r i g i n v a g n e r @ 1 7 2 . 1 6 . 1 0 0 . 1 9 8 : / h o m e / g i t / r e p o s i t o r i o s / t e s t e . g i t g i t f e c h o r i g i n m a s t e r g i t p u l l
  24. Extras Tags Logs g i t t a g v

    1 . 0 g i t p u s h o r i g i n v 1 . 0 g i t p u s h - - t a g s g i t - b < b r a n c h > v 0 . 8 g i t l o g - - s t a s h g i t l o g - - p r e t t y = o n e l i n e g i t l o g - - p r e t t y = f o r m a t : " [ % a n % a d ] % h - % s " g i t l o g - - p r e t t y = f o r m a t : " % h - % s " - - g r a p h g i t l o g - - s i n c e = 3 0 . m i n u t e s g i t l o g - - s i n c e = 4 . h o u r s - - u n t i l = 2 . h o u r s g i t l o g - - s i n c e = 4 . h o u r s - - u n t i l = 2 . h o u r s - - b e f o r e = " 2 0 1 3 - 0 3 - 1 5 "
  25. Considerações Finais Controle de versões é essencial para organização do

    projeto É fácil, basta usar frequentemente Facilita contribuição em projetos open source é a melhor forma de mostrar seu trabalho como desenvolvedor, seja para empresas ou pessoas Github
  26. Referências Git SCM - Pro Git Book Fabio Akita -

    Screencast - Começando com Git Git for Computer Scientists Git Documentation