Explorando o
Trunk Based Development
     Daniel Wildt       Carlos Lopes       Guilherme Lacerda
 Trevisan Tecnologia   ThoughtWorks         FACENSA/UniRitter
                                   TargetTrust/Surya Software Innovation
agenda

O Problema

Impactos

Possíveis soluções

Quando usar branches?
O problema
Diferentes linhas de desenvolvimento,
       mesma base de código
branches!
Ronald Widha
merge hell
Conflito Sintático

class BlaBlaBla {
<<<<<<< HEAD
   public void bla(Bla oldBla, New newBla) {
       oldBla.bla();
       newBla.newBla();
=======
   public void bla(Bla oldBla, Other otherBla) {
       oldBla.bla();
       otherBla.otherBla();
>>>>>>> other commit
   }
}
Conflito Semântico

class BlaBlaBla {
   public void something(Bla bla) {
<<<<<<< HEAD
      bla = bla.plus(14);
=======
      bla = bla.minus(7);
>>>>>>> change
      //other stuff
   }
}
Conflitos de Integração
  main.jsp: <%@include file="bla.jspf" %>

master:               outroBranch:
new-file.jsp:         bla.jspf -> ble.jspf
<%@include
file="bla.jspf" %>    main.jsp:
                      <%@include
                      file="ble.jspf" %>
O Merge Man
Integração Promíscua




                   Martin Fowler
$$$$
Jon Wolter
Regressões
Jon Wolter
Jon Wolter
“The bigger the apparent
  reason to branch, the
   more you shouldn’t
        branch.”



                           Jez Humble
“don't separate differing
concerns by using a VCS, use
  an abstraction instead.”


                         Stacy Curl
branches por
controle de código?
Estratégias
Feature Toggles
Branch By Abstraction
big bang




           Paul Hammant
iterativo




            Paul Hammant
Mudanças pequenas
Releases frequentes
Componentes
Influência do Product
  Owner/Champion
Uncle Bob
Quando criar branches?

Grande mudanças

Spikes

Novo release
Quando criar branches?

Grande mudanças

Spikes

Novo release
Quando criar branches?

Grande mudanças

Spikes

Novo release
Paul Hammant
Mais Informações

www.codingbyexample.org
Obrigado!
Trunk Based Development (CBSoft 2011)

Trunk Based Development (CBSoft 2011)