Push diretamente no master? Você está fazendo errado!
Thiago Brito
4 de Fevereiro de 2019 3 minutos de leitura

Como o uso de branch pode ajudar você e seu time no desenvolvimento e liberação contínua de novas funcionalidades com segurança.

O código está lindo, os testes foram feitos, sua vida está perfeita. O cliente está feliz e você vai e manda um push diretamente no master. Correto? Errado!

Quando você commita diretamente no master, você perde algumas vantagens que várias ferramentas disponibilizam hoje.

Integração Contínua

Com o código diretamente no master, enquanto sua integração contínua está rodando, seu time está trabalhando e alguem baixa o código que está no servidor. Tudo bem, mas e se você esqueceu de adicionar aquele arquivo de teste e descobre isso só depois que a integração contínua quebrou?

Bom, no melhor dos casos você consegue resolver rapidamente e ninguém sai ferido. Ou então, ninguém poderá ser capaz de trabalhar no código até que você arrume e o trabalho de outras pessoas será interrompido por um erro maluco que não sabem (ainda) que foi você quem causou.

Code Review

Um processo simples que uso e dá muito certo, é criar um branch com o código da issue do que iremos trabalhar, fazer as alterações necessárias para atender aos requisitos daquela issue, mandar o push para o branch que acabou de ser criado.

Desta forma, com o uso de branch o código alterado está totalmente isolado, lá eu rodo o processo de Integração Continua e, com tudo funcionando bem, e criado um merge request para o master.

E aí sim, com o merge request criado, basta fazer o pedido para alguma boa alma revisar o meu código, se estiver tudo ok, ele mesmo aceita o merge request e tudo vai para o master.

Deploy automático

Um exemplo clássico é o heroku que disponibiliza uma funcionalidade em que, o código que está no master vai diretamente para produção e isso facilita tudo.

Porém, imagina você, sem querer, colocar aquela página quebrada no site de um cliente e só perceber depois que algumas milhares de pessoas acessarem o site?

Ter o master sempre em bom estado é algo que ajuda de uma forma enorme e evita grandes perdas de produtividade, principalmente quando existem times maiores. Usar branches ajuda muito isso.

Mas e se eu trabalho sozinho neste projeto?

Mesmo assim eu sugiro que use desta forma também, com o código isolado em um branch você é capaz de rodar sua integração continua e até mesmo liberar uma versão especial do seu projeto para testes antes de ser colocado em produção.

Isso traz uma vantagem enorme de agilidade e faz com que você tenha uma proteção adicional contra os próprios erros.

Sério, já perdi a conta de quantas vezes eu já peguei algum erro fazendo um Code Review do meu próprio Merge Requet.

Boas práticas foram feitas para serem analisadas e seguidas. Não pelo simples fato de ser o correto a fazer, mas sim pelo fato da redução da sua capacidade de fazer estragos.

Quando um erro ocorrer a perda de tempo será reduzida e não haverá ninguém sendo prejudicado por este erro.

Existem outras formas de branch? Claro que sim, vale a pena analisar outras alternativas. Mas minha sugestão maior é: mantenha simples. A simplicidade no processo garantirá que ele será sempre seguido, além de reduzir bastante as chances de erro.

Keep it Simple Stupid!