git - controle de versões do jeito certo
DESCRIPTION
Palestra de Introdução ao Git que apresentei no Rails Summit 09. Infelizmente, sem os screencasts no final, os slides não fazem muito sentido.TRANSCRIPT
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
• 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: Vantagens
VCS: Como funciona?
VCS: Como funciona?
Repositório
VCS: Como funciona?
Pedro
Repositório
VCS: Como funciona?
Pedro
Repositório
Checkout
VCS: Como funciona?
Pedro
Repositório
Modifica
Checkout
VCS: Como funciona?
Pedro
Repositório
Modifica
Repositório
CommitC
heckout
Lorem
Ipsum
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
Repositório
Checkout
Commit
Checkout C
ommit
Checkout
Comm
it
Checkout
Commit
Checkout
Commit
Pedro Sílvia
Ana Carlos
Guilherme
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
Pull
Push
Pull
Push
Push
Push
Push
Pull
Pedro
Ana
Carlos
Sílvia
Guilherme
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
• 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: Características Básicas
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?