Version all
the things
Andréa Zambrana
front-end @ via varejo [mobile]
@akfzambrana
http://andreazambrana.com.br
@abc_developers
2017.abcdevelopers.org
@frontladiesabc
facebook.com/front-ladies-abc
Alta troca de ideias sobre desenvolvimento
http://slackfemugabc.herokuapp.com/
Controle de versão
O que é?
Voltar / recuperar
Conhecer a história
Comparar
De quem é a culpa!
Métodos
ctrl + c, ctrl + v
Compressão (gzip, zip, etc)
Sistemas de controle
de versão
VCS (Version Controller System)
Local
Centralizado
Distribuído
Local
Histórico de revisões
Patch database
A
AB
ABCABC
v1
v2
v3
Centralizado
Z ZA ZA
B
ZA
BC
Ana Carol Bia
r1 r2 r3 r4
+A +B +C
Tronco principal
Vantagens
É simples
Conhecimento sobre
quem faz o que
Maior controle
sobre as alterações
Desvantagem
Dependência
do servidor
Merges
são complicados
Distribuído
v3
v2
v1
Remoto
v3
v2
v1
Ana
+A
v3
v2
v1
Carol
+B +C
Vantagens
Cada pessoa
possui uma cópia do
repositório completo
É possível
trabalhar em paralelo
É rápido
Merges com conflitos
são relativamente
simples de resolver
Funciona off-line
Não íamos
falar sobre Git?
Sistema de controle
de versão distribuído
Linus
Torvalds
Rápido
Design simples
Suporte robusto
para desenvolvimento
não linear
Muitos branchs paralelos
100% distribuído
Consegue lidar
com grandes projetos
Legal, mas porque o
Git é melhor?
Snapshots
Não diffs
Operações locais
Quase todas
Questão
de integridade
SHA-1 hash
Nem é tão importante, né?
Reversível
Os três estados
de um arquivo
Modificado
Modified
Preparado
Staged
Consolidado
Commited
As três áreas
Diretório de trabalho
Working directory
Área de preparação
Staging area
Diretório .git
Repositório
Trabalho .git (Repositório)Preparação
Add
Commit
Checkout
Formas de utilização
Interface gráfica
https://git-scm.com/downloads/guis
Terminal
Console
https://github.com
https://bitbucket.org
Configurações
gitconfig
--system
--global
<sem parámetro>
Sistema
Usuário
Projeto
$ git config --global user.name "Nome
Sobrenome"
$ git config --global user.email
usuario@exemplo.com
$ git config --system core.editor vim
$ git config --list
Comandos
$ git <comando> --help
Na dúvida
Repositório local
Criar um repositório local
$ git init
Clonar um repositório
$ git clone <url>
$ git clone <url> nome
Ver o status dos arquivos
$ git status
Preparando arquivos para commit
$ git add dir/arquivo.txt
$ git add .
$ git rm .
$ git add . -a
Consolidando versão
$ git commit -m “Mensagem”
$ git commit -am “Mensagem”
$ git commit --amend
Visualizando as alterações
$ git diff arquivo.ext
Visualizando a história
$ git log
E para saber de
quem é a culpa?
Visualizando histórico linha a linha
$ git blame arquivo.ext
$ git blame arquivo.ext -L 50
Desfazendo alterações
$ git checkout arquivo.ext
$ git checkout .
Desfazendo commits
$ git reset HEAD~1
$ git reset HEAD~2 --hard
Enviando alterações ao servidor
$ git push
$ git push origin
Sincronizando repositório
$ git fetch
$ git fetch origin
$ git fetch -p
Trazendo alterações do servidor
$ git pull
$ git pull origin master
$ git pull --rebase origin master
Literalmente galhos
Branchs
FeatureZ
Bugfix A
Criando branchs
$ git branch nomeBranch
$ git checkout -b nomeBranch
Atenção!
A branch será uma
cópia da original
Vida que segue!
commit, push, pull...
Trocando de branch
$ git checkout nomeBranch
Excluindo branchs
$ git branch -D nomeBranch
$ git push origin :nomeBranch
Merge
Fundindo branchs
$ git merge nomeBranch
$ git merge --no-ff nomeBranch
Mesclando branchs
Merge fast-forward
Merge no fast-forward
E se der conflito?
Meld
http://meldmerge.org/
colocar print do meld para resolver
conflitos
O nome talk era...
Workflows com Git
Centralizado
Feature branch
Gitflow
Fork
Centralizado
Mais simples
Melhor adaptação
para quem veio
de um Sistema de
Controle Centralizado
FeatureA
BugfixB
Master
FeatureA
BugfixB
Master
Rebase
Vantagens
Comparado com SVN
Cada pessoa tem uma
cópia do repositório
Suporte robusto a
branchs e merges
Desvantagens
Tudo no mesmo tronco
Grande chance
de ter conflitos
Feature branch
Master
Ana
Bia
FeatureA
Bugfix B
Vantagens
Trabalho em paralelo
Features e branchs
são independentes
Várias branchs
para cada feature
Merges mais simples
Menor chance
de ter conflitos
Uso de Pull request
E code review
Desvantagem
Maior complexidade
Gitflow
Feat A
v0.3
Bug Z
Master
v0.1
Desenv
v0.2 v0.3
Desvantagem
Alta complexidade
Nossa versão
Bira e Andréa
Feat A
v0.3
Bug Z
Master
v0.1 v0.2 v0.3
Desenv
Master
v0.1
Bug Z
v0.2
v0.3
v0.3
Feat A
Fork
Garfo, literalmente
Utilizado por
projetos open-source
Várias cópias do
repositório oficial
Cada cópia
é independente
Próprio fluxo e branchs
Mudanças enviadas
via Pull request
Podem ser aceitas ou não
Dúvidas?
Vlw!!!
@akfzambranaVia Varejo 2017

Version all the things [Workflows com Git]