Superando o GitFlow Workflow de git focado na entrega de valor em outsourcing
com equipes distribuídas.
Luiz [email protected]
Renato Reva [email protected]
Gitflow
master
release
development
feature 1
feature 2
feature 3
1.0
Gitflow
master
release
development
1.0
hotfix
1.1
Contexto de Trabalho /Necessidades
● Equipe distribuída
● Equipe distribuída
● Fluxo contínuo/kanban
● Equipe distribuída
● Fluxo contínuo/kanban
● CI&CD
● Equipe distribuída
● Fluxo contínuo/kanban
● CI&CD
● Independência entre features
● Equipe distribuída
● Fluxo contínuo/kanban
● CI&CD
● Independência entre features
● Feedback constante
ProblemasEnfrentados
● Conflitos inesperados
● Conflitos inesperados
● Imprevisibilidade na integração
● Conflitos inesperados
● Imprevisibilidade na integração
● Dificuldade em entregar demandas isoladas
● Conflitos inesperados
● Imprevisibilidade na integração
● Dificuldade em entregar demandas isoladas
● Complexidade da árvore
● Conflitos inesperados
● Imprevisibilidade na integração
● Dificuldade em entregar demandas isoladas
● Complexidade da árvore
● Merge commit
EstratégiasAdotadas
● Criar branches a partir do branch master
git checkout -b MY-FEATURE
master
development
feature
● Criar branches a partir do branch master
● Branch auxiliar
git checkout -b MY-FEATURE-dev
● Criar branches a partir do branch master
● Branch auxiliar
● Rebase antes de fazer merge
git fetchgit rebase origin/dev
● Criar branches a partir do branch master
● Branch auxiliar
● Rebase antes de fazer merge
● Reset em relação ao origin branch
git checkout devgit reset --hard origin/devgit merge MY-FEATURE-dev
● Criar branches a partir do branch master
● Branch auxiliar
● Rebase antes de fazer merge
● Reset em relação ao origin branch
● Atualização constante com relação ao branch master
git fetchgit rebase origin/mastergit push origin MY-FEATURE -f
Dicas e BoasPráticas
● Voltar o comando
git reset --hard HEAD@{1}
● Voltar o comando
● Resolução de conflito sem abrir o arquivo
git checkout [--ours || --theirs]
git add -ugit rebase [--continue || --skip]
● Voltar o comando
● Resolução de conflito sem abrir o arquivo
● Resetar branches de integração
git reset --hard origin/master
● Voltar o comando
● Resolução de conflito sem abrir o arquivo
● Resetar branches de integração
● Evitar resolução repetida de conflitos
rerereReuse Recorded Resolution
git config --global rerere.enabled true
● Voltar o comando
● Resolução de conflito sem abrir o arquivo
● Resetar branches de integração
● Evitar resolução repetida de conflitos
● Pull com rebase
git pull --rebase
git config --global pull.rebase true