Entendiendo Fork y Pull Request en GitHub (Introducción al desarrollo colaborativo)
En los artículos anteriores, has dominado el flujo básico de gestión de tus propios proyectos en GitHub. Sin embargo, el verdadero poder de GitHub se desata no cuando lo usas solo, sino cuando participas en proyectos de otros y desarrollas de forma colaborativa.
Esta vez, explicaremos detalladamente el concepto y los pasos concretos de "Fork" y "Pull Request", el flujo de trabajo más importante y fundamental para contribuir a proyectos externos (como proyectos de código abierto) en los que no tienes permiso de escritura. Si entiendes este flujo, podrás dar tu primer paso para colaborar con desarrolladores de todo el mundo.
¿Por qué es necesario hacer Fork? La razón por la que no puedes hacer push directamente
Como es natural, no puedes subir (hacer push) código directamente al repositorio de GitHub de otra persona. Si cualquiera pudiera escribir libremente, el proyecto se convertiría en un caos, ¿verdad? Es lo mismo que no poder entrar en casa de otra persona sin tener la llave y redecorarla a tu gusto.
Entonces, ¿cómo puedes contribuir al proyecto de otra persona? La respuesta es "Fork".
Un Fork es una función que copia un repositorio ajeno por completo a tu propia cuenta de GitHub, creando un lugar de almacenamiento (repositorio remoto) exclusivo para ti. Es como llevarte una "copia para ti" a tu casa para poder trabajar en ella libremente. Tienes permisos de escritura completos sobre ese repositorio tuyo.
Y el mecanismo para proponer las modificaciones que has realizado en tu repositorio al proyecto original es el "Pull Request".
El panorama general de Fork & Pull Request
Antes de empezar a teclear comandos, vamos a hacernos una idea del flujo completo. El flujo típico para contribuir a un proyecto de código abierto consta de los siguientes seis pasos.
- Fork: Copiar el proyecto original a tu propia cuenta de GitHub.
- Clone: Copiar a tu PC el repositorio "tuyo" que se ha creado al hacer Fork.
- Branch: Crear una nueva rama (branch) para realizar el trabajo de modificación.
- Modify & Commit: Modificar el código en tu PC y hacer commit de los cambios.
- Push: Subir el contenido del commit a "tu" repositorio de GitHub.
- Pull Request: Enviar una solicitud desde tu repositorio al proyecto original para que "incorporen este cambio".
Si lo representamos en un diagrama, el flujo sería el siguiente:
[Diagrama: Un flujo que muestra 1. Repositorio Original →(Fork)→ 2. Tu Repositorio de GitHub →(Clone)→ 3. Tu PC →(Push)→ 4. Tu Repositorio de GitHub →(Pull Request)→ 5. Repositorio Original]
¡En la práctica! Pasos para contribuir a un proyecto de código abierto
Ahora, sigamos los pasos concretos. Como práctica, vamos a proceder con un escenario en el que proponemos una simple corrección de un error tipográfico (typo).
Paso 1: Haz Fork del repositorio al que quieres contribuir
Primero, abre la página de GitHub del proyecto al que quieres contribuir. Haz clic en el botón "Fork" que se muestra en la esquina superior derecha de la página.
[Imagen: Señalando el botón "Fork" en la página de un proyecto de GitHub.]
Aparecerá una pantalla que dice "Create a new fork". Confirma el nombre del repositorio, etc., y pulsa el botón "Create fork". Después de una breve espera, se creará una copia completa de ese repositorio en tu cuenta de GitHub.
[Imagen: La pantalla del repositorio en tu propia cuenta después de hacer Fork. Se puede ver que la URL tiene tu nombre de usuario.]
Paso 2: Haz `clone` del repositorio del que has hecho Fork
A continuación, haz `clone` a tu PC local del repositorio "que está en tu cuenta" que acabas de crear al hacer Fork. Ten cuidado de copiar la URL del repositorio del que has hecho Fork, no la del repositorio original.
git clone git@github.com:tu-nombre-de-usuario/nombre-del-repositorio-forkeado.git
Paso 3: Crea una rama de trabajo
Entra en la carpeta clonada y crea una nueva rama para el trabajo de modificación que vas a realizar. Es una buena práctica trabajar en un espacio de trabajo dedicado sin "ensuciar" directamente la rama `main` original. Usar `checkout -b` te permite crear y cambiar a la nueva rama al mismo tiempo.
cd nombre-del-repositorio-forkeado
git checkout -b fix-typo-in-readme
Paso 4: Modifica el código y haz `commit` & `push`
En tu PC local, abre un archivo como `README.md`, corrige un error tipográfico o haz cualquier otro cambio y guárdalo. Una vez que hayas terminado con los cambios, regístralos con `add` y `commit` como has aprendido.
git add .
git commit -m "Fix a typo in README.md"
Finalmente, haz push de este commit a tu repositorio remoto (el que hiciste Fork). No olvides especificar el nombre de la rama que creaste.
git push origin fix-typo-in-readme
Paso 5: Crea una Pull Request
Llegamos al momento culminante. Vuelve a abrir la página de tu repositorio del que hiciste Fork en el navegador y actualízala. Deberías ver una notificación amarilla que dice "'fix-typo-in-readme' had recent pushes" y un botón verde que dice "Compare & pull request". Hagamos clic en este botón.
[Imagen: El botón "Compare & pull request" que se muestra en el repositorio del que se ha hecho Fork.]
Serás redirigido a una página que dice "Open a pull request". Aquí es donde crearás una carta de solicitud para que tus cambios sean incorporados al proyecto original.
- Title (Título): Pon un título que describa de forma concisa los cambios. (Ej: `Fix a typo in the introduction`)
- Leave a comment (Dejar un comentario): Explica educadamente por qué hiciste este cambio y qué has modificado. Es una cuestión de cortesía hacia la persona que lo revisará.
[Imagen: La pantalla de creación de una Pull Request, con los campos de título y descripción resaltados.]
Revisa el contenido y pulsa el botón "Create pull request". Tu propuesta será enviada al administrador del repositorio original.
Paso 6: Espera la revisión y la fusión (merge)
Cuando se crea una Pull Request, el administrador del repositorio original recibe una notificación. El administrador revisará tu código y puede que te deje comentarios o te pida modificaciones adicionales. Tras un intercambio de pareceres, si no hay problemas con tus cambios, el administrador fusionará (hará merge) tu Pull Request.
[Imagen: Tu Pull Request mostrada como "Merged" con un icono morado.]
En el momento en que se fusiona, tu corrección se convierte oficialmente en parte del proyecto. ¡Felicidades! Así es como se contribuye al código abierto.