Skip to content

Latest commit

 

History

History
172 lines (98 loc) · 9.55 KB

README.md

File metadata and controls

172 lines (98 loc) · 9.55 KB

Branch Feature Forking Workflow

Branch Feature Forking Workflow é uma mistura de Branch Feature Workflow com Forking Workflow. Baseado em Git Workflows

Não é a intenção desse guia explicar em detalhes o que cada comando do Git faz e sim ilustrar as etapas do workflow. É necessário um conhecimento básico do Git e seus comandos para entender e usar o BFFWorkflow.

Nova funcionalidade

Dado uma nova funcionalidade é necessário que a mesma seja criado no repositório oficial do projeto, isso pode ser feito pelo command line ou pelo próprio GitHub

Vamos supor que nossa funcionalidade se chamará feature-1

creating feature-1 branch

Forking

Caso você não tenha o projeto sob seu usuário, é necessário forkar o projeto. Esse procedimento também pode ser feito pelo próprio GitHub, basta acessar o repositório oficial e clicar no botão Fork (lado direito superior da tela).

forking

forkingTo

Clonando o repositório

Dado que você tem o fork do projeto sob seu usuário, você deve clonar o repositório

clonning

É necessário também adicionar também uma referência para o repositório oficial, usaremos esse apontamento para receber alterações do projeto oficial, temos que sempre ter isso sempre como mindset, sempre vamos se atualizar com o repositório oficial. Pode ser que alguma outra funcionalidade foi integrada ao projeto principal ou pode ser que alguma correção (hotfix) tenha sido encontrado e solucionado.

remoting

Nosso repositório terá dois apontamentos

Alias Descrição
origin nome padrão, aponta para o repositório padrão (no caso, o sob o seu usuário)
official aponta para o repositório oficial do projeto

Iniciando o desenvolvimento da feature

Agora você tem todo repositório pronto, hora de começar a escrever lindas linhas de código, certo?

Você deve criar uma branch a partir da branch da funcionalidade (no nosso caso, feature-1). Vamos supor que uma das tasks para entregar a feature-1 é criar uma modelagem de classes.

Você pode criar a branch feature-1-modelo-de-classes

branching

Nesse momento nossas branchs estão com o ponteiro para o mesmo commit, teremos a seguinte árvore:

graph-on-branching

Contribuindo

Vamos dizer que você trabalhou no modelo de classes da feature-1 e após (dois) commits, você já pode "contribuir" para a funcionalidade feature-1.

git-log

history-graph

Dado uma pequena contribuição "pronta", já é possível criar um pull request para o repositório oficial. Para fazer isso é necessário empurrar suas alterações

É uma boa prática sempre atualizar seu repositório antes de enviar uma contribuição, pode ser que algum pull request foi integrado em produção ou na branch feature.

ci

rebase your branch feature

git-push

Automaticamente depois do git push, quando acessar o repositório do oficial projeto você verá um botão verde Compare & pull request

compare-and-pull-request

Importante lembrar que você deve selecionar como base fork a branch feature, no caso feature-1*

open-pull-request

Pull request criado, será avaliado pelo time.

Caso seja rejeitado, é necessário fechar o pull request, basicamente o que você tem que fazer é implementar as correções e criar outro pull request posteriormente.

Contribuição aceita pelo time

Time deve avaliar questões de design, coding conventions/standards, testes de unidade entre outros..

Ao aceitar um pull request pode se aproveitar e deletar a branch remota com a alteração, isso é feito pelo botão Delete branch.

delete-branch

Atualizando seu repositório

Atualizar sempre o repositório é uma boa prática. Sempre que possível e obrigatoriamente após ter um pull request integrado deve se atualizar suas branchs interessadas.

Continuando na feature-1, temos a seguinte árvore quando fizemos nosso pull request

graph-antes-atualizacao

ci

Após a atualização das branchs interessadas, teremos a seguinte árvore:

graph

Você também pode/deve limpar localmente as branchs que você já integrou.

branch-d

Feature em produção

Vamos dizer que tivemos duas contribuições na feature-1. Novas contribuições/pull requests serão feitos assim como o anterior, gerando uma árvore parecida com a seguinte:

graph-2

Dado que a feature-1 já está pronta para ser coloca em produção, criaremos um pull request no próprio repositório oficial. Podemos fazer isso pelo GitHub

master-feature-1-pr

Limpeza

Depois que o pull request da funcionalidade completa (feature-1) para a master e o merge, precisamos atualizar a nosso repositório com a versão master atual, esse procedimento é bem parecido com o anterior

atualizando-ambiente

Teremos um grafo parecido com esse:

graph-feature-1

E podemos limpar nossas branchs localmente e remotamente

cleaning-local-branch cleaning-remote-branch cleaning-remote-branch-user

No final da limpeza teremos uma árvore parecida com a seguinte:

graph-feature-merge

Note que o ponteiro da origin/master está desatualizado. Na verdade, não usamos a origin/master para nada. Podemos sincronizar sua master sob seu usuário :)

master-user

E finalmente, a árvore:

graph-ufa

TA-DA 🎉

Contribuições

Abra um issue com dúvidas ou sugestões ou envie um pull request