Quem somos
Renato e Débora
Centro de Informática - UFPE
Not git experts
Slide 3
Slide 3 text
Labcodes
Software studio de
Recife para o
mundo
Tecnologias que
trabalhamos
Labcodes e
Comunidade
Slide 4
Slide 4 text
Massa, e git?
Slide 5
Slide 5 text
Quem ja trabalhou com git?
Quem ja teve dificuldades?
Quem ja apagou o repositorio?
Slide 6
Slide 6 text
"Isto é Git. Ele controla o trabalho
colaborativo em projetos através
de um belo modelo distribuído de
árvore de teoria dos grafos.
Massa, como usamos?
Nem ideia. Decore este
comandos e digite-os para
sincronizar tudo. Se acontecerem
erros, salve o seu trabalho em
outro lugar, delete o projeto e
download uma nova cópia do
repositório."
Slide 7
Slide 7 text
Roteiro
Primeiros passos
Git básico
Entendendo Git
Git branching
Branching models/Git workflows
Desfazendo coisas
Dicas e truques
Slide 8
Slide 8 text
Primeiros passos
Slide 9
Slide 9 text
Primeiros passos
Controle de versão
Git background
Instalando Git
Slide 10
Slide 10 text
Controle de versão
Uma estratégia de backup.
O controle de versão é um sistema que registra
as mudanças feitas em um arquivo ou um
conjunto de arquivos ao longo do tempo de
forma que você possa recuperar versões
específicas.
Slide 11
Slide 11 text
Controle de versão
Uma estratégia de backup.
O controle de versão é um sistema que registra
as mudanças feitas em um arquivo ou um
conjunto de arquivos ao longo do tempo de
forma que você possa recuperar versões
específicas.
Slide 12
Slide 12 text
Controle de versão
Uma estratégia de backup.
O controle de versão é um sistema que registra
as mudanças feitas em um arquivo ou um
conjunto de arquivos ao longo do tempo de
forma que você possa recuperar versões
específicas.
Pode ser usado por qualquer um.
Slide 13
Slide 13 text
Controle de versão
E para trabalhar em equipes?
Sistemas de Controle de Versão Centralizados.
Slide 14
Slide 14 text
Controle de versão
Sistemas de
Controle de Versão
Distribuídos.
Git!
Slide 15
Slide 15 text
Git histórico e background
Rompimento da comunidade Linux com a
empresa do sistema de controle de versão
distribuído usado (BitKeeper).
Criação do Git por Linus Torvalds.
Características:
Velocidade e Design simples
Suporte robusto a desenvolvimento não linear
Totalmente distribuído
Lida eficientemente com grandes projetos
Slide 16
Slide 16 text
Git
Esqueça os outros VCSs que você já usou.
A maior diferença está na forma de tratar os
dados.
SVN: Armazena a informação como uma lista de
mudanças por arquivo. Salva as diferenças.
Git: Considera que os dados são conjuntos de
snapshots, ou seja, captura o estado atual do
seu projeto a cada mudança feita (commit).
Slide 17
Slide 17 text
Git
Slide 18
Slide 18 text
Git
Velocidade para realizar operações no Git, que
precisam apenas de recursos e arquivos locais
Ex: navegar no histórico do projeto
Liberdade para trabalhar e fazer commits
offline.
Integridade. Não é possível mudar nada sem
que o Git tenha conhecimento. Assim
informação não é perdida ou corrompida.
Slide 19
Slide 19 text
Instalando git
LINUX
$ apt-get install git
Slide 20
Slide 20 text
Instalador gráfico do Git:
http://sourceforge.net/projects/git-osx-
installer/
Via MacPorts (http://www.macports.org)
$ sudo port install git-core +svn +doc +bash_completion +gitweb
Instalando git
MAC
Slide 21
Slide 21 text
Projeto msyspit
http://msysgit.github.com
Após concluir a instalação, você terá tanto uma
versão command line (linha de comando,
incluindo um cliente SSH que será útil depois) e
uma GUI padrão.
Instalando git
WINDOWS
Slide 22
Slide 22 text
git config
Permite ler e definir variáveis de configuração
Diferentes níveis de armazenamento das
variáveis:
/etc/gitconfig
~/.gitconfig
.git/config
Configurações iniciais
WINDOWS
Adicionar arquivos
MONITORANDO NOVOS ARQUIVOS
Crie o arquivo index.html e adicione na staged
area
Slide 36
Slide 36 text
$ git add index.html
$ git status
Slide 37
Slide 37 text
Adicionar arquivos
MONITORANDO ARQUIVOS MODIFICADOS
Modificar o arquivo existente (README) e
adicionar em staged area.
Modificar novamente o mesmo arquivo.
Slide 38
Slide 38 text
$ git status
$ git add
$ git commit
Slide 39
Slide 39 text
Adicionar arquivos
VISUALIZANDO DIFERENÇAS
Verificar o diff entre o arquivo alterado e o que
está commitado (repositório).
Ver a diferença entre o que tá em staged e o já
commitado (repositório)
Adicionar por partes
Resumo
O que é um controle de versão
Git é um controle de versão distribuído
Instalar e configurar
Criar repositórios
Adicionar, acompanhar, commitar arquivos
Trabalhar com repositórios remotos
Git é um sistema de
controle de versão
distribuído
Slide 56
Slide 56 text
Git é um sistema de
controle de versão
Slide 57
Slide 57 text
Git é um content
tracker
Slide 58
Slide 58 text
Git é um persistent
map
Slide 59
Slide 59 text
Git é um map
Valores e chaves
Os valores são o conteúdo. Qualquer sequencia
de byte.
Chaves são hashes(checksum)
SHA1
Único
Praticamente impossível de ser repetido
Slide 60
Slide 60 text
git-tutorial $ git hash-object "Python Brasil"
fatal: Cannot open 'Python Brasil': No such file or directory
git-tutorial $ echo "Python Brasil"
Python Brasil
git-tutorial $ echo "Python Brasil" | git hash-object --stdin
bbf29edf5f31251c46279b764cf4fed25519b429
Slide 61
Slide 61 text
Todo objeto em Git tem
seu próprio SHA1
Slide 62
Slide 62 text
Git é um persistent
map
Slide 63
Slide 63 text
Git é um persistent map
De onde vem a persistência? Tudo tá sendo
salvo em algum lugar.
Slide 64
Slide 64 text
$ git-tutorial $ echo "Python Brasil" | git hash-object —stdin -w
$ git init
$ ls -a
$ open .git
Esses são todos os
objetos de Git! Parabéns,
agora você já sabe o
modelo de Git completo!
Slide 86
Slide 86 text
Essa estrutura lembra
alguma coisa?
Slide 87
Slide 87 text
Git é um persistent
map
Slide 88
Slide 88 text
Git é um content
tracker
Slide 89
Slide 89 text
Git branching
Slide 90
Slide 90 text
Git branching
Branch e merge
Hitórico
HEAD
Rebase
Slide 91
Slide 91 text
Git é um content
tracker
Slide 92
Slide 92 text
Git é um sistema de
controle de versão
Slide 93
Slide 93 text
No content
Slide 94
Slide 94 text
No content
Slide 95
Slide 95 text
Branch master
Slide 96
Slide 96 text
Branch master
NOVA BRANCH
Slide 97
Slide 97 text
HEAD é apenas uma
referência para uma
branch
Slide 98
Slide 98 text
HEAD
Slide 99
Slide 99 text
HEAD
NOVO COMMIT
Slide 100
Slide 100 text
HEAD
NOVO COMMIT
Slide 101
Slide 101 text
Checkout
Slide 102
Slide 102 text
Checkout
NOVA BRANCH
Slide 103
Slide 103 text
Merge
Slide 104
Slide 104 text
Merge
Slide 105
Slide 105 text
Histórico
Slide 106
Slide 106 text
Histórico
Slide 107
Slide 107 text
Histórico
Slide 108
Slide 108 text
Histórico
MERGE COMMITS
Slide 109
Slide 109 text
Git workflows
Slide 110
Slide 110 text
“Using Git for source control is now an
industry standard, but how do you know
which workflow is best?.”
Slide 111
Slide 111 text
“Git itself is fairly complex to understand,
making the workflow that you use with it
more complex than necessary is simply
adding more mental overhead to
everybody’s day. I would always advocate
using the simplest possible system that will
work for your team and doing so until it
doesn’t work anymore and then adding
complexity only as absolutely needed.”
–Scott Chacon, GitHub
Time
release branches master
develop hotfixes
feature
branches
Derivado do artigo
de Vincent Driessen:
“a successful git
branching model"
Base da extensão
git-flow.
Gitflow
Slide 114
Slide 114 text
Gitflow
O repositório tem duas
branches com vida
infinita:
master
dev
master
develop
Initial production
version
Next production
release
Next production
release
Work in progress
Slide 115
Slide 115 text
Gitflow
"Every merge back into master is a new
production release."
Slide 116
Slide 116 text
Gitflow
SUPPORT BRANCHES
Feature branch, release branch e hotfix branch.
Permite desenvolvimento paralelo no time.
Devem ter um tempo de vida limitado, sou seja,
devem ser deletadas.
Branches normais de Git. Só mudam na forma
de usar.
Slide 117
Slide 117 text
Gitflow
FEATURE BRANCHES
Existe enquanto a feature está em
desenvolvimento.
Branch off Merge back Naming
dev dev #taskId-
description
develop
feature
branches
Major feature
for next
release
Slide 118
Slide 118 text
Gitflow
RELEASE BRANCHES
Existe para preparar para um
release em produção.
Depois de feito o release, nada
pode ser adicionado a esta
branch.
Branch off Merge back Naming
dev
dev
master
release-
[version]
release branches master
develop
Tag
1.0
From this point on,
“next release”
means the release
after 1.0
Bugfixes from
rel. branch may
be continuously
merged back
into develop
Tag
0.1
Tag
0.2
Only bugfixes!
Start of release
branch for
1.0
Slide 119
Slide 119 text
master
develop hotfixes
Tag
1.0
Severe bug
fixed for
production:
hotfix 0.2
Tag
0.1
Tag
0.2
Incorporate
bugfix in develop
Bug em produção que precisa
ser resolvido imediatamente.
Não precisa esperar as coisas
estarem prontas em dev.
Branch off Merge back Naming
master
dev
master
#hotfix-
description
Gitflow
HOTFIX BRANCHES
Slide 120
Slide 120 text
1. Gira muito em torno dos “releases”. Para
projetos onde há deploy todo dia, pode ser
muito custoso.
2. Pode acarretar em long lived branches!
3. Adiciona complexidade
Gitflow
PROBLEMS
Slide 121
Slide 121 text
“A branching strategy itself is a process; a
document. It's the place where, as a team,
you capture your approach and attitude to
the way that you produce, track and ship
code. It can be a simple as a page on the
company wiki – something that gives
structure to the way that you work”
Undoing things
Git é tão flexível que existem diferentes formas
de desfazer coisas, dependendo do que você já
fez e o que você deseja.
Antes de começar a fazer qualquer alteração,
lembre-se de fazer backup das coisas no seu
working directory.
Falar sobre a diferença de git reset,
git checkout e git revert.
Slide 125
Slide 125 text
Undoing things
Principais componentes do repositório:
Slide 126
Slide 126 text
Undoing things
Estão no seu working directory mas você ainda
não subiu?
Undoing things
ALTERAÇÕES NÃO COMMITADAS
Slide 127
Slide 127 text
Undoing things
Estão no seu working directory mas você ainda
não subiu?
git reset git checkout --
Undoing things
ALTERAÇÕES NÃO COMMITADAS
Slide 128
Slide 128 text
Undoing things
Você fez vários commits e quer desfazê-los para
sua branch ficar idêntica a “upstream" desta
branch?
git reset
É uma forma de mover o HEAD da branch para
um commit diferente.
Undoing things
ALTERAÇÕES COMMITADAS
Slide 129
Slide 129 text
Undoing things
git reset HEAD~2
Move para dois commits atrás.
Undoing things
ALTERAÇÕES COMMITADAS
Slide 130
Slide 130 text
Undoing things
É a melhor coisa que você pode fazer quando
você quer desfazer coisas que não compartilhou
ainda com o resto do time. (Não deu git push)
Undoing things
ALTERAÇÕES COMMITADAS
Slide 131
Slide 131 text
Undoing things
Undoing things
ALTERAÇÕES FORAM DADAS PUSH
Slide 132
Slide 132 text
Undoing things
ALTERAÇÕES FORAM DADAS PUSH
Slide 133
Slide 133 text
Undoing things
ALTERAÇÕES FORAM DADAS PUSH
Desfaz um commit criado um novo commit
“negativo”.
É uma forma segura de desfazer erros, sem re-
escrever o histórico publicado.
git revert SHA
git revert -m 1 SHA
Slide 134
Slide 134 text
Undoing things
ALTERAÇÕES FORAM DADAS PUSH
Se for um revert de um merge commit, lembre-
se de dar revert do revert no futuro, se você
deseja dar merge novamente dessa branch.
Faça isso imediatamente depois do revert na
sua branch.
Slide 135
Slide 135 text
Undoing things
O PROBLEMA DE ALTERAR O HISTÓRICO
Se for um revert de um merge commit, lembre-
se de dar revert do revert no futuro, se você
deseja dar merge novamente dessa branch.
Faça isso imediatamente depois do revert na
sua branch.
Slide 136
Slide 136 text
Pronto!
Slide 137
Slide 137 text
Resumo
Git e controle de versão
Instalar e configurar
Criar repositórios e o básico para começar a
trabalhar
Entendendo o modelo de git
Fluxos de trabalho
Resolver tretas!