BE HAPPY WITH
SEMANTIC VERSIONING
AND GIT FLOW
Rogério Prado de Jesus	

PHP Conference Brasil	

Dezembro 2012
QUEM SOU EU?

• @rogeriopradoj
• PHP

- Rogério Prado de Jesus	


desde 2009	


• blog: rogeriopradoj.com	

• Grupo

de usuários: PHPSP
VERSIONAMENTO

É sobre isso que vamos
falar…
VERSIONAMENTO
Código Fonte	


Mas esse não
é o único tipo
VERSIONAMENTO
Código Fonte	


Produto

!

Temos que
lembrar desse
aqui também
VERSIONAMENTO
Código Fonte	


Produto	


!

!

VCS	

git, svn, mercurial, cvs...	


iOS 6	

Ubuntu 12.10	

PHP 5.4.9	

jQuery 1.8.3

!
!
VERSIONAMENTO: PRODUTO
Quando outras
pessoas começam a
usar seu produto
(site, biblioteca…)

Publicação

… você precisa de
estratégias para
gerenciar isso tudo
… aí que entra o …

SEMANTIC VERSIONING
• http://semver.org/	


enquanto a tradução
oficial não for
mesclada

• https://github.com/rogeriopradoj/translations/blob/master/

translated/semantic-versioning/pt_BR.md

Elaborado pelo
criador do
@mojombo
@alganet

@augustohp
https://github.com/Respect

descobri sobre o tema com esses
dois caras…
… assistindo uma discussão de como
gerenciar as versões do projeto deles
SEMANTIC VERSIONING
esse é o formato das
versões…

X.Y.Z
Parece conhecido?
SEMANTIC VERSIONING
é o que a gente já fazia…

http://semver.org/

X.Y.Z
major

minor

patch

…mas agora com uma regra
mais rígida…
…um manifesto!
Um dos principais pontos do tema é
evitar que você (e seus usuários) entre
em pânico quando seu produto cresce
de tamanho…
… e consequentemente o
número de dependências
aumenta também

https://en.wikipedia.org/wiki/Dependency_hell
COMPOSER
http://getcomposer.org/

PACKAGIST
https://packagist.org/

Esses dois caras do PHP sugerem
que você use o SEMVER…
…o que facilita a vida de quem
for usar os seus pacotes
Slideshares recomendados se quiser saber mais:	

- http://www.slideshare.net/rdohms	

- http://www.slideshare.net/rogeriopradoj
SEMANTIC VERSIONING
X.Y.Z
major

minor

patch

Para ninguém esquecer!
http://semver.org/
VERSIONAMENTO
Código Fonte	


Produto	


!

!

Já vimos produto…
… vamos para código fonte
VERSIONAMENTO:
CÓDIGO FONTE
O que é para você?
Pode ser isso aqui…
index.php
index.php.old
index.php.old.bkp
index.php.old.bkp.2
index.php.old.bkp.2012
… mas tem
jeito melhor…
… aqui entra o…

VCS

• Version

Control System	


• Sistema

de controle de versões	


• Código

fonte
TIPOS VCS
CENTRALIZADO	


DESCENTRALIZADO	


!

!

Basicamente são
dois tipos…
TIPOS VCS
CENTRALIZADO	


DESCENTRALIZADO	


!

!

https://subversion.apache.org/

http://www.git-scm.com/

… sendo essas as ferramentas mais
conhecidas de cada um deles
TIPOS VCS
CENTRALIZADO	


DESCENTRALIZADO	


!

!

Existe um movimento de
migração de projetos
(principalmente open
source) para
descentralizados…

… o próprio PHP é um
dos casos…

https://github.com/php/
php-src
RAMIFICANDO O VCS

Complexo e formal

Simples e eficiente

cada um deles
tem suas
particularidades
esse é o padrão formal no
SVN (subversion)…
…que geralmente só
usuários avançados
usavam pela
complexidade…
… nos manuais de SVN
são sempre os últimos
capítulos.

Mesmo assim,
corporativamente era um
bom modelo…
… por causa de seu
controle e rigidez
(mesmo deixando os
DEVs malucos!!!)
Quem
nunca
ouviu:
“para
tudo aí
que eu
vou
mesclar!
e "tô"
dando
lock!
No GIT a criação de
branches é assunto
básico…

O próprio ícone do GIT
mostra uma ramificação!!!

… primeiros capítulos do
manual

O problema é que não
existe formalismo…

… o que
corporativamente poderia
ser problema

(apesar dos
DEVs
adorarem!!!)
A SUCCESSFUL GIT
BRANCHING MODEL

• http://nvie.com/posts/a-successful-git-branching-model/	

• https://github.com/rogeriopradoj/translations/blob/master/

translated/a-successful-git-branching-model/pt_BR.md

Um modelo de
ramificação parecido
com o SVN (formal)…

…mas no GIT (sem os
problemas do SVN)
É o que eles
chamaram de

• Descentralizado

Centralizado

Descentralizado
porque é GIT

Centralizado pois
usa um repositório
“central”, ou
principal, que é
usado para sincronia
de todos os outros
Um “origin único”
para todos

Mas que não impede
que existam as
interações normais
do GIT (vários
remotos, por
exemplo)
• Descentralizado
• Formalização

Centralizado	


das ramificações / branches

Segundo ponto
importante
Regras para nomes
de branches…
Main
- master	

- develop	


… facilitando a
comunicação
Supporting
- feature	

- release	

- hotfix
feature
branches

develop

release branches

hotfixes

master

Time

Tag

0.1

Feature
for future
release

Severe bug
fixed for
production:
hotfix 0.2

Major
feature for
next release

Incorporate
bugfix in
develop

Tag

0.2

Start of
release
branch for

1.0

From this point on,
“next release”
means the release
after 1.0

Only
bugfixes!

Bugfixes from
rel. branch
may be
continuously
merged back
into develop

Author: Vincent Driessen
Original blog post: http://nvie.com/archives/323
License: Creative Commons

Tag

1.0

Modelo
da
empresa
NVIE
aplicado
…
… que
até esse
momento
não tinha
nome.
Em pouco
tempo foi criado
o nome do
modelo…

GIT-FLOW
… e também uma ferramenta para
facilitar seu uso fora da NVIE

• https://github.com/nvie/gitflow/	

• Ferramenta

CLI para agilizar o processo de implementação
do modelo git flow da NVIE.com
Alguns
cheatsheets para
facilitar o uso

• http://danielkummer.github.com/git-flow-cheatsheet/	

• http://danielkummer.github.com/git-flow-cheatsheet/

index.pt_BR.html
Importante saber que existem
outros fluxos de trabalho no GIT…
…alguns famosos:

Git "OpenSource" Flow
GitHub Flow: usado pela
empresa GitHub

Nome inventado por
@rogeriopradoj :-)

Principal diferença em relação ao
NVIE git-flow: usa menos
branches, mas mantém a ideia de
repositório central

É o que é usado na maioria dos
projetos OpenSource, com a
ideia de Forks, Pull Requests etc.
É isso aí, pessoal!

SEMANTIC VERSIONING

GIT (*) FLOW
OBRIGADO!

• about.me/rogeriopradoj

Be Happy With Semantic Versioning And Git Flow - PHP Conference Brasil 2012