<div class="page">
<div class="cover text-center">
<img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo">
# GitFlow
<div class="text-end fit-content ms-auto my-3 mt-auto pt-3">
<p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p>
<p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p>
<p><strong>Curs:</strong> 2024/2025</p>
</div>
<div>
<p class="fw-bold mb-0">Llicència: BY-NC-SA</p>
<p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p>
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank">
<img class="mx-auto" src="/itb/images/license.png" alt="Licence"/>
</a>
</div><!--license-->
</div><!--cover-->
</div><!--page-->
{:toc}
## Introducció
__GitFlow__ és una estratègia de __ramificació__ (_branching_) popular per organitzar el desenvolupament de projectes de programari
que proporciona un marc sòlid per gestionar els canvis de codi i la col·laboració entre els membres de l'equip.
GitFlow es basa en els principis del desenvolupament basat en funcionalitats (_feature-based_)
i fomenta l'ús de branques específiques per a diferents etapes del procés de desenvolupament.
En aquest material, es tractarà els conceptes bàsics de GitFlow, inclosos els seus components clau, avantatges i bones pràctiques.
També es proporcionarà una guia pas a pas per implementar GitFlow als vostres projectes i
destacar algunes de les funcions i tècniques avançades que podeu utilitzar per optimitzar el vostre flux de treball.
## Branques a GitFlow
__GitFlow__ és una estratègia de ramificació que es basa en la creació de diferents branques
que estan destinades a diferents propòsits. Les branques que s'utilitzen són:
- __Branca principal (`main` o `master`)__: Conté el codi preparat per ser posat en producció i només hauria de contindre codi que s'haja provat (_tests_) i revisat a fons.
- __Branca de desenvolupament (`develop`)__: Representa l'estat actual del codi que s'està desenvolupant i provant.
- __Branques de funcionalitats (`feature`)__: Aquestes branques s'utilitzen per desenvolupar noves funcionalitats o fer canvis a les existents.
- Es creen a partir de la branca `develop`.
- Es fusionen (`merge`) amb la branca `develop` una vegada que la funcionalitat s'haja implementat i provat.
- Es poden eliminar una vegada s'haja fusionat amb `develop`.
- Per mantindre una història lineal, es recomana utilitzar `rebase` per incorporar els canvis de `develop` a la branca de funcionalitat abans de fusionar-la.
- __Branques de publicació (`release`)__: Aquestes branques s'utilitzen per preparar el codi per publicar una nova versió.
- Es creen a partir de la branca `develop`.
- Es fusionen amb la branca `main` i `develop` una vegada que s'haja acabat la preparació de la versió.
- Es poden eliminar una vegada s'haja fusionat amb `main` i `develop`.
- Es poden establir etiquetes (`tags`) per marcar la versió publicada.
- __Branques de correcció (`hotfix`)__: Branques que s'utilitzen per corregir errors __crítics__ en el codi de producció que s'han d'arreglar el més ràpid possible.
- Es creen a partir de la branca `main`.
- Es fusionen amb la branca `main` i `develop` una vegada que s'haja corregit l'error.
- Es poden eliminar una vegada s'haja fusionat amb `main` i `develop`.
::: warning
El següent diagrama mostra com es relacionen les diferents branques en GitFlow, i el propòsit de cadascuna d'elles.
No obstant això, aquest diagrama no __manté una història lineal__ de les branques,
que es considera una bona pràctica en tots els projectes de Git.
:::
{.center}{height=500}
## Advantatges i bones pràctiques en GitFlow
Els advantatges d'utilitzar una estratègia de ramificació com __GitFlow__ són:
- Proporciona un flux de treball clar i coherent per gestionar els canvis de codi.
- Permet el desenvolupament paral·lel i la prova de diferents funcions i correccions d'errors.
- Ajuda a mantenir un codi estable i preparat per posat en producció.
- Facilita la col·laboració entre els membres de l'equip.
Per facilitar el treball en aquesta estratègia i intentar que la seua implementació i utilització siga clara,
es recomana utilitzar les següents pràctiques:
- Utilitzar noms de branques descriptius que indiquen clarament el seu propòsit i contingut.
Una bona manera de fer-ho és utilitzar un prefix comú per cada tipus de branca.
- Branques de funcionalitats: `feature/web-main-page`, `feature/shopping-cart`.
- Branques de publicació: `realease/prepare-1.0`.
- Branques de correció: `hotfix/fix-security-vulnerability`.
- Creeu sempre branques de funcionalitats des de la branca de desenvolupament i torneu-les a fusionar quan s'haja acabat el desenvolupament.
- Combineu regularment els canvis de la branca de desenvolupament a les vostres branques
de funcionalitats per assegurar-vos que es mantinguin al dia amb el codi més recent.
Podeu utilitzar `rebase` per incorporar aquests canvis.
## Bibliografia
- https://www.atlassian.com/es/git/tutorials/comparing-workflows/gitflow-workflow
Aquest lloc web utilitza galetes per millorar l'experiència de l'usuari