Skip to content

Instantly share code, notes, and snippets.

@joaofds
Forked from marceloxp/git-flow.md
Created June 14, 2021 15:59
Show Gist options
  • Select an option

  • Save joaofds/d1cf96d3b7d4adf22bf52390569041a6 to your computer and use it in GitHub Desktop.

Select an option

Save joaofds/d1cf96d3b7d4adf22bf52390569041a6 to your computer and use it in GitHub Desktop.

Revisions

  1. @marceloxp marceloxp revised this gist Aug 16, 2018. 1 changed file with 7 additions and 0 deletions.
    7 changes: 7 additions & 0 deletions git-flow.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,13 @@
    # Utilizando o fluxo Git Flow
    > Fonte: <https://medium.com/trainingcenter/utilizando-o-fluxo-git-flow-e63d5e0d5e04>
    ## Este artigo tem o intuito de expor uma abordagem de como trabalhar utilizando o fluxo git flow.

    Se você já trabalha com o git como principal ferramenta de controle de versão, já deve ter visto várias abordagens de como utilizar e controlar branchs em um cenário de produção ou pessoal.
    E se você é novo com git, este fluxo irá te ajudar a ter maior familiaridade de como empresas, projetos opensource costumam utilizar seus fluxos de trabalho.
    É muito comum vermos pessoas utilizando somente um branch para fazer commits em projetos pessoais. Isto não é errado, é muito tranquilo de se controlar tudo em uma branch quando se está desenvolvendo sozinho, mas o cenário muda bastante quando temos que interagir com mais desenvolvedor ou contribuidores, seja em um projeto opensource ou privado.
    Nessas horas é suma importância que se tenha total controle do que está sendo produzido por sua equipe, onde, ao mesmo tempo são corrigidos falhas, implementado novas funcionalidades e ter o seu código de produção com total funcionamento entregue ao seu cliente.

    A **master** irá contér todo código já testado, versionado que será entregue ao cliente e a **develop** é onde todo fluxo de trabalho irá ocorrer antes de fazer o release versionado que será feito merge na **master**.
    A **develop** deve sempre conter o código mais atual, onde as branchs de features serão ramificadas tendo ela como base.
    Exemplo, suponhamos que você precise criar um feature que mudará todo o fluxo e interface de um componente, como fariamos para criar nossa branch ?
  2. @marceloxp marceloxp revised this gist Aug 16, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion git-flow.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    # Utilizando o fluxo Git Flow
    > Fonte <https://medium.com/trainingcenter/utilizando-o-fluxo-git-flow-e63d5e0d5e04>
    > Fonte: <https://medium.com/trainingcenter/utilizando-o-fluxo-git-flow-e63d5e0d5e04>
    A **master** irá contér todo código já testado, versionado que será entregue ao cliente e a **develop** é onde todo fluxo de trabalho irá ocorrer antes de fazer o release versionado que será feito merge na **master**.
    A **develop** deve sempre conter o código mais atual, onde as branchs de features serão ramificadas tendo ela como base.
  3. @marceloxp marceloxp revised this gist Aug 16, 2018. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions git-flow.md
    Original file line number Diff line number Diff line change
    @@ -72,4 +72,5 @@ $ git checkout master && git merge release/v1.0.1
    ```

    ![alt text](https://cdn-images-1.medium.com/max/800/1*G2FX8NNBCtpD6goR9eTZtw.gif "XABLAU")

    XABLAU
  4. @marceloxp marceloxp revised this gist Aug 16, 2018. 1 changed file with 4 additions and 1 deletion.
    5 changes: 4 additions & 1 deletion git-flow.md
    Original file line number Diff line number Diff line change
    @@ -69,4 +69,7 @@ Se tudo correu bem, sua tag será criada e estamos aptos a fazer o merge com a *

    ```sh
    $ git checkout master && git merge release/v1.0.1
    ```
    ```

    ![alt text](https://cdn-images-1.medium.com/max/800/1*G2FX8NNBCtpD6goR9eTZtw.gif "XABLAU")
    XABLAU
  5. @marceloxp marceloxp created this gist Aug 16, 2018.
    72 changes: 72 additions & 0 deletions git-flow.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    # Utilizando o fluxo Git Flow
    > Fonte <https://medium.com/trainingcenter/utilizando-o-fluxo-git-flow-e63d5e0d5e04>
    A **master** irá contér todo código já testado, versionado que será entregue ao cliente e a **develop** é onde todo fluxo de trabalho irá ocorrer antes de fazer o release versionado que será feito merge na **master**.
    A **develop** deve sempre conter o código mais atual, onde as branchs de features serão ramificadas tendo ela como base.
    Exemplo, suponhamos que você precise criar um feature que mudará todo o fluxo e interface de um componente, como fariamos para criar nossa branch ?
    Certifique-se de que a branch **develop** existe no seu repositório remoto listando suas branchs locais e remotas:

    ```sh
    $ git branch -a
    ```

    Caso não esteja, faça a sincronização do seu repositório remoto, faça o checkout criando sua branch **develop** e envie para seu repositório remoto:
    ```sh
    $ git fetch origin && git checkout -b develop && git push origin develop
    ```

    Após ter criado a **develop**, onde irá acontecer todo desenvolvimento, crie a branch respectiva a sua implementação, lembre-se de manter um padrão de nomenclatura para facilitar o entendimento como é sugerido no git flow:

    - **feature**: para novas implementações
    - **release**: para finalizar o release e tags
    - **hotfix**: para resolver problema crítico em produção que não pode esperar novo release

    Neste caso, como já estamos na **develop**:

    ```sh
    $ git checkout -b feature/novo-componente
    ```

    Após criado, você trabalha em sua modificação localmente, caso seja necessário que outra pessoa trabalhe nesta mesma implementação você deve compartilhar para seu repositório remoto:

    ```sh
    $ git push origin feature/novo-componente
    ```

    Show, implementação feita, agora é hora de fazer o merge deste feature com a **develop**, para isto, faça o checkout para a branch **develop**, faça o merge da feature e atualize o remoto:

    ```sh
    $ git checkout develop && git merge feature/novo-componente && git push origin develop
    ```

    Caso não ocorra nenhum conflito, beleza, estamos prontos para fazer o release desta implementação e submeter ao repositório remoto, para isto, crie a branch de release e envie:

    ```sh
    $ git checkout -b release/v1.0.1 && git push origin release/v1.0.1
    ```

    Após feito os ultimos testes, você já pode fazer a tag da versão:

    ```sh
    $ git tag -a v1.0.1 -m "Release do novo componente"
    ```

    Lembrando, que se foi identificado algum bug durante o processo, você deve tratar este bug na branch de release, enviar para a **master** e para a **develop** também, fazendo que a **develop** sempre contenha as correções.

    Nas hora de inserir a tag, gosto de utilizar tag anotadas, pois ela registra informações de quem fez a tag, data, hash, caso não queira estas informações, simplifique:

    ```sh
    $ git tag v1.0.1
    ```

    Agora vamos conferir se a tag foi criada e enviar para o repositório remoto:

    ```sh
    $ git show v1.0.1 && git push v1.0.1
    ```

    Se tudo correu bem, sua tag será criada e estamos aptos a fazer o merge com a **master** deste pequeno **release** na **master**:

    ```sh
    $ git checkout master && git merge release/v1.0.1
    ```