brew install git-flow
sudo apt-get install git-flow
Um repositório não vem com git flow e o mesmo não pode ser margeado na master. Cada um tem que executar esse comando m cada repositório que tiver. Entre no diretório base do repositório e digite:
git flow init
Digite <ENTER> até que as perguntas acabem para utilizar o padrão;
O comando acima irá:
- Criar um branch develop como cópia da master (se o mesmo já existir, nada será feito)
- Definição de como serão os nomes dos branchs separados por feature, hotfix, releases, etc…
Tenha muito cuidado para ter certeza de que os brancos estão iguais com o comando:
git diff master develop
O output comando acima, se não for em branco, deve mostrar o que será removido da master e o que será adicionado da develop quando um gerarmos um novo release;
Um hotfix é uma modificação no código feita exclusivamente para tentar corrigir uma falha. Não se veve modificar padrão de utilização de features nem adicionar novas features em um hotfix. Mesmo adições de novos argumentos não devem ser introduzidos por hotfix à menos que o mesmo tenha sido definido para ir no release mas não o foi por um erro.
- O seguinte comando criar um branch para hotfix:
git flow hotfix start <NOME_DO_HOTFIX>
O comando acima irá:
- criar um novo branch chamado hotfix/<NOME_DO_HOTFIX> como cópia da master;
- Irá mudar para o Branch criado;
-
Faça as modificações necessárias para o hotfix;
-
Adicione os arquivos criados/deletados/modificados com:
git add/rm <FILE1> [<FILE2> [<FILE3> […]]]
- Comitê as modificações:
git commit -m “<DESCRIÇÃO DO COMMIT>”
- Finalize o hotfix:
git flow hotfix finish <NOME_DO_HOTFIX>
O comando acima irá:
- Mergear o hotfix no branch develop;
- Mergear o hotfix no branch master;
- Apagar o branch hotfix/<NOME_DO_HOTFIX>;
- Irá mudar para o branch develop;
Uma feature é uma nova funcionalidade que se quer inserir. Não se deve utilizar uma feature para concertar códigos pois na eventualidade de a feature ser removida, o fix também o será. Outro problema é que um fix pode demorar para ir para produção por causa da demora em se megear a feature.
- Uma feature é inicializada com o seguinte comando:
git flow feature start <NOME_DA_FEATURE>
O comando acima irá:
- criar um novo branch chamado feature/<NOME_DA_FEATURE> como cópia da develop;
- Irá mudar para o Branch criado;
-
Faça as modificações necessárias para a feature;
-
Adicione os arquivos criados/deletados/modificados com:
git add/rm <FILE1> [<FILE2> [<FILE3> […]]]
- Comitê as modificações:
git commit -m “<DESCRIÇÃO DO COMMIT>”
- Finalize a feature:
git flow feature finish <NOME_DA_FEATURE>
O comando acima irá:
- Mergear a feature no branch develop;
- Apagar o branch feature/<NOME_DA_FEATURE>;
- Irá mudar para o branch develop;
Nesse caso precisa-se públicar o repositório da feature no github:
git flow feature publish <NOME_DA_FEATURE>
Caso queria baixar do github o repositório da feature:
git flow feature pull origin <NOME_DA_FEATURE>
Caso queira rastrear a feature e o status da mesma:
git flow feature track <NOME_DA_FEATURE>
Um release precisa ser criado quando a develop foi testada extensivamente e essa snovas features podem entrar em produção. Nesse caso todas as modificações da develop serão incorporadas na master. É por isso que não se deve commitar direto na master a não ser por um hotfix. Se isso ocorrer há o risco de conflitar com o a develop.
- O seguinte comando criar um release:
git flow release start <NOME_DO_RELEASE>
O comando acima irá:
- criar um novo branch chamado release/<NOME_DO_RELEASE> como cópia da develop;
- Irá mudar para o Branch criado;
-
Faça as modificações necessárias para a release;
-
Adicione os arquivos criados/deletados/modificados com:
git add/rm <FILE1> [<FILE2> [<FILE3> […]]]
- Comitê as modificações:
git commit -m “<DESCRIÇÃO DO COMMIT>”
- Finalize o release:
git flow release finish <NOME_DO_RELEASE>
O comando acima irá:
- Mergear o hotfix no branch master;
- Taggear o release com seu nome;
- Mergear o release devolta na develop (para o caso de haver modificações de última hora);
- Apagar o branch hotfix/<NOME_DO_RELEASE>;
- Opcionalmente, pode-se liberar a release para outros dev fazerem modificações de última hora com o comando:
git flow release publish <NOME_DO_RELEASE>
- Pode-se rastrear a(s) modificação(ões) do release com o comando abaixo:
git flow release track <NOME_DO_RELEASE>