<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. ::: ![Gitflow Branches](/itb/DAM-ED/UD8/img/gitflow_branches.svg){.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