GIT: O Commit, o Fluxo e a Tag
Métodos para um bom repositório
André Gumieri <andre.gumieri@gumini.com.br>
Why, God, WHY!?
1. Bater o olho e já saber de tudo
2. Entender os porquês por trás das modificações
3. Rollbacks nunca foram tão fáceis
4. Padrão = Pensar menos
$ git clone git@github.com:guminidigital/projeto-deus-me-livre.git
A vida depois do clone
$ git branch -a
Em qual branch devo trabalhar?
dev
dev_20150513
dev_new
joao_dev_2012
fix
fix2
homolog_marco_2016
* master
$ git log -- arquivo.js
Por que modificaram tal coisa no arquivo.js?
commit 7c8f92ea525af7a5d65cb2f5a4ea20ee75f1575f
Author: Walter White <wwhite@gmail.com>
Date: Mon Jul 25 19:55:22 2016 -0300
Solicitações cliente
commit 87ba74f4b29cdc61a0a02e75120a0f3d50cca627
Author: Jesse Pinkman <yo_bitch@outlook.com>
Date: Mon Jul 25 19:55:14 2016 -0300
QA
commit ff393e464f5e6bbef30c5674abe17af8385215f7
Author: Jesse Pinkman <yo_bitch@outlook.com>
Date: Mon Jul 25 19:54:36 2016 -0300
.
commit c5e33c6dfa19df5f32d5b129d06d04df9e971041
Author: Joey Tribbiani <jtribbiani@yahoo.com>
Date: Mon Jul 25 19:54:28 2016 -0300
Ajustes
commit f84e7dcbbd3da416c8b19e5ddb8b05deb084b57b
Author: Walter White <wwhite@gmail.com>
Date: Mon Jul 25 19:54:15 2016 -0300
Ajustes na home
$ git tag
Deu ruim! Pra qual versão faço rollback?
teste_tag
prod-20120305
prod-20120305-2
tira-jquery
git-flow
Organizando a zona com
• Organiza o ciclo de vida do projeto no GIT
• Fica fácil de identificar a situação do repositório
• Tem bastante material on-line
• Todo mundo usa, recuse imitações
MASTERDEVELOPFEATURES RELEASE HOTFIX
5 TRILHAS PRINCIPAIS
MASTERDEVELOPFEATURES RELEASE HOTFIX
2 FIXAS
MASTERDEVELOPFEATURES RELEASE HOTFIX
3 DE APOIO
MASTERDEVELOPFEATURES RELEASE HOTFIX
- Máquina do DEV
- Pequenos recursos
- Nasce de develop
- Trilha principal
- Sempre a frente 

da master
- Aqui não se faz commit
- Trilha pré-produção
- QA
- Ambiente de homolog
- Trilha de produção
- Aqui não se faz commit
- Ambiente de produção
- Sempre com TAG 

de versão
- Ajustes da versão em

produção
- Nasce da master
MASTERDEVELOPFEATURES RELEASE HOTFIX
create branch
merge nas trilhas fixas
merge de atualização
LEGENDA
1.0.0
1.0.1
1.0.0-rc1
1.0.0-rc2
1.1.0-rc1
1.1.0
1.1.0-rc2
release/1.0.0
release/1.1.0
hotfix
Commit bem formatado
Deixando tudo bonito com um
Fix #123: Altera cor do botão finalizar
Foi adicionada uma classe modificadora
.finalizar dentro de .btn
Mensagem
Corpo
corrige cor dos links. remove cores do sass
Texto começa com letra maíuscula.
Commits também.
Corrige cor dos links. Remove cores do SASS
Deixar uma linha de espaço entre
a mensagem e o corpo. E uma linha
de espaço entre parágrafos.
SEPARADÃO TUDO JUNTO
3
2
1
Aqui é só a descrição
E aqui é o ~textão~ que vai explicar
tintin por tintin o que foi feito nesse
commit organizadão!
Aqui tem outro parágrafo! Essa quebra de
linha extra aí deixa tudo mais claro.
Aqui é só a descrição
E aqui é o ~textão~ que vai explicar
tintin por tintin o que foi feito nesse
commit organizadão!
Aqui tem outro parágrafo! Essa quebra de
linha extra aí deixa tudo mais claro.
Aqui é só a descrição
E aqui é o ~textão~ que vai explicar
tintin por tintin o que foi feito nesse
commit organizadão!
Aqui tem outro parágrafo! Essa quebra de
linha extra aí deixa tudo mais claro.
Aqui é só a descrição
E aqui é o ~textão~ que vai explicar
tintin por tintin o que foi feito nesse
commit organizadão!
Aqui tem outro parágrafo! Essa quebra de
linha extra aí deixa tudo mais claro.
SEPARADÃO

WINS!
O motivo dessa regra pode até parecer frescura de alguém cagando regra, mas a real é que ninguém gosta de ler texto com umas puta linhas longas
Mensagem e corpo devem ser curtos.
~70 caracteres é um bom tamanho.
Passou disso, quebra a linha.
O Que, Como e Por quê.
Os melhores commits dizem
Por quê precisa deste commit?
O que este commit faz?
Como este commit resolve o problema?
Corrige falhas na home
Durante o desenvolvimento, foram encontradas
falhas graves na home:
- Menu estava desalinhado
- Delay do slider estava rápido
- Fonte é Futura, não helvetica
O que?
Por quê?
$ git show 9d32dac08c47f52a2b15a2b4298865448efe5bcf


diff --git a/menu.less b/menu.less
@@ -129,6 +129,18 @@
.menu{
- top: 13px;
+ top: 17px;
}
diff --git a/slider.js b/slider.js
@@ -129,6 +129,18 @@
var confSlider = {
- delay: 500;
+ delay: 5000;
}
diff --git a/base.less b/base.less
@@ -129,6 +129,18 @@
body {
- font-family: Sans-serif;
+ font-family: @font-futura;
}
Como?
Fix #123: Altera cor do botão finalizar
Foi adicionada uma classe modificadora
.finalizar dentro de .btn
O que?Por quê?
Como?
$ git show 9d32dac08c47f52a2b15a2b4298865448efe5bcf


diff --git a/quem-somos.html b/quem-somos.html
new file mode 100644

index 0000000..e9bc1b6
--- /dev/null
+++ b/quem-somos.html
@@ -0,0 +1,10 @@
+ <!DOCTYPE html>
+ <html>
+ <head>

+ <title>Quem Somos</title>
+ </head>
+ <body>
...
+ </body>
+ </html>
Por quê?
Adiciona página quem somos
O que?
Como?
Implicito. É claro o motivo
de estar adicionando uma
nova página
Pensar a mensagem do commit
é o novo pensar no nome da variável
Deixa eu escrever do meu jeito.
Não me enche o saco.
Padrão = Pensar menos.
Precisa ser curto, mas tem que falar tudo.
A mensagem deve ser imperativa.
O commit fala o que fazer quando for aplicado.
A mensagem de commit deve completar a frase
Quando aplicado, este commit…
... Muda cor dos links
... Torna dinâmica a página de quem somos
... Resolve #123: Quebra de layout nos serviços
... Adiciona página de contato
... Altera a URL de Serviços
... Atualiza o banco de dados
... Corrige tamanho do box de contato
Parece bizarro. Mas o GIT mesmo faz isso:
If applied, this commit will…
... Merge branch ‘staging’ into develop
... Revert "Add the thing with the stuff"
Commits em inglês, “pode to be”?
if (openSource || clienteGringo || padraoDoRepo==‘en’) {
lang = ‘en-US’;
} else {
lang = ‘pt-BR’;
}
Tags e versões
Marcando seu lugar no espaço tempo com
• Momentos do repositório. Release, por exemplo.
• Padrão semântico: semver.org
• Amplamente utilizado ~nas web~
• O favorito do NPM, Bower, GEM, PIP, Composer…
4 2 5. .
4
MAJOR MINOR PATCH
2 5. .
4
MAJOR MINOR PATCH
2 5. .Mudanças que não
mantém compatibilidade
com a versão anterior
Release de pacote de
features em produção
Correções do software
já em produção
2 5.
E se eu quiser fazer tag de homologação?
-rc1
Conheça o release candidate
$ git push origin 1.0.0-rc1
$ git tag 1.0.0-rc1
Tag no último commit
$ git tag 1.0.0-rc1 f84e7dcbbd3da416c8b19e5ddb8b05deb084b57b
Tag em um commit específico
Assim como branchs, tags são locais
1.1.0-rc1
A tag não se relaciona com o branch,
apenas com o commit.
1.0.0
1.0.1
branch-a branch-b branch-c
$ git clone git@github.com:guminidigital/projeto-vem-ni-mim.git
A nova vida depois do clone
$ git branch -a
Em qual branch devo trabalhar?
develop
release/1.1.0
hotfix/1.0.1
feature/facelift-menu
* master
$ git log -- arquivo.js
Por que modificaram tal coisa no arquivo.js?
commit 7c8f92ea525af7a5d65cb2f5a4ea20ee75f1575f
Author: Walter White <wwhite@gmail.com>
Date: Mon Jul 25 19:55:22 2016 -0300
Modifica tal coisa que quebrava negócio
Quando negócio se comportava de tal forma,
tal coisa gerava incompatibilidade e fazia
negócio quebrar.
Tal coisa foi substituido por treco para
solucionar o problema.
commit 87ba74f4b29cdc61a0a02e75120a0f3d50cca627
Author: Jesse Pinkman <yo_bitch@outlook.com>
Date: Mon Jul 25 19:55:14 2016 -0300
Fix #123: Cor de tal coisa em vermelho
commit ff393e464f5e6bbef30c5674abe17af8385215f7
Author: Jesse Pinkman <yo_bitch@outlook.com>
Date: Mon Jul 25 19:54:36 2016 -0300
Adiciona tal coisa
$ git tag
Deu ruim! Pra qual versão faço rollback?
1.0.0-rc1
1.0.0-rc2
1.0.0
1.0.1
1.0.2
1.1.0
1.1.1
1.1.2
1.1.3
GIT: O Commit, o Fluxo e a Tag

GIT: O Commit, o Fluxo e a Tag

  • 1.
    GIT: O Commit,o Fluxo e a Tag Métodos para um bom repositório André Gumieri <andre.gumieri@gumini.com.br>
  • 2.
    Why, God, WHY!? 1.Bater o olho e já saber de tudo 2. Entender os porquês por trás das modificações 3. Rollbacks nunca foram tão fáceis 4. Padrão = Pensar menos
  • 3.
    $ git clonegit@github.com:guminidigital/projeto-deus-me-livre.git A vida depois do clone
  • 4.
    $ git branch-a Em qual branch devo trabalhar?
  • 5.
  • 6.
    $ git log-- arquivo.js Por que modificaram tal coisa no arquivo.js?
  • 7.
    commit 7c8f92ea525af7a5d65cb2f5a4ea20ee75f1575f Author: WalterWhite <wwhite@gmail.com> Date: Mon Jul 25 19:55:22 2016 -0300 Solicitações cliente commit 87ba74f4b29cdc61a0a02e75120a0f3d50cca627 Author: Jesse Pinkman <yo_bitch@outlook.com> Date: Mon Jul 25 19:55:14 2016 -0300 QA commit ff393e464f5e6bbef30c5674abe17af8385215f7 Author: Jesse Pinkman <yo_bitch@outlook.com> Date: Mon Jul 25 19:54:36 2016 -0300 . commit c5e33c6dfa19df5f32d5b129d06d04df9e971041 Author: Joey Tribbiani <jtribbiani@yahoo.com> Date: Mon Jul 25 19:54:28 2016 -0300 Ajustes commit f84e7dcbbd3da416c8b19e5ddb8b05deb084b57b Author: Walter White <wwhite@gmail.com> Date: Mon Jul 25 19:54:15 2016 -0300 Ajustes na home
  • 8.
    $ git tag Deuruim! Pra qual versão faço rollback?
  • 9.
  • 10.
  • 11.
    • Organiza ociclo de vida do projeto no GIT • Fica fácil de identificar a situação do repositório • Tem bastante material on-line • Todo mundo usa, recuse imitações
  • 12.
  • 13.
  • 14.
  • 15.
    MASTERDEVELOPFEATURES RELEASE HOTFIX -Máquina do DEV - Pequenos recursos - Nasce de develop - Trilha principal - Sempre a frente 
 da master - Aqui não se faz commit - Trilha pré-produção - QA - Ambiente de homolog - Trilha de produção - Aqui não se faz commit - Ambiente de produção - Sempre com TAG 
 de versão - Ajustes da versão em
 produção - Nasce da master
  • 16.
    MASTERDEVELOPFEATURES RELEASE HOTFIX createbranch merge nas trilhas fixas merge de atualização LEGENDA 1.0.0 1.0.1 1.0.0-rc1 1.0.0-rc2 1.1.0-rc1 1.1.0 1.1.0-rc2 release/1.0.0 release/1.1.0 hotfix
  • 17.
  • 18.
    Fix #123: Alteracor do botão finalizar Foi adicionada uma classe modificadora .finalizar dentro de .btn Mensagem Corpo
  • 19.
    corrige cor doslinks. remove cores do sass Texto começa com letra maíuscula. Commits também. Corrige cor dos links. Remove cores do SASS
  • 20.
    Deixar uma linhade espaço entre a mensagem e o corpo. E uma linha de espaço entre parágrafos.
  • 21.
  • 22.
  • 23.
  • 24.
  • 26.
    Aqui é sóa descrição E aqui é o ~textão~ que vai explicar tintin por tintin o que foi feito nesse commit organizadão! Aqui tem outro parágrafo! Essa quebra de linha extra aí deixa tudo mais claro. Aqui é só a descrição E aqui é o ~textão~ que vai explicar tintin por tintin o que foi feito nesse commit organizadão! Aqui tem outro parágrafo! Essa quebra de linha extra aí deixa tudo mais claro.
  • 27.
    Aqui é sóa descrição E aqui é o ~textão~ que vai explicar tintin por tintin o que foi feito nesse commit organizadão! Aqui tem outro parágrafo! Essa quebra de linha extra aí deixa tudo mais claro. Aqui é só a descrição E aqui é o ~textão~ que vai explicar tintin por tintin o que foi feito nesse commit organizadão! Aqui tem outro parágrafo! Essa quebra de linha extra aí deixa tudo mais claro. SEPARADÃO WINS!
  • 28.
    O motivo dessaregra pode até parecer frescura de alguém cagando regra, mas a real é que ninguém gosta de ler texto com umas puta linhas longas Mensagem e corpo devem ser curtos. ~70 caracteres é um bom tamanho. Passou disso, quebra a linha.
  • 29.
    O Que, Comoe Por quê. Os melhores commits dizem
  • 30.
    Por quê precisadeste commit? O que este commit faz? Como este commit resolve o problema?
  • 31.
    Corrige falhas nahome Durante o desenvolvimento, foram encontradas falhas graves na home: - Menu estava desalinhado - Delay do slider estava rápido - Fonte é Futura, não helvetica O que? Por quê? $ git show 9d32dac08c47f52a2b15a2b4298865448efe5bcf 
 diff --git a/menu.less b/menu.less @@ -129,6 +129,18 @@ .menu{ - top: 13px; + top: 17px; } diff --git a/slider.js b/slider.js @@ -129,6 +129,18 @@ var confSlider = { - delay: 500; + delay: 5000; } diff --git a/base.less b/base.less @@ -129,6 +129,18 @@ body { - font-family: Sans-serif; + font-family: @font-futura; } Como?
  • 32.
    Fix #123: Alteracor do botão finalizar Foi adicionada uma classe modificadora .finalizar dentro de .btn O que?Por quê? Como?
  • 33.
    $ git show9d32dac08c47f52a2b15a2b4298865448efe5bcf 
 diff --git a/quem-somos.html b/quem-somos.html new file mode 100644
 index 0000000..e9bc1b6 --- /dev/null +++ b/quem-somos.html @@ -0,0 +1,10 @@ + <!DOCTYPE html> + <html> + <head>
 + <title>Quem Somos</title> + </head> + <body> ... + </body> + </html> Por quê? Adiciona página quem somos O que? Como? Implicito. É claro o motivo de estar adicionando uma nova página
  • 34.
    Pensar a mensagemdo commit é o novo pensar no nome da variável
  • 35.
    Deixa eu escreverdo meu jeito. Não me enche o saco. Padrão = Pensar menos.
  • 36.
    Precisa ser curto,mas tem que falar tudo. A mensagem deve ser imperativa. O commit fala o que fazer quando for aplicado.
  • 37.
    A mensagem decommit deve completar a frase Quando aplicado, este commit… ... Muda cor dos links ... Torna dinâmica a página de quem somos ... Resolve #123: Quebra de layout nos serviços ... Adiciona página de contato ... Altera a URL de Serviços ... Atualiza o banco de dados ... Corrige tamanho do box de contato
  • 38.
    Parece bizarro. Maso GIT mesmo faz isso: If applied, this commit will… ... Merge branch ‘staging’ into develop ... Revert "Add the thing with the stuff"
  • 39.
    Commits em inglês,“pode to be”? if (openSource || clienteGringo || padraoDoRepo==‘en’) { lang = ‘en-US’; } else { lang = ‘pt-BR’; }
  • 40.
    Tags e versões Marcandoseu lugar no espaço tempo com
  • 41.
    • Momentos dorepositório. Release, por exemplo. • Padrão semântico: semver.org • Amplamente utilizado ~nas web~ • O favorito do NPM, Bower, GEM, PIP, Composer…
  • 42.
  • 43.
  • 44.
    4 MAJOR MINOR PATCH 25. .Mudanças que não mantém compatibilidade com a versão anterior Release de pacote de features em produção Correções do software já em produção
  • 45.
    2 5. E seeu quiser fazer tag de homologação? -rc1 Conheça o release candidate
  • 46.
    $ git pushorigin 1.0.0-rc1 $ git tag 1.0.0-rc1 Tag no último commit $ git tag 1.0.0-rc1 f84e7dcbbd3da416c8b19e5ddb8b05deb084b57b Tag em um commit específico Assim como branchs, tags são locais
  • 47.
    1.1.0-rc1 A tag nãose relaciona com o branch, apenas com o commit. 1.0.0 1.0.1 branch-a branch-b branch-c
  • 48.
    $ git clonegit@github.com:guminidigital/projeto-vem-ni-mim.git A nova vida depois do clone
  • 49.
    $ git branch-a Em qual branch devo trabalhar?
  • 50.
  • 51.
    $ git log-- arquivo.js Por que modificaram tal coisa no arquivo.js?
  • 52.
    commit 7c8f92ea525af7a5d65cb2f5a4ea20ee75f1575f Author: WalterWhite <wwhite@gmail.com> Date: Mon Jul 25 19:55:22 2016 -0300 Modifica tal coisa que quebrava negócio Quando negócio se comportava de tal forma, tal coisa gerava incompatibilidade e fazia negócio quebrar. Tal coisa foi substituido por treco para solucionar o problema. commit 87ba74f4b29cdc61a0a02e75120a0f3d50cca627 Author: Jesse Pinkman <yo_bitch@outlook.com> Date: Mon Jul 25 19:55:14 2016 -0300 Fix #123: Cor de tal coisa em vermelho commit ff393e464f5e6bbef30c5674abe17af8385215f7 Author: Jesse Pinkman <yo_bitch@outlook.com> Date: Mon Jul 25 19:54:36 2016 -0300 Adiciona tal coisa
  • 53.
    $ git tag Deuruim! Pra qual versão faço rollback?
  • 54.