Fluxo de
Desenvolvimento de
Software utilizando Git
Bruno Ricardo Siqueira
Agenda
Agenda
● O palestrante
● CI&T
● GIT
o Origem e evolução
o Diferenciais
o Ferramentas
o Quem está utilizando
Agenda
● Fluxos de desenvolvimento
o Centralizado
o Integração gerenciada
o Dictator and Lieutenants
o Feature Branch
o Gitflow
Agenda
● Conclusões
● Perguntas
O palestrante
Bruno Ricardo Siqueira.
Desenvolvedor web e evangelista
PHP no Brasil. Entusiasta Docker.
Apaixonado por Git.
Trabalhando com internet há 8 anos,
Bacharel em Sistemas da
Informação formado pelo ICMC -
USP, trabalhando atualmente na
empresa CI&T, desempenhando o
papel de Engenheiro de Software.
O palestrante
Colabore.
Inove.
Transforme.
Ci&T
Git
Git - Origem e evoluçãoGit - Origem e evolução
● 2002 - 2005: Linux + BitKeeper
● Abril/2005: Linus Torvalds cria
o Git
● Junho/2005: Git passa a ser o
gerenciador oficial do Kernel do
Linux
Git - Origem e evolução
● Julho/2005: Junio Hamano
passa a ser o mantenedor
oficial
● Dezembro/2005: Versão 1.0
● Fevereiro/2008: Nasce a
ferramenta colaborativa GitHub
● Outubro/2011: BitBucket
adiciona suporte ao Git
Git - Origem e evolução
20102009 2014
2,4%
Fonte: Eclipse Community Survey - http://eclipse.dzone.com/articles/eclipse-community-survey-2014
33,3%
Em 2015 já são
mais de 20 milhões
de repositórios e
9 milhões de usuários.
Git - Origem e evolução
Em 2013 apenas no GitHub
existiam mais de
10 milhões de
repositórios
ativos.
Git: an
unpleasant
or
contemptible
person.
“I'm an egotistical bastard, and I
name all my projects after myself.
First Linux, now git.”
- Linus Torvalds
Git - Origem e evolução
Git - Diferenciais
● Distribuído
● Integridade do código garantida
● Staging area
● Licenciado sob GNU Public
License v 2.0: OPEN
SOURCE!!!
Git - Diferenciais
● Branching and Merging
o mudança de contexto
facilitada
o codebases baseadas em
regras
● Leve: baixo consumo de
memória
● Robusto: criado para lidar com
codebases gigantescas
● Rápido, muito rápido
Fonte: Git Website - http://git-scm.com
Flexível
ao
extremo.
Git - Ferramentas
Git - Quem está utilizando?
● Empresas de tecnologia e
software
● Empresas de telecomunicações
● ...
Fluxos de
desenvolvimento
Fluxos de desenvolvimento - Centralizado
● Mesmo estilo do Subversion
● Repositório central
compartilhado
● Bom para efetuar a transição do
SVN para o Git
Mesmo
fluxo do
Subversion
só que ainda
melhor!
Fluxos de desenvolvimento - Centralizado
Joffrey cria um repositório central:
ssh joffrey@westeros git init --bare
/kings/landing/iron-throne.git
Cersei e Tywin clonam o repositório central:
git clone cersei@westeros/kings/landing/iron-
throne.git
git clone tywin@westeros/kings/landing/iron-
throne.git
Joffrey trabalha em seu repositório
local:
git status # View the state of the repo
git add <some-file> # Stage a file
git commit # Commit a file</some-file>
Fluxos de desenvolvimento - Centralizado
Cersei trabalha em sua feature em
separado, também em seu
repositório local.
Joffrey publica sua funcionalidade:
git push origin master
Fluxos de desenvolvimento - Centralizado
Cersei tenta publicar sua
funcionalidade mas tem sua
requisição recusada.
Cersei faz um rebase de suas
alterações em cima das alterações
de Joffrey:
git pull --rebase origin master
Fluxos de desenvolvimento - Centralizado
Cersei soluciona os conflitos,
adiciona suas alterações:
git add <some-file>
git rebase --continue
Fluxos de desenvolvimento - Centralizado
Cersei publica suas alterações:
git push origin master
Fluxos de desenvolvimento - Integração gerenciada
● Somente o mantenedor do
efetua commits no repositório
original
● Contribuidores trabalham em
forks.
● Integrações são solicitadas via
pull request e efetuadas pelo
mantenedor
● GitHub, BitBucket, GitLab, ....
Fluxos de desenvolvimento - Dictator and Lieutenants
● Tenentes gerenciam
repositórios dos módulos
● Contribuidores trabalham em
forks dos módulos
● Ditador gerencia integrações
entre os módulos
● Linux kernel
Fluxos de desenvolvimento - Feature branch
● Features desenvolvidas em
branches separadas
● Mantenedor efetua merge das
features finalizadas
● Merge e/ou pull requests
● CI&T, Aptor, Google, PayPal,
Facebook...
Cersei inicia uma nova
funcionalidade:
git checkout -b cersei-feature master
git status
git add <some-file>
git commit
Fluxos de desenvolvimento - Feature branch
Cersei termina seu expediente e
envia sua feature ao repositório
remoto:
git push -u origin cersei
Fluxos de desenvolvimento - Feature branch
Cersei finaliza sua funcionalidade e
envia ao repositório remoto central:
git push
Joffrey recebe um pull request e o
analiza.
Fluxos de desenvolvimento - Feature branch
Joffrey efetua o merge da feature de
Cersei:
git checkout master
git pull
git pull origin cersei-feature
git push
Cersei pode efetuar alterações em
sua feature, recomeçando o fluxo.
Fluxos de desenvolvimento - GitFlow
● Vincent Driessen (2010)
● Estabelece uma padronização
para o fluxo de feature branches
● master, develop, feature/*,
hotfix/*
● CI&T, Motorola, Google,
Facebook, Microsoft,
Atlassian...
Fluxos de desenvolvimento - GitFlow
Fluxos de desenvolvimento - GitFlow
GitFlow utilizado em ferramentas
como SourceTree e SmartGit
Conclusões
Conclusões
● Objetivos definidos
● A ferramenta deve se adaptar à
sua realidade
● Clareza nos processos
● Evitar burocratização
desnecessária
● Manter comunicação ativa
entre os membros do time
Conclusões
● Definir métricas
● Avaliar necessidades de
adaptação do fluxo
● Foco na eficiência
● Qualidade nas entregas
● Criar e manter documentação
do fluxo: gráficos, checklists...
Dúvidas?
Bruto
mesmo!
http://www.ciandt.com/card/vagas-abertas
bricardo@ciandt.com

Fluxo de desenvolvimento de software utilizando Git

  • 1.
    Fluxo de Desenvolvimento de Softwareutilizando Git Bruno Ricardo Siqueira
  • 2.
  • 3.
    Agenda ● O palestrante ●CI&T ● GIT o Origem e evolução o Diferenciais o Ferramentas o Quem está utilizando
  • 4.
    Agenda ● Fluxos dedesenvolvimento o Centralizado o Integração gerenciada o Dictator and Lieutenants o Feature Branch o Gitflow
  • 5.
  • 6.
  • 7.
    Bruno Ricardo Siqueira. Desenvolvedorweb e evangelista PHP no Brasil. Entusiasta Docker. Apaixonado por Git. Trabalhando com internet há 8 anos, Bacharel em Sistemas da Informação formado pelo ICMC - USP, trabalhando atualmente na empresa CI&T, desempenhando o papel de Engenheiro de Software. O palestrante
  • 9.
  • 11.
  • 12.
    Git - Origeme evoluçãoGit - Origem e evolução ● 2002 - 2005: Linux + BitKeeper ● Abril/2005: Linus Torvalds cria o Git ● Junho/2005: Git passa a ser o gerenciador oficial do Kernel do Linux
  • 13.
    Git - Origeme evolução ● Julho/2005: Junio Hamano passa a ser o mantenedor oficial ● Dezembro/2005: Versão 1.0 ● Fevereiro/2008: Nasce a ferramenta colaborativa GitHub ● Outubro/2011: BitBucket adiciona suporte ao Git
  • 14.
    Git - Origeme evolução 20102009 2014 2,4% Fonte: Eclipse Community Survey - http://eclipse.dzone.com/articles/eclipse-community-survey-2014 33,3%
  • 15.
    Em 2015 jásão mais de 20 milhões de repositórios e 9 milhões de usuários. Git - Origem e evolução Em 2013 apenas no GitHub existiam mais de 10 milhões de repositórios ativos.
  • 16.
  • 17.
    “I'm an egotisticalbastard, and I name all my projects after myself. First Linux, now git.” - Linus Torvalds Git - Origem e evolução
  • 18.
    Git - Diferenciais ●Distribuído ● Integridade do código garantida ● Staging area ● Licenciado sob GNU Public License v 2.0: OPEN SOURCE!!!
  • 19.
    Git - Diferenciais ●Branching and Merging o mudança de contexto facilitada o codebases baseadas em regras ● Leve: baixo consumo de memória ● Robusto: criado para lidar com codebases gigantescas ● Rápido, muito rápido Fonte: Git Website - http://git-scm.com
  • 20.
  • 21.
  • 22.
    Git - Quemestá utilizando? ● Empresas de tecnologia e software ● Empresas de telecomunicações ● ...
  • 23.
  • 24.
    Fluxos de desenvolvimento- Centralizado ● Mesmo estilo do Subversion ● Repositório central compartilhado ● Bom para efetuar a transição do SVN para o Git
  • 25.
  • 26.
    Fluxos de desenvolvimento- Centralizado Joffrey cria um repositório central: ssh joffrey@westeros git init --bare /kings/landing/iron-throne.git Cersei e Tywin clonam o repositório central: git clone cersei@westeros/kings/landing/iron- throne.git git clone tywin@westeros/kings/landing/iron- throne.git
  • 27.
    Joffrey trabalha emseu repositório local: git status # View the state of the repo git add <some-file> # Stage a file git commit # Commit a file</some-file> Fluxos de desenvolvimento - Centralizado Cersei trabalha em sua feature em separado, também em seu repositório local.
  • 28.
    Joffrey publica suafuncionalidade: git push origin master Fluxos de desenvolvimento - Centralizado Cersei tenta publicar sua funcionalidade mas tem sua requisição recusada.
  • 29.
    Cersei faz umrebase de suas alterações em cima das alterações de Joffrey: git pull --rebase origin master Fluxos de desenvolvimento - Centralizado
  • 30.
    Cersei soluciona osconflitos, adiciona suas alterações: git add <some-file> git rebase --continue Fluxos de desenvolvimento - Centralizado Cersei publica suas alterações: git push origin master
  • 31.
    Fluxos de desenvolvimento- Integração gerenciada ● Somente o mantenedor do efetua commits no repositório original ● Contribuidores trabalham em forks. ● Integrações são solicitadas via pull request e efetuadas pelo mantenedor ● GitHub, BitBucket, GitLab, ....
  • 32.
    Fluxos de desenvolvimento- Dictator and Lieutenants ● Tenentes gerenciam repositórios dos módulos ● Contribuidores trabalham em forks dos módulos ● Ditador gerencia integrações entre os módulos ● Linux kernel
  • 33.
    Fluxos de desenvolvimento- Feature branch ● Features desenvolvidas em branches separadas ● Mantenedor efetua merge das features finalizadas ● Merge e/ou pull requests ● CI&T, Aptor, Google, PayPal, Facebook...
  • 34.
    Cersei inicia umanova funcionalidade: git checkout -b cersei-feature master git status git add <some-file> git commit Fluxos de desenvolvimento - Feature branch Cersei termina seu expediente e envia sua feature ao repositório remoto: git push -u origin cersei
  • 35.
    Fluxos de desenvolvimento- Feature branch Cersei finaliza sua funcionalidade e envia ao repositório remoto central: git push Joffrey recebe um pull request e o analiza.
  • 36.
    Fluxos de desenvolvimento- Feature branch Joffrey efetua o merge da feature de Cersei: git checkout master git pull git pull origin cersei-feature git push Cersei pode efetuar alterações em sua feature, recomeçando o fluxo.
  • 37.
    Fluxos de desenvolvimento- GitFlow ● Vincent Driessen (2010) ● Estabelece uma padronização para o fluxo de feature branches ● master, develop, feature/*, hotfix/* ● CI&T, Motorola, Google, Facebook, Microsoft, Atlassian...
  • 38.
  • 39.
    Fluxos de desenvolvimento- GitFlow GitFlow utilizado em ferramentas como SourceTree e SmartGit
  • 40.
  • 41.
    Conclusões ● Objetivos definidos ●A ferramenta deve se adaptar à sua realidade ● Clareza nos processos ● Evitar burocratização desnecessária ● Manter comunicação ativa entre os membros do time
  • 42.
    Conclusões ● Definir métricas ●Avaliar necessidades de adaptação do fluxo ● Foco na eficiência ● Qualidade nas entregas ● Criar e manter documentação do fluxo: gráficos, checklists...
  • 43.
  • 44.