Remotos y GitHub


Cada repositorio en este manual hasta ahora ha vivido en un solo lugar: tu propia máquina. Eso funciona bien hasta que necesitas una copia de seguridad que sobreviva a una laptop rota, quieres retomar el proyecto desde una segunda computadora, o quieres que alguien más toque el código. Lo que necesitas es una copia del repositorio en algún lugar al que cada máquina involucrada pueda acceder. Esa copia se llama remoto, y GitHub es donde la mayoría de los desarrolladores la ponen.
Qué es un remoto (y dónde encaja GitHub)
Un remoto es una copia de tu repositorio alojada en algún lugar que no sea tu propia máquina, generalmente en GitHub. Cuando clonas un repositorio, Git ya configura uno para ti, llamado origin por defecto. Ejecuta git remote -v (el -v solicita las URLs además de los nombres) para verlo:
$ git remote -v
origin https://github.com/mara-chen/weather-app.git (fetch)
origin https://github.com/mara-chen/weather-app.git (push)Cada remoto que Git conoce se lista dos veces, una para buscar y otra para enviar, porque en teoría los dos podrían apuntar a direcciones diferentes. En la práctica casi siempre son iguales. origin es el apodo que Git asigna automáticamente al clonar. Puedes renombrarlo o añadir un segundo remoto apuntando a otro lugar, pero casi cada proyecto que toques llamará a su remoto principal origin.
Este es un buen momento para reafirmar la distinción que confunde a casi todos los que comienzan: Git y GitHub no son lo mismo. Git es la herramienta de control de versiones ejecutándose en tu máquina, registrando commits independientemente de si estás conectado a algo. GitHub es un sitio web que aloja una copia de tu repositorio y te proporciona un remoto hacia el que enviar y desde el que traer cambios. git remote, git push, y git pull son los comandos que conectan los dos: es cómo el Git que se ejecuta en tu laptop habla con un repositorio en los servidores de GitHub.
origin. Ejecuta git remote -v en cualquier momento para ver qué remotos conoce tu repositorio. Git y GitHub no son lo mismo: Git es la herramienta en tu máquina, GitHub es donde tu remoto generalmente vive. Resolver esa diferencia desde el principio evita mucha confusión después. Dónde alojar tu remoto: GitHub y las alternativas
Todo lo que un remoto hace es Git puro, y eso tiene una consecuencia que vale la pena conocer desde temprano: el host en el otro extremo es intercambiable. Para Git, cada host es una URL en tu configuración, y git push, git pull, y git fetch se comportan idénticamente contra todos ellos. Lo que un host añade se sitúa un nivel arriba: una vista web de tu código, un flujo de revisión, seguimiento de problemas, y control de acceso. Aquí está el panorama, con los equilibrios establecidos claramente:
- GitHub es el más grande por lejos y aloja la gran mayoría del trabajo de código abierto. Su fortaleza es la red: los proyectos a los que quieres contribuir ya están allí, los tutoriales lo asumen, y los empleadores buscan tu perfil en él. El equilibrio es que es una plataforma cerrada (propiedad de Microsoft), y cuanto más dependas de sus funciones adicionales más allá del alojamiento de Git, más atado a ella te vuelves.
- GitLab es la alternativa completa más cercana, con las mismas características principales bajo nombres ligeramente diferentes (las solicitudes de extracción se llaman "solicitudes de fusión" allí). Su punto destacado es una edición autoadministrada que puedes ejecutar en tus propios servidores, razón por la cual las empresas que mantienen código internamente a menudo la eligen. El equilibrio es que empaqueta mucho, y la plataforma puede sentirse más pesada que el alojamiento de código que buscabas.
- Bitbucket es el host de Atlassian, construido para sentarse al lado de sus herramientas de seguimiento de proyectos y documentación, Jira y Confluence. Si tu equipo ya vive en esas herramientas, se ajusta directamente. Fuera de ese ecosistema tiene la comunidad más pequeña de los tres grandes y poca presencia de código abierto.
- Codeberg es un host sin fines de lucro para proyectos de código abierto, ejecutado en la plataforma de código abierto Forgejo. El atractivo es que ninguna empresa posee tu host y la plataforma misma es código abierto. El equilibrio es escala: menos integraciones, una comunidad más pequeña, y un enfoque en código abierto en lugar de trabajo en equipo privado.
- Auto-hospedaje subyace a todos estos: ejecuta Forgejo o Gitea, ambos gratuitos y de código abierto, o la edición autoadministrada de GitLab en hardware que controlas. Obtienes control total y privacidad; el equilibrio es que mantenerlo funcionando se convierte en tu trabajo.
Este manual usa GitHub en sus ejemplos porque aloja la mayoría del trabajo de código abierto y es donde probablemente colaborarás primero. Cada comando en este capítulo se transfiere sin cambios a cualquier otro host: cambia la URL y el ciclo diario sigue igual. Las diferencias viven un nivel arriba, en la interfaz web de cada sitio para revisar y fusionar trabajo, que es donde el flujo de solicitud de extracción del próximo capítulo entra en juego.
Enviar y obtener tu trabajo: git push y git pull
Con un remoto en su lugar, dos comandos cubren la mayoría del trabajo diario. git push envía tus commits locales al remoto. git pull trae commits hechos en otro lugar y los fusiona en la rama en la que estás.
$ git push origin main
Enumerating objects: 5, done.
Writing objects: 100% (3/3), 312 bytes | 312.00 KiB/s, done.
To https://github.com/mara-chen/weather-app.git
9f8e7d6..a1b2c3d main -> mainorigin es el remoto, main es la rama que estás enviando. Esa última línea es la parte que vale la pena leer: muestra main en el remoto moviéndose de un commit al siguiente.
Tirar funciona de la misma manera, en reversa:
$ git pull origin main
remote: Enumerating objects: 4, done.
Unpacking objects: 100% (4/4), done.
Updating a1b2c3d..b7c9e21
Fast-forward
src/index.js | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)Ese es el ciclo completo para trabajar junto a otras personas en un proyecto: trae lo que cambió antes de comenzar, haz tu propio trabajo y confirma, envíalo de nuevo hacia arriba. Trae antes de enviar siempre que compartas una rama con otra persona. Salta el pull y tu push puede aterrizar encima de commits que nunca viste, que Git rechazará en lugar de arriesgarse a perder el trabajo de alguien.
git push envía tus commits hacia arriba al remoto, y git pull trae commits hechos en otro lugar y los fusiona en tu rama. Trae antes de comenzar a trabajar y envía cuando termines, y te mantienes sincronizado con cualquiera más tocando el proyecto. Saltar el pull es la razón más común por la que un push es rechazado. git fetch vs git pull
git pull hace dos cosas en un paso: descarga lo que cambió en el remoto, luego inmediatamente fusiona esos cambios en la rama en la que estás. git fetch hace solo la primera mitad. Descarga nuevos commits pero nunca los fusiona en tu rama. Tu rama actual, y tus archivos de trabajo, permanecen exactamente donde estaban hasta que le dices a Git que fusione o tire.
Este es el tropiezo que casi todos golpean al menos una vez: ejecuta git fetch, no ve cambio visible en ningún lugar, y asume que nada sucedió en el remoto. Algo sucedió: fetch no ha tocado tu rama de trabajo aún. Para ver qué bajó, mira la rama de seguimiento remoto de antes en este capítulo: git log origin/main muestra commits en el remoto que no han llegado a tu main local. Cuando estés listo para traerlos, git merge origin/main lo hace, o git pull ejecuta fetch y esa fusión para ti en un comando.
git pull descarga nuevos commits y los fusiona en tu rama en un paso. git fetch solo los descarga y actualiza la memoria de Git de dónde se sitúa el remoto; tu rama se queda donde está hasta que fusiones. Ver no cambio en tus archivos justo después de un fetch es esperado, los nuevos commits están esperando en la rama de seguimiento remoto. Dónde esto te deja
Push, pull, y fetch obtienen tus commits en un remoto compartido y de vuelta, que cubre la mayoría de lo que la colaboración día a día en Git requiere. Todo aquí se construye sobre el ciclo de commits: aún etapas y confirmas localmente primero, un remoto solo cambia dónde esos commits pueden viajar. La siguiente pieza es hacer esa colaboración a través de GitHub mismo, proponiendo un cambio y teniéndolo revisado antes de que se fusione. El flujo de solicitud de extracción recoge exactamente allí. Si un término en este capítulo aún se siente inestable, rama de seguimiento remoto, refspec, rama ascendente, el Glosario tiene una definición simple para cada uno, y Qué es Git vale la pena una segunda mirada por la distinción Git-versus-GitHub por sí sola.

