Version all
the things
Recurso 150770
conhecida como
Andréa Zambrana
front-end lead @ via varejo
@akfzambrana
Recurso 150770
conhecida como
Andréa Zambrana
front-end lead @ via varejo
@akfzambrana
@abc_developers
Gosto de GIFs
Controle de versão
O que é?
Voltar / recuperar
Conhecer a história
Comparar
De quem é a culpa!
Tá, mas e quais
arquivos posso
controlar?
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
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
Workshop não
era 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
Formas de utilização
Interface gráfica
https://git-scm.com/downloads/guis
Terminal
Console
Como o Git funciona
As áreas do git
Stashing area
Limbo Workspace Stagging area Repository Remote/Origin
Área de
trabalho
Área de
preparação
Diretório
.git
Servidor
Upside down
parallel universe
Limbo
Área de empilhar/
cantinho da bagunça
Local Nuvem
Os estados
de um arquivo
Untracked Modificado Preparado Consolidado
Empilhado
Stashing area
Limbo Workspace Stagging area Repository [.git] Remote/Origin
Consolidado
Vamos falar
de configurações
gitconfig
Sistema
--system
Usuário
--global
Projeto
<sem parámetro>
$ git config --system core.editor vim
$ git config --global user.name "Ana Silva"
$ git config --global user.email usr@url.com
$ git config user.email usr2@url.com
Como visualizar as configurações
$ git config --list
Ajuda sobre qualquer comando
$ git comando --help
Comando para todos os arquivos
$ git comando .
Hands on
Como criar um repositório
$ mkdir nome-diretorio
$ cd nome-diretorio
$ git init
Como usar um repositório remoto
$ git clone url-repositorio
$ git clone url-repositorio
» outro-nome-projeto
sshhttp
Chave pública
+
chave privada
Usuário
+
senha
Ver status do repositório
$ git status
Preparando um arquivo
$ git add nome-do-arquivo
$ git rm nome-do-arquivo
$ git add .
Consolidando uma versão
$ git commit
$ git commit -m “Mensagem”
behind
pra trás
ahead
pra frente
Corrigindo o último commit
$ git commit --amend
$ git commit --amend »
--author="Name <email@url.com>"
Adicionando e consolidando
$ git commit -am “Mensagem”
Mensagens que façam
sentido e ajudem a
saber o que foi feito
Nada de:
“correção”
“bugfix”
“alteração”
“oops”
Empilhando bagunçinhas
$ git stash
$ git stash nome-arquivo.txt
$ git stash save “mensagem”
Trabalhando com as bagunças
$ git stash apply
$ git stash pop
$ git stash list
$ git stash clear
Visualizando o histórico
$ git log
$ git log --oneline
$ git log --graph --oneline
Visualizando as alterações
$ git diff
$ git diff nome-arquivo.txt
Visualizando as alterações
$ git show hash-commit
Desfazendo alterações
$ git checkout .
$ git checkout arquivo.txt
$ git clean -fd
$ git checkout hash-commit
Voltando a um commit específico
Desfazendo arquivos preparados
$ git reset .
$ git reset arquivo.txt
Desfazendo commits
$ git reset HEAD~n
$ git reset HEAD~3
$ git reset HEAD~3 --hard
Conhecendo o servidor
$ git remote -v
Adicionando um servidor
$ git remote add origin
» url-repositorio
Trocando o servidor
$ git remote set-url origin
» url-repositorio
Enviando alterações ao servidor
$ git push
$ git push -u
$ git push origin
Sincronizando com o servidor
$ git fetch
$ git fetch -p
Trazendo alterações do servidor
$ git pull
$ git pull --rebase
$ git rebase
Branchs
Literalmente galhos
Cópias completas
do repositório
FeatureZ
Bugfix A
Criando uma branch
$ git branch nome-branch
$ git checkout -b nome-branch
Atenção!
A branch será uma
cópia da original
Trocando de branch
$ git checkout nome-branch
Tags
Branchs imutáveis
Listando as tags
$ git tag
$ git tag -l
Trabalhando com uma tag
$ git checkout nome-tag
Mesclando branchs
Let’s merge
Misturando branchs
$ git merge nome-branch
$ git pull nome-branch
Merge fast-forward
$ git merge nome-branch
Merge no fast-forward
$ git merge --no-ff nome-branch
E se der conflito?
Meld
http://meldmerge.org/
Workflows com Git
Centralizado
Feature branch
Gitflow
Fork
Centralizado
Mais simples
FeatureA
BugfixB
Master
Rebase
Feature branch
Master
Ana
Bia
FeatureA
Bugfix B
Gitflow
Feat A
v0.3
Bug Z
Master
v0.1
Desenv
v0.2 v0.3
Workflow Via Varejo
Gitflow + feature branch
Feat A
v0.3
Bug Z
Master
v0.1 v0.2 v0.3
Desenv
Bug Z
hotfix
v1.0.1
Feat A
Master
v1.0.0
release
v1.1.0
v1.1.0v1.0.1
Por quê?
Liberdade pro negócio
nois
fica
como?
Para estudar em casa
$ git bisect
$ git reflog
Livro “Pro Git”
Scott Chacon e Ben Straub
Original em inglês: https://git-scm.com/book/en/v2
Tradução de Eric Douglas: https://leanpub.com/pro-git
Leitura!
Ajude o time
Vlw!!!
@akfzambranaVia Varejo
2018

Version all the things - Workshop