Qué es un repositorio Git: local, remoto y la diferencia

Qué es un repositorio Git para principiantes: la carpeta .git, la diferencia entre repositorio local y remoto, y cómo conectarlos con git push y pull.

Qué es un repositorio Git: local, remoto y la diferencia

Todos hemos tenido esta carpeta en el escritorio: proyecto-final, proyecto-final-v2, proyecto-final-bueno y, cómo no, proyecto-final-DEFINITIVO. Cuatro copias del mismo trabajo y ninguna certeza de cuál es la que funciona. Un repositorio Git existe justamente para que no vuelvas a hacer eso. El problema es que casi todo el mundo empieza a usar la palabra repositorio sin tener claro qué es, dónde vive, ni por qué se habla de uno local y de otro remoto.

Para seguir este post solo necesitas tener Git instalado en tu ordenador y saber abrir una terminal. No hace falta experiencia previa con control de versiones. Cada término lo explico antes de usarlo.

¿Qué es un repositorio Git?

Un repositorio Git es una carpeta de proyecto de la que Git guarda toda la historia de cambios. Eso es lo esencial: tu proyecto de siempre (código, imágenes, documentos…) más un registro de cómo ha ido cambiando con el tiempo.

Piensa en la máquina del tiempo de tu ordenador, esa que hace copias de seguridad periódicas. Un repositorio hace algo parecido, pero tú decides cuándo se toma cada “foto” del proyecto, le pones un nombre y puedes volver a cualquiera de ellas cuando quieras. Cada una de esas fotos se llama commit, y es una versión guardada del proyecto en un momento concreto.

Lo importante para el modelo mental: el repositorio no es una web ni un servicio de internet. Es una carpeta en tu disco que Git ha marcado como “esta la vigilo yo”. Y lo que la marca es una carpeta oculta muy concreta.

¿Qué es la carpeta .git y por qué no debes tocarla?

La carpeta .git es lo que convierte una carpeta normal en un repositorio. Es el diario del proyecto: ahí dentro Git anota cada commit, cada versión anterior y la configuración del repositorio. Sin esa carpeta, tienes una carpeta cualquiera; con ella, tienes un repositorio.

Diagrama que muestra una carpeta normal transformándose en un repositorio Git al aparecer dentro la carpeta oculta .git, mediante los comandos git init o git clone.
Una carpeta se convierte en repositorio en el momento en que aparece dentro la carpeta oculta .git, donde Git guarda todo el historial de commits.

Se crea con un solo comando. Al ejecutar git init dentro de una carpeta, Git crea ahí la carpeta oculta .git [1]:

# Convierte la carpeta actual en un repositorio Git
git init
# Salida típica:
# Initialized empty Git repository in /ruta/a/tu-proyecto/.git/

Es oculta porque su nombre empieza por punto (.git), y en la mayoría de sistemas los archivos que empiezan por punto no se muestran por defecto. No la ves en el explorador de archivos, pero está ahí. Para comprobar que ya estás dentro de un repositorio, git status te lo dice:

# Muestra el estado del repositorio actual
git status
# Si estás en un repositorio, verás la rama actual y los cambios.
# Si no lo estás: "fatal: not a git repository (or any of the parent directories): .git".

¿Por qué no debes tocarla a mano? Porque Git da por hecho que solo él escribe ahí. Si borras o editas archivos de .git por tu cuenta, puedes corromper el historial y perder versiones. La regla para un principiante es simple: no la abras ni la edites. Hablas con .git a través de comandos de Git, nunca abriendo sus archivos.

¿Qué es un repositorio local?

Un repositorio local es el que vive en tu ordenador. Cuando ejecutas git init o clonas un proyecto, el repositorio que aparece en tu disco es el local: la carpeta con tu trabajo y su .git correspondiente.

La ventaja que más sorprende al principio es que funciona sin conexión. Puedes crear commits, mirar el historial y volver a versiones anteriores en un avión, sin wifi, sin cuenta en ninguna web. Todo el historial está en tu máquina, dentro de esa carpeta .git. Git no necesita internet para hacer su trabajo del día a día.

Esto tiene una cara B. Si tu portátil se estropea o pierdes la carpeta, se va contigo todo lo que solo existía en local. Aquí es donde entra el segundo tipo de repositorio.

Repositorio remoto: la copia que compartes

Un repositorio remoto es una copia de tu repositorio alojada en un servidor, pensada para compartirse. Plataformas como GitHub, GitLab o Bitbucket son las que alojan esos repositorios remotos y les ponen una interfaz web encima. El remoto vive fuera de tu ordenador, en una máquina a la que llegas por internet.

Para qué sirve tener una copia fuera: para trabajar en equipo (varias personas apuntan al mismo remoto) y para tener tu trabajo en un sitio seguro por si le pasa algo a tu ordenador. Es la versión del proyecto que ve el resto de tu equipo.

Aquí surge la confusión más común de todas: pensar que Git y GitHub son lo mismo. Git es la herramienta que llevas instalada y que gestiona el historial; GitHub es una empresa que aloja repositorios remotos en internet. Puedes usar Git durante meses sin abrir GitHub ni una sola vez. Si esta distinción te chirría, la desmenuzo en Git y GitHub: en qué se diferencian.

Local y remoto: la diferencia en la práctica

La diferencia se ve mejor con las dos versiones una al lado de la otra:

Diagrama que muestra el repositorio local en el ordenador del desarrollador conectado a un repositorio remoto en un servidor mediante los comandos git clone, git push y git pull.
git clone trae el remoto a tu ordenador y crea el local; git push sube tus commits; git pull trae los cambios que todavía no tienes.
Repositorio localRepositorio remoto
Dónde viveEn tu ordenador, en la carpeta del proyectoEn un servidor (GitHub, GitLab, Bitbucket)
Quién lo veSolo tú, en tu máquinaTu equipo y quien tenga acceso
¿Necesita conexión?No, funciona sin internetSí, se accede por internet
Para qué sirveTrabajar y guardar commits en el día a díaCompartir el trabajo y tenerlo a salvo fuera
Comando típicogit init, git commitgit push, git pull

En la práctica el flujo suele empezar de dos maneras. Si el proyecto ya existe en un remoto, lo traes con git clone y la URL del repositorio. Ese comando crea el repositorio local en tu ordenador a partir del remoto y, además, configura automáticamente ese remoto con el nombre origin [2]:

# Trae un repositorio remoto y crea el local a partir de él
git clone https://github.com/usuario/mi-proyecto.git
# Crea la carpeta mi-proyecto/ con el trabajo y su .git dentro,
# y deja configurado el remoto con el nombre "origin".

Ese nombre, origin, es solo una etiqueta para no tener que escribir la URL completa cada vez. Para ver a qué remoto apunta tu repositorio local:

# Lista los remotos configurados y sus URLs
git remote -v
# origin  https://github.com/usuario/mi-proyecto.git (fetch)
# origin  https://github.com/usuario/mi-proyecto.git (push)

Con el local y el remoto conectados, dos comandos hacen el viaje de ida y vuelta. git push sube tus commits del local al remoto. git pull hace lo contrario: se trae del remoto los cambios que tú no tienes y los combina con tu copia local.

Ahora bien, cuidado con lo que esto significa. El remoto solo guarda lo que le has enviado con git push. Si haces diez commits en local y no subes ninguno, el remoto no sabe nada de ellos. Solo viaja al remoto lo que empujas a mano.

Errores comunes de principiante

Estos son los tropiezos que veo una y otra vez cuando alguien empieza. Reconocerlos ahora te ahorra sustos.

Confundir Git con GitHub

Es el malentendido de base. Git es el programa que gestiona el historial en tu ordenador; GitHub es un sitio web donde puedes alojar el repositorio remoto. Puedes tener un repositorio Git perfectamente funcional sin cuenta en GitHub. Cuando alguien dice “sube esto a Git”, casi siempre quiere decir “haz push al remoto en GitHub”.

Editar o borrar la carpeta .git a mano

Ya lo vimos, pero merece repetirlo porque el daño es serio. Si abres .git y empiezas a borrar o cambiar archivos porque “ocupan sitio” o “no sé qué son”, puedes cargarte el historial entero del repositorio. Trátala como el motor de un coche: funciona, no lo abras con un destornillador.

Creer que el remoto guarda tu trabajo solo

Este pilla a mucha gente el día que el portátil muere. El remoto contiene la última vez que hiciste git push, y nada más. Si llevabas tres días trabajando sin subir nada, esos tres días vivían solo en tu local. Acostúmbrate a hacer push a menudo y tendrás una copia reciente fuera de tu máquina.

Hacer git init dentro de otro repositorio

Si ejecutas git init en una carpeta que ya está dentro de un repositorio (o clonas un proyecto y haces init encima sin darte cuenta), acabas con repositorios anidados y un lío de historiales que se pisan. Antes de crear un repositorio nuevo, comprueba con git status que no estás ya dentro de uno.

Tu siguiente paso con Git

Ya tienes el modelo mental limpio: un repositorio es tu carpeta más su diario .git, el local vive en tu ordenador y el remoto es la copia que compartes y a la que subes con push. Con eso dejas de usar la palabra repositorio a ciegas.

Lo natural ahora es crear el tuyo y tocar los comandos con las manos. El paso a paso lo tienes en cómo crear tu primer repositorio Git, y si quieres el mapa completo de por dónde empezar con Git, la guía de primeros pasos con Git reúne todas las piezas.

Un concepto nuevo cada semana

Si prefieres aprender practicando en vez de solo leer, en el curso Git de cero a profesional haces tú mismo el git init, el git clone y el primer git push, con ejercicios guiados para que los comandos se te queden por repetición y no por memoria.

Fuentes

  1. Documentación oficial de Git (git init): confirma que git init crea un repositorio vacío, es decir, la carpeta .git.
  2. Documentación oficial de Git (git clone): confirma que git clone crea el repositorio local en un directorio nuevo y configura el remoto bajo el nombre origin.
  3. Documentación oficial de Git (git remote): un repositorio puede tener varios remotos; origin es el nombre por convención.

Preguntas Frecuentes

¿Puedo tener un repositorio Git sin GitHub?

Sí, sin problema. Un repositorio local funciona por sí solo en tu ordenador: creas commits y revisas el historial sin conexión ni cuenta en ninguna plataforma.

¿Dónde se guarda exactamente un repositorio local?

En la propia carpeta del proyecto, dentro de la subcarpeta oculta .git. Ese es el sitio donde Git almacena todos los commits, las versiones anteriores y la configuración. Tu código sigue estando a la vista en la carpeta como siempre; lo que añade el repositorio es ese diario oculto al lado.

¿Cuántos remotos puede tener un repositorio Git?

Puede tener varios [3]. origin es simplemente el nombre por defecto que Git le pone al remoto cuando clonas un proyecto, pero puedes añadir más con otros nombres (por ejemplo upstream para el proyecto original del que hiciste una copia). El comando git remote -v te lista todos los que tienes configurados con sus URLs.

¿Se pierde el historial si borro la carpeta .git?

Sí. Si borras la carpeta .git, esa carpeta vuelve a ser una carpeta normal y desaparece todo el historial de commits que vivía en local. La única forma de recuperarlo es que ese trabajo exista también en un repositorio remoto al que hubieras hecho git push. Por eso conviene subir a menudo: el remoto es tu red de seguridad.