GIT Branching – Source Code Management
Demorou um tempo para fazermos esse "overview" de branching,
Acredito que este artigo dê para termos uma noção básica de como é o fluxo do git com um modelo de branches que apliquei em alguns projetos que participei. Este modelo se mostrou muito eficiente e ágil, mesmo que com muitas branches.
Por que Git ?
"Cuidado com os conflitos de merge, eles vão dar xabu !"Mas conforme você vai deixando a "cabeça dura" de lado, percebe que a simplicidade do Git é algo à se dar valor.
Originalmente, eu "nasci" dev, (literalmente mesmo, meu pai era programador de Clipper e DBASE) mas com o tempo sai da área e me tornei sysadmin, de todas as ferramentas que já experienciei, o Git foi uma das que revolucionou a agilidade e segurança do meu trabalho.
Pra galera que gosta de indicações, seguem uns sites com livros interessantes:
Pro Git -> Free para leitura online
Pragmatic Version Control Using Git
Branching
O ato de separarmos nossos códigos em branches no GIT se deve ao fato de segregarmos a natureza do código, como por exemplo, a branch hotfix é utilizada para corrigir bugs em produção na branch master e replicar as correções para a branch develop.• Develop
• Release
• Hotfix
• Master
TAGs
Main Branches
A principais branches dentro do Git são: a branch develop e master.- Cada Merge/Pull Request da branch develop para a master significa 1 nova release/versão no modelo de apenas duas branches
- Este modelo é destinado à projetos pequenos e sem muito controle de versões
- Aceita no máximo 3 dev’s trabalhando na branch develop diretamente.
Branches de Suporte (BUFFA DRUIDA !)
Uma característica destas branches é que elas podem ser deletadas após atingirem sua proposta.
As branches de suporte, basicamente são:
- Feature branches
- Release branches
- Hotfix branches
Feature Branches
As feature branches são branches derivadas da branch develop, onde realmente são desenvolvidas features novas para serem inseridas no código da branch develop. O desenvolvedor realiza commit diretamente nesta branch, e esta branch, ao final da programação da feature nova, sofre um merge/pull request para a branch develop (preferencialmente com a opção --no-ff) e deixa de existir logo em seguida. (Com a opção --no-ff o grupo de commits que compõem a feature são agrupados e então, não se perde o histórico de commits desta feature).- Devem ser derivadas da branch:
- develop
- Deve realizar merge de volta na branch:
- develop
- Nomes desta branch na literatura:
- Qualquer coisa exceto:
- master, develop, release-*, or hotfix-*
Merging Feature Branches
- Desabilita Fast-Foward Merging • Evita perder histórico dos commits que compõem a feature
- Transforma o grupo de commits na feature branch em 1 única “ feature” dentro da branch develop
- Mais fácil de realizar um rollback através do “git history”
Criando uma Feature Branch
# Trocando de branch para a branch "myfeature"
# caso não exista, o comando cria automaticamente
$ git checkout -b myfeature develop
Incorporando uma feature branch na branch develop
Features finalizadas devem sofrer merge para origin/develop para que a feature possa ser testada e seguir o fluxo das branches:# Trocando de branch ativa para a branch "develop"
$ git checkout develop
$ git merge --no-ff myfeature
Updating ex2b36a..06f4474
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 06f4474).
$ git push origin develop
Release Branches
As branches release são branches que são utilizadas para homologar e passar por testes finais (Q&A) antes de se tornar uma versão dentro da branch master enquanto a branch develop pode continuar seguindo seu curso natural após a branch release ter sido derivada para atingir uma nova versão caso aprovada.Quaisquer ajustes realizados nesta branch, devem ser replicados para as branches develop e consequentemente, master.- Pode derivar da branch:
- develop
- Deve efetuar merge nas branches:
- develop
- master
- Nomes da branch na literatura:
- release-*
Criando uma Release Branch
# Trocando de branch ativa para a branch "release-1.2"
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./troca_ver.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Trocada versão para 1.2"
[release-1.2 32c4451] Trocada versão para 1.2
1 files changed, 1 insertions(+), 1 deletions(-)
Finalizando uma Release Branch
# Trocando de branch ativa para a branch "master"
$ git checkout master
Switched to branch "master"
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2
Para assinatura da tag com criptografia, você talvez queira utiliza -s ou -u
# Trocando de branch ativa para a branch "develop"
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
Muito possivelmente este procedimento irá gerar conflitos de merge, resolva-os e realize o merge nvoamente.Após realizadas as correções e merge's, basta deletar a releasse branch.
# Excluindo branch 'release-1.2'
$ git branch -d release-1.2
Deleted branch release-1.2 (was ff452fe).
Hotfix branches
As branches do tipo hotfix são destinadas à correção de bugs quando o código já está em produção.Geralmente estas branches são derivadas da branch master, corrigindo o bug e realizando merge nas branchs master e develop para replicar a correção. Lembrando que a branch master, quando recebe um merge, o deploy automático no ambiente de produção deve ocorrer.Galera, por hoje é só.
Vlw !
0 comentários :
Postar um comentário