Control de versiones · GitHub

Colaborar en equipo

Git resuelve un problema técnico: guardar la historia de un proyecto. GitHub resuelve uno social: cómo se ponen de acuerdo varias personas sobre qué entra en esa historia. Son dos cosas distintas, y por eso esta parte no tiene simulador — no hay comandos que practicar, hay acuerdos que entender.

Casi todo lo que verás aquí no es una función de GitHub, es una convención. Un pull request no existe en git: es una rama, una comparación y una conversación encima. Si entiendes qué hay debajo, cambiar a GitLab, Gitea o Bitbucket es cuestión de aprender dónde están los botones.

Fork frente a clon

Se confunden constantemente porque las dos «traen» un repositorio, pero ocurren en sitios distintos. Un clon baja el repositorio a tu máquina. Un fork crea una copia bajo tu cuenta en el servidor, con su propia URL — y sobre esa copia sí tienes permiso de escritura.

clon fork
Dónde ocurreEn tu discoEn el servidor
Quién lo haceGit, con un comandoGitHub, con un botón
Te da permiso de escrituraNo cambia nadaSí, sobre tu copia
Existe en git a secasNo, es de la plataforma

Lo normal es hacer las dos: forkeas para tener una copia tuya en GitHub, y clonas esa copia para trabajar en tu máquina.

El triángulo: tú, tu fork y el original

Cuando colaboras en un proyecto ajeno hay tres copias en juego, y confundirlas es el error clásico del primer día. Por convención se les da estos nombres:

tu máquina

Donde editas. Es un clon, y no lo ve nadie más.

origin

Tu fork en GitHub. Aquí sí puedes hacer push.

upstream

El repositorio original. Solo lees de él.

El trabajo circula en un sentido: bajas de upstream, subes a origin, y desde ahí abres el pull request que pide devolverlo al original.

Sincronizar un fork

Un fork no se actualiza solo. Mientras trabajas, el proyecto original sigue avanzando, y si tardas una semana tu copia está una semana atrasada. Eso es lo que produce esos pull requests llenos de conflictos que nadie quiere revisar.

// Una sola vez: declarar de dónde viene el proyecto
git remote add upstream https://github.com/original/proyecto.git
// Cada vez que vayas a empezar algo nuevo
git switch main git fetch upstream git merge upstream/main git push origin main

Todos esos comandos ya los practicaste en el simulador. Lo único nuevo aquí es upstream, que no es más que un segundo remoto.

Una rama por trabajo

Nunca trabajes en main, ni siquiera en tu propio fork. Dos razones prácticas: tu main se mantiene idéntica al original y sincronizarla nunca da conflictos; y cada pull request queda acotado a un solo tema, que es lo que hace que alguien acepte revisarlo.

Regla práctica Si al describir tu rama tienes que usar la palabra «y», probablemente deberían ser dos ramas.

Los archivos que hacen legible un repositorio

README.md — qué es el proyecto, para qué sirve y cómo se pone en marcha. Es lo primero que GitHub muestra, y para la mayoría de la gente es lo único que va a leer.

LICENSE — qué puede hacer otra gente con tu código. Sin licencia, por omisión, nadie tiene permiso de nada: publicar no es lo mismo que autorizar.

CONTRIBUTING.md — cómo se aceptan aportes: estilo, pruebas, formato de los commits. Le ahorra al que llega la pregunta «¿y ahora qué hago?».

.gitignore — ya lo conoces del simulador. Aquí importa el doble: lo que se sube a un repositorio público, público queda.