Salta el contingut
 

Forks i Pull Requests

Autor: Joan Puigcerver Ibáñez

Correu electrònic: j.puigcerveribanez@edu.gva.es

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Forks i Pull Requests

Dins de les eines de col·laboració que ofereixen els serveis d'allotjament de repositoris en línia com GitHub o GitLab, hi ha dues funcionalitats clau:

  • Forks: permeten copiar un repositori d'un altre usuari o organització com a propi.

    En aquesta còpia, l'usuari pot realitzar canvis, afegir funcionalitats o corregir errors sense afectar el repositori original.

    El fork queda enllaçat amb el repositori original, de manera que es pot mantindre sincronitzat si el repositori original es modifica.

  • Pull Requests: permeten sol·licitar la incorporació de canvis d'un repositori a un altre.

    Si un usuari ha realitzat canvis en un fork i vol que aquests canvis es incorporin al repositori original, pot enviar una sol·licitud de pull request. Aquesta sol·licitud serà revisada pels propietaris del repositori original, que podran acceptar-la o rebutjar-la.

Aquestes dues funcionalitats són essencials per a la col·laboració en projectes de desenvolupament de programari de manera distribuïda i col·laborativa, sobretot en projectes de codi obert.

Forks

Una bifurcació o fork és una còpia d'un repositori que pertany a un usuari o organització com a propi.

En el teu fork pots realitzar qualsevol canvi com:

  • Corregir errors.
  • Afegir funcionalitats.
  • Millorar la documentació.
  • Adaptar el codi a les teves necessitats.

Un fork sempre està enllaçat amb el repositori original, de manera que es si es realitzen canvis en el repositori original, pots decidir incorporar-lo al teu fork.

Estructura de treball amb Forks i Pull Requests

Figura 1. Estructura de treball amb Forks i Pull Requests

Exemple de bifurcació de Material for MkDocs

Repositori Material for MkDocs principal

Figura 2.Repositori Material for MkDocs principal

Per a poder realitzar contribucions, s'ha creat un fork del repositori original.

Repositori Material for MkDocs bifurcat

Figura 3.Repositori Material for MkDocs bifurcat

Creació d'un Fork

Per crear un fork d'un repositori, cal accedir a la pàgina del repositori i fer clic al botó Fork que apareix a la part superior dreta.

Creació d'un fork de Material for MkDocs

Vegem el menú de creació d'un fork en el repositori Material for MkDocs.

Creació d'un fork

Figura 4. Creació d'un fork en el repositori Material for MkDocs

Pull Requests

Una Sol·licitud de Incorporació o Pull Request (PR) és una sol·licitud per a incorporar canvis a un repositori.

Els PR poden ser utilitzats per a:

  • Incorporar canvis d'un fork a un repositori original.
  • Incorporar canvis d'una branca a una altra branca.

Aquesta funcionalitat es essencial per a la col·laboració en projectes, especialment els de codi obert. A més, aquesta funcionalitat pot ser implementada dins d'una estratègia de ramificació.

A un PR es pot afegir informació com:

  • Títol i descripció dels canvis.
  • Comentaris per als revisors.
  • Referències a tasques o Incidències.

A més, es pot consultar:

Les PR poden estar en quatre estats diferents:

  • Esborrany o Draft: En procés de creació.
  • Obert: En procés de revisió i llest per a ser fusionat.
  • Fusionat: acceptat i incorporat al repositori.
  • Tancat: rebutjat o tancat sense incorporar.
Exemple de Pull Request a Material for MkDocs

En el repositori Material for MkDocs existeixen múltiples PR on s'han realitzat canvis per a millorar el tema o actualitzar la documentació.

Sol·licitud de Pull Request

Figura 5. Exemple de Pull Request en el repositori Material for MkDocs

Creació d'un Pull Request

Per crear un PR, cal accedir al teu fork o branca i fer clic al botó Pull Request.

En el procés de creació d'un PR, es mostrarà una pantalla on es compararan els canvis realitzats amb la branca de destí i es podrà afegir informació addicional com el títol i la descripció.

Creació d'un Pull Request

A la branca feature/time-range del meu fork podem crear un PR per a incorporar els canvis al repositori original.

Creació d'un Pull Request

Figura 6. Creació d'un Pull Request

En la pantalla de creació d'un PR es poden veure els canvis realitzats en la branca feature/time-range respecte a la branca de destí verion3.

Comparació de canvis en un Pull Request

Figura 7. Comparació de canvis en un Pull Request

Una vegada creat la PR, es pot sol·licitar la revisió dels canvis a altres usuaris i realitzar els canvis necessaris fins a la seva acceptació.

Incorporació de la Pull Request

Quan un PR és acceptat, els canvis es fusionen amb la branca de destí i es tanca la PR.

La fusió del PR pot ser de diferents tipus:

  • Crear un commit de fusió: es crea un nou commit que incorpora els canvis de la PR, com en una Fusió de branques divergents.
  • Fusió en un sol commit (squash): es fusionen tots els canvis de la PR en un sol commit mitjançant Merge squash.
  • Canvi de base (rebase): es realitza un Canvi de base (rebase) de la branca de la PR respecte a la branca de destí i es fusiona amb una Fusió directa.

Tipus de fusió d'una Pull Request

Figura 8. Tipus de fusió d'una Pull Request

Configuració de les Pull Requests

El repositori pot ser configurat per habilitar els diferents tipus de fusió, entre altres configuracions a l'apartat Settings

Configuració de les opcions de les Pull Requests

Figura 9. Configuració de les opcions de les Pull Requests

Flux de treball

Amb aquestes dues funcionalitats, es pot establir un flux de treball per a la col·laboració en projectes de desenvolupament de programari.

Aquest flux de treball pot ser el següent:

  1. Realitzar un fork del repositori original.
  2. Clonar el fork en el teu entorn de desenvolupament.
  3. Crear una branca per a realitzar els canvis.
  4. Realitzar els canvis en la branca.
  5. Publicar la branca en el fork.
  6. Crear un PR per a incorporar els canvis al repositori original.
  7. Revisar i debatre els canvis amb els revisors.
  8. Incorporar els canvis al repositori original.
  9. Actualitzar el fork amb els canvis del repositori original.

Protecció de branques

Per a evitar canvis no desitjats en les branques principals i evitar problemes deguts a una mala aplicació de les Estratègies de ramificació, les branques importants main i develop poden ser protegides mitjançant conjunts de regles (Rulesets).

Per configurar les regles de protecció de branques, cal accedir a la configuració del repositori Settings i buscar l'apartat Rules.

Protecció de branques

Figura 10. Protecció de branques

Aquestes regles permeten definir les condicions per modificar la branca especificada, com ara:

  • Protegir-les contra creació, modificació o eliminació.
  • Obligar a mantindre una història lineal.
  • No permetre publicacions forçades (push --force).
  • Requerir que les comprovacions automàtiques s'hagen realitzat correctament.
  • Requerir que la fusió es realitze mitjançant un PR.

    En aquest cas, es poden configurar altres opcions com:

    • Requerir revisió d'un nombre mínim de revisors.
    • Requerir una resolució dels conflictes abans de la fusió.

Comentaris