Este documento fornece uma introdução ao sistema de controle de versão Git, abordando tópicos como instalação, configuração, iniciar um projeto, áreas do Git, commits, gerenciamento de índice, branches, merges, repositórios remotos e extras.
3. Dica:
Não se preocupe,
o início sempre é difícil!
4. Introdução
História: Criado por Linus Torvalds para gerenciar o
desenvolvimento do kernel do linux (antes era utilizado o bitKeeper).
5. Introdução
Git não tem nada a ver com o Subversion .
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 SHA1 para identificação dos commits.
Dificilmente ocorre perca de arquivos no git.
9. Configuração
Definindo nome e email para identificar autor
gtcni -goa ue.ae"anrj"
i ofg -lbl srnm vgevs
gtcni -goa ue.mi "anrj@mi.
i ofg -lbl sreal vgevsgalc
o"
m
Verificando
ct/sr/anr.icni
a Uesvge/gtofg
Highlight
/aqio.icni
/ruv gtofg
clr at
oo: uo
14. Continuando...
Adicionando arquivos ao índice
gtad.fl.x /aea aqiofl.x
i d iett /pns ruv iett
gtad.".x"/tdsaqio .x
i d *tt /oo ruvs tt
gtad./Tdsaqio d wrigdrcoy
i d /oo ruvs o okn ietr
Após adicionar os arquivos ficam como new file, ou seja,
a serem adicionados no próximo commit.
Retirar do índice
gtr -cce fl.x
i m -ahd iett
Commit
gtcmi - "rmiocmi"
i omt m Pier omt
Log
gtlg
i o
15. Dica:
Sempre crie commits com
mensagens descrevendo a alteração
feita no projeto!
16. 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.
17. Estrutura do commit
http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is
19. Gerenciando o índice
Imagine as ações abaixo:
Mfcçon aqiofl.x
oiaã o ruv iett
gtadfl.x
i d iett
Como desfazer?
gtrstHA fl.x
i ee ED iett
E para voltar ao ínicio (antes de modificiar o arquivo
file.txt)
gtceku - fl.x
i hcot - iett
Para todos os arquivos
gtrstHA
i ee ED
/tdso aqio vla pr sau utakd
/oo s ruvs otm aa tts nrce
20. Gerenciando o índice
Jogar fora último commit
gtrstHA~ -hr
i ee ED1 -ad
/aoaacbç aot pr ocmi atro
/gr aea pna aa omt neir
Esta operação parece destrutiva mas não é:
gtrfo
i elg
/gad tdsa cia qefrmjgdsfr
/ura oa s oss u oa oaa oa
gtmre<sa d cmi dsjd >
i eg h1 o omt eeao
Voltar arquivos de commit para o índice
gtrstHA~
i ee ED1
21. Gerenciando o índice
Remover arquivos do índice
gtr -cce <fl >
i m -ahd ie
Limpar arquivos do working directory
gtcen-
i la f
Mais operações de índice...
gtad-
i d i
22. 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.
23. Stash
Criando um stash anônimo
gtsah
i ts
Listando
gtsahls
i ts it
Para voltar ao desenvolvimento após corrigir o bug
descrito na situação acima
gtsahapy
i ts pl
Removendo stash
gtsahcer
i ts la
24. Stash
Criando stash e definindo uma identificação
gtsahsv "aed ag"
i ts ae fzno lo
Outros comandos para stash
gtsahapysah[]
i ts pl ts@0
/vlapr osahdsjd
/ot aa ts eeao
gtsahpp
i ts o
/tr d lsa alc eaaaosah
/ia a it, pia pg ts
gtsahdo sah0
i ts rp ts{}
/rtr d lsad sah
/eia a it e ts
25. Branch
Objetivo de trabalhar com branches: separar
funcionalidades durante o desenvolvimento.
Troca de contexto sem atrito
Criando branch chamando "desenvolvimento"
gtceku - "eevliet"
i hcot b dsnovmno
Trocando de master para "desenvolvimento"
gtceku dsnovmno
i hcot eevliet
Listando
gtbac
i rnh
26. Branch
Visualizando histórico
gtlg-gah
i o -rp
Unindo alterações feitas em um branch (ex:
"desenvolvimento") para o master
gtceku mse
i hcot atr
gtmredsnovmno
i eg eevliet
Removendo branch
gtgtbac - dsnovmno
i i rnh d eevliet
GUI para visualização
gt -al&
ik -l
Mesclando pequenos commits em um único
gtmre<bac >-sus
i eg rnh -qah
27. Dica:
Evite trabalhar no master. O ideal é
que cada branch tenha uma
funcionalidade.
http://git-scm.com/book/en/Git-Branching-Branching-Workflows
28. 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.
gtrbs mse
i eae atr
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:
gtrbs -cniu
i eae -otne
29. 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.
30. Merge
Rebase
http://git-scm.com/book/en/Git-Branching-Rebasing
31. Respositórios remotos
Clonando um repositório
gtcoetse.i tse
i ln et/gt et2
Mostrando origem
gtrmt
i eoe
gtrmt so oii
i eoe hw rgn
Criando branch local a partir de branch remoto
gtceku - dsnovmnooii/eevli
i hcot b eevliet rgndsnov
mno
et
Exibindo braches locais e remotos
gtbac -
i rnh a
Enviando para repositório remoto
gtps oii mse
i uh rgn atr
32. Modelo Centralizado
Cenário: Dois desenvolvedores, cada um com uma
cópia local e um servidor remoto.
Criando repositório no servidor
mdrtsegt
ki et.i
c tsegt
d et.i
gtii -br
i nt -ae
Adicionando permissão de acesso
c ~.s
d /sh
eh "hv rad uuro > atrzdky
co cae s o sai" > uoie_es
Chave ssh no usuário
ct~.s/drapb
a /shi_s.u
33. Modelo Centralizado
No usuário, adicionando remote ao repositório local
gtrmt adoii vge@7.61018/oe
i eoe d rgn anr121.0.9:hm
/i/eoioistsegt
gtrpstro/et.i
Trazendo alterações do repositório remoto para um
branch especial
gtfc oii mse
i eh rgn atr
Fech seguido de merge
gtpl
i ul
36. Extras
Tags
gttgv.
i a 10
gtps oii v.
i uh rgn 10
gtps -tg
i uh -as
gt- <bac >v.
i b rnh 08
Logs
gtlg-sah
i o -ts
gtlg-pet=nln
i o -rtyoeie
gtlg-pet=omt"%n%d % -%"
i o -rtyfra:[a a] h s
gtlg-pet=omt"h-%"-gah
i o -rtyfra:% s -rp
gtlg-sne3.iue
i o -ic=0mnts
gtlg-sne4hus-utl2hus
i o -ic=.or -ni=.or
gtlg-sne4hus-utl2hus-bfr=
i o -ic=.or -ni=.or -eoe
"030-5
21-31"
37. 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
Github é a melhor forma de mostrar seu trabalho
como desenvolvedor, seja para empresas ou pessoas
38. Referências
Git SCM - Pro Git Book
Fabio Akita - Screencast - Começando com Git
Git for Computer Scientists
Git Documentation