Git: Controle de
versões do jeito certo
      Arthur Zapparoli
        @arthurgeek
Arthur?
Arthur?

• ArthurGeek
Arthur?

• ArthurGeek
• http://arthurgeek.net
Arthur?

• ArthurGeek
• http://arthurgeek.net
• @arthurgeek
Agenda
Agenda
• VCS
 • O que é?
 • Vantagens
 • Como funciona?
 • Centralizado x Distribuído
Agenda
Agenda
• Git
 • O que é?
 • Características básicas
 • Particularidades
 • Instalando
Agenda
Agenda
• Git
 • Configurando
 • Iniciando um repositório
 • Workflow básico
 • Workflow remoto
Pesquisa
Pesquisa
• Quem não usa NENHUM controle de versões?
Pesquisa
• Quem não usa NENHUM controle de versões?
• CVS?
Pesquisa
• Quem não usa NENHUM controle de versões?
• CVS?
• Subversion?
Pesquisa
• Quem não usa NENHUM controle de versões?
• CVS?
• Subversion?
• Algum outro?
VCS: O que é?
VCS: O que é?
• um software para gerenciar diferentes
  versões de um documento qualquer
VCS: O que é?
• um software para gerenciar diferentes
  versões de um documento qualquer
• o processo de guardar o histórico de
  alterações de diferentes arquivos.
VCS: Vantagens
VCS: Vantagens
• Backup automático de todos arquivos
VCS: Vantagens
• Backup automático de todos arquivos
• Controle do histórico
VCS: Vantagens
• Backup automático de todos arquivos
• Controle do histórico
• Trabalho em equipe
VCS: Vantagens
• Backup automático de todos arquivos
• Controle do histórico
• Trabalho em equipe
• Marcação e resgate de versões
  estáveis
VCS: Vantagens
• Backup automático de todos arquivos
• Controle do histórico
• Trabalho em equipe
• Marcação e resgate de versões
  estáveis

• Ramificação do projeto
VCS: Como funciona?
VCS: Como funciona?


  Repositório
VCS: Como funciona?


  Repositório




                Pedro
VCS: Como funciona?


                Ch
                 ec
  Repositório

                     ko
                      ut




                           Pedro
VCS: Como funciona?


                Ch
                 ec
  Repositório

                     ko
                      ut
                           Modifica




                           Pedro
VCS: Como funciona?




                                     Ip rem mit
                Ch
                                                  Repositório




                                        Lo om
                 ec
  Repositório

                     ko




                                            C
                      ut




                                          m
                                       su
                           Modifica




                           Pedro
VCS: Centralizado x Distribuído
VCS: Modelo Centralizado
VCS: Modelo Centralizado

• Repositório fica armazanedo em um
 servidor central
VCS: Modelo Centralizado

• Repositório fica armazanedo em um
  servidor central
• Os desenvolvedores ao fazerem um
  checkout, obtêm uma cópia da última
  revisão do repositório
VCS: Modelo Centralizado

• Repositório fica armazanedo em um
  servidor central
• Os desenvolvedores ao fazerem um
  checkout, obtêm uma cópia da última
  revisão do repositório

• Somente usuários autorizados podem
  fazer commits
VCS: Modelo Centralizado
                                            Guilherme




                                            out

                                                   Com
                                           eck

                                                  mit
                                           Ch
             Ch
               eck
                     out                                              ck   out
                                                                  Che
      Ana    Com
                mit                 Repositório                            mit
                                                                                    Carlos
                                                                  Com

                           Ch
                      ec                                    Ch
                                                                 ec
                                      it
                         k
                   ou                                              ko
                     t               m             it                 ut
                                 om                     m
                                C                           m
                                                         Co




                                                                           Sílvia
            Pedro
VCS: Modelo Distribuído
VCS: Modelo Distribuído
• Cada projeto é um repositório
  completo, com histórico total
VCS: Modelo Distribuído
• Cada projeto é um repositório
  completo, com histórico total
• Independe de acesso à rede ou um
  servidor central
VCS: Modelo Distribuído
• Cada projeto é um repositório
  completo, com histórico total
• Independe de acesso à rede ou um
  servidor central
• Commits podem ser feitos offline
VCS: Modelo Distribuído
• Cada projeto é um repositório
  completo, com histórico total
• Independe de acesso à rede ou um
  servidor central
• Commits podem ser feitos offline
• Commits podem ser transferidos de
  um repositório para outro facilmente
VCS: Modelo Distribuído
                        Guilherme




                                       Pu
                                         sh


      Ana
                       Push



              ll
             Pu                                    Carlos




                                        ll
                                       Pu
             Pu
                  sh




                                              sh
                                              Pu
      Pull




             Push
                              Sílvia
     Pedro
Git: O que é?
Git: O que é?
• Um projeto Open Source (GPL v2)
Git: O que é?
• Um projeto Open Source (GPL v2)
• Originalmente escrito por Linus Torvalds em
  2005
Git: O que é?
• Um projeto Open Source (GPL v2)
• Originalmente escrito por Linus Torvalds em
  2005

• Atualmente é mantido por Junio Hamano
Git: O que é?
• Um projeto Open Source (GPL v2)
• Originalmente escrito por Linus Torvalds em
  2005

• Atualmente é mantido por Junio Hamano
• Desenvolvido para manter o Kernel do Linux
Git: O que é?
• Um projeto Open Source (GPL v2)
• Originalmente escrito por Linus Torvalds em
  2005

• Atualmente é mantido por Junio Hamano
• Desenvolvido para manter o Kernel do Linux
• Sistema de controle de versões distribuído
Git: O que é?
• Um projeto Open Source (GPL v2)
• Originalmente escrito por Linus Torvalds em
  2005

• Atualmente é mantido por Junio Hamano
• Desenvolvido para manter o Kernel do Linux
• Sistema de controle de versões distribuído
• Foco em rapidez, eficiência e uso em grandes
  projetos
Git: Características Básicas
Git: Características Básicas

• Suporte para desenvolvimento não-
  linear
Git: Características Básicas

• Suporte para desenvolvimento não-
  linear
• Desenvolvimento distribuído
Git: Características Básicas

• Suporte para desenvolvimento não-
  linear
• Desenvolvimento distribuído
• Compatibilidade com sistemas/
  protocolos existentes
Git: Características Básicas

• Suporte para desenvolvimento não-
  linear
• Desenvolvimento distribuído
• Compatibilidade com sistemas/
  protocolos existentes

• Manipulação eficiente de grandes
  projetos
Git: Características Básicas

• Suporte para desenvolvimento não-
  linear
• Desenvolvimento distribuído
• Compatibilidade com sistemas/
  protocolos existentes

• Manipulação eficiente de grandes
  projetos

• Limpo
Git: Características Básicas

• Staging Index
   • HEAD, HEAD^, HEAD^^, HEAD~2
Git: Características Básicas

• Staging Index
   • HEAD, HEAD^, HEAD^^, HEAD~2
• SHA1s ao invés de revision numbers
   • f5f75c652b9c2347522159a87297820103e593e4
   • f5f75c
Git: Instalando
Git: Instalando
• Windows
  • http://code.google.com/p/msysgit/
Git: Instalando
• Windows
  • http://code.google.com/p/msysgit/
• Mac OS X
  • http://code.google.com/p/git-osx-installer
Git: Instalando
• Windows
  • http://code.google.com/p/msysgit/
• Mac OS X
  • http://code.google.com/p/git-osx-installer
• Linux
  • De acordo com sua distro favorita ou à
     partir do fonte
Git: Configurando
Git: Configurando
Git: Configurando




Usar --global faz com que a mesma configuração seja usada em todos
                             os projetos
Git: Iniciando um repositório
Git: Iniciando um repositório
Git: Iniciando um repositório




 O diretório objects armazena todos os objetos do Git: commits, trees,
                              blobs, etc.
Git: Workflow básico
Git: Workflow básico
Git: Workflow básico




   git status, git add, git commit, git log, git commit -a
Git: Workflow básico
Git: Workflow básico




   git diff, git blame, git reset, git commit -v, .gitignore
Git: Branching
Git: Branching
Git: Branching




git branch, git checkout, gitk, git merge, git branch -d/-D, git checkout -b
Git: Branching
Git: Branching




 git merge com modificações no mesmo arquivo
Git: Branching
Git: Branching




 git rebase, merge conflicts, git rebase --continue
Git: Remote Workflow
Git: Remote Workflow
Git: Remote Workflow




     git clone, git push, git pull, git fetch
Git: Tópicos Avançados

• git commit --interactive
• git rebase --interactive
• bisect
• cherry-pick
• git commit --ammend
• reflog
Perguntas?
Obrigado!
 @arthurgeek




http://busk.com
     Estamos contratando! ;)

Git - Controle de Versões do Jeito Certo