Qué es el control de versiones (y por qué ganó Git)

Qué es el control de versiones, para qué sirve y por qué Git, el sistema distribuido, se impuso a los centralizados. Explicado desde cero para principiantes.

Qué es el control de versiones (y por qué ganó Git)

Seguro que alguna vez has terminado con una carpeta así: proyecto.zip, proyecto_final.zip, proyecto_final_v2.zip, y el clásico proyecto_final_DEFINITIVO_ESTE_SI.zip. Cada archivo es una foto del trabajo en un momento distinto. Eso ya es control de versiones, solo que hecho a mano, y mal. La buena noticia es que hay herramientas que hacen justo eso, pero bien, sin que tengas que inventar nombres cada vez más desesperados.

En este post quiero que te lleves el mapa mental antes de tocar un solo comando: qué es el control de versiones, qué problema resuelve, la diferencia entre los dos grandes tipos que existen, y por qué casi todo el sector acabó usando Git.

¿Qué es el control de versiones?

El control de versiones es un sistema que registra los cambios de tus archivos a lo largo del tiempo, para que puedas volver a cualquier versión anterior cuando quieras. En vez de guardar copias enteras con nombres distintos, guardas una sola carpeta y una línea de tiempo con todos sus estados.

Piensa en el historial de ediciones de un documento compartido. Puedes ver qué se escribió el martes, quién tocó ese párrafo y recuperar la versión de antes de que alguien lo rompiera. El control de versiones hace lo mismo con el código de un proyecto, con mucho más detalle y control.

La palabra clave es historial. No guardas fotos sueltas. Guardas la historia completa de cómo tu proyecto llegó a ser lo que es hoy.

¿Qué problemas resuelve exactamente?

Resuelve cuatro cosas que, sin él, acaban en dolor. La primera es obvia: volver atrás. Si un cambio rompe algo, vuelves al estado anterior sin drama y sin buscar en qué zip estaba la versión buena.

La segunda es el historial con contexto. No solo guardas el “qué” cambió, también el “quién”, el “cuándo” y, si lo escribes bien, el “por qué”. Cada punto guardado en la línea de tiempo lleva un mensaje. Meses después, cuando no recuerdes por qué esa función es tan rara, el historial te lo cuenta.

La tercera aparece en cuanto trabajas con otra persona: colaborar sin pisaros. Dos personas pueden tocar el mismo proyecto a la vez, cada una en su copia, y luego combinar el trabajo (eso es un merge). El sistema sabe unir cambios que no se solapan y avisarte cuando dos personas editaron exactamente la misma línea.

La cuarta es la más sutil y la que más se agradece con el tiempo: experimentar sin miedo. Puedes abrir una línea de trabajo aparte para probar una idea arriesgada. Esa línea de trabajo aparte tiene nombre: es una rama (branch). Si el experimento sale bien, incorporas la rama a tu trabajo principal. Si sale mal, la tiras y tu trabajo principal sigue intacto, como si nunca hubieras probado nada. Esa libertad de romper cosas sin consecuencias cambia cómo programas.

¿Qué es un sistema de control de versiones?

Un sistema de control de versiones, o VCS por sus siglas en inglés (Version Control System), es el programa que automatiza todo lo anterior. Tú trabajas normal, editando archivos, y la herramienta se ocupa de registrar los estados y reconstruir cualquier versión pasada cuando se la pidas.

Hay tres conceptos que vas a oír todo el rato:

  • Repositorio: la carpeta de tu proyecto más el historial completo de sus cambios. Cuando “pones un proyecto bajo control de versiones”, lo conviertes en un repositorio.
  • Commit: un punto guardado en la línea de tiempo. Es una foto de tus archivos en un momento concreto, con su autor, su fecha y un mensaje que explica el cambio. Si quieres entender bien esta pieza, la desmenuzo en qué es un commit en Git.
  • Historial: la secuencia de commits, del primero al último, que cuenta cómo evolucionó el proyecto.

Con Git, crear un repositorio en una carpeta es un solo comando:

# Convierte la carpeta actual en un repositorio Git.
# Crea una subcarpeta oculta .git donde vive todo el historial.
git init

A partir de ahí puedes preguntarle en cualquier momento en qué estado estás:

# Muestra qué archivos cambiaste y cuáles están listos para el próximo commit.
git status

Y cuando tengas varios commits, puedes ver el historial de un vistazo:

# Lista los commits, uno por línea: primero el identificador corto, luego el mensaje.
git log --oneline

Eso te devuelve algo así:

a1b2c3d Arregla el cálculo del total en el carrito
9f8e7d6 Añade la pantalla de login
0c1d2e3 Primer commit: estructura inicial del proyecto

Ese código raro del principio de cada línea (a1b2c3d) es el identificador del commit. Es hexadecimal, así que solo lleva cifras y letras de la a a la f. Sirve para señalar un punto exacto de la historia sin ambigüedad.

Centralizado vs distribuido: ¿cuál es la diferencia?

Aquí está el corazón del asunto. Existen dos maneras de organizar dónde vive el historial, y esa decisión lo cambia casi todo.

En un sistema centralizado, hay un único servidor que guarda el historial completo, y todo el mundo se conecta a él para trabajar. Tu ordenador tiene una copia de los archivos, pero no la historia entera. Para ver el historial o guardar un cambio, necesitas hablar con el servidor. Subversion (SVN) y el más antiguo CVS funcionan así.

En un sistema distribuido, cada persona tiene una copia completa del repositorio en su ordenador, historial incluido. Trabajas contra tu copia local, sin pedir permiso a nadie, y solo te conectas con los demás cuando quieres intercambiar cambios. Git es el ejemplo dominante de este modelo.

Comparación visual entre control de versiones centralizado, con un único servidor que guarda el historial completo, y distribuido, donde cada persona tiene una copia completa del historial en su ordenador.
En el modelo centralizado solo el servidor tiene el historial completo. En el distribuido, cada copia local ya lo tiene entero.

La tabla lo resume:

AspectoCentralizado (SVN, CVS)Distribuido (Git)
Dónde vive el historialEn un único servidorUna copia completa en cada ordenador
¿Funciona sin conexión?No para guardar cambios o ver el historialSí, casi todo es local
Crear una ramaNecesita hablar con el servidor, y combinarla luego suele ser más engorrosoLocal, rápido y barato, se usa a diario
Si el servidor se caeNadie puede guardar ni consultar el historialCada quien conserva el historial completo
EjemplosSubversion, CVSGit, Mercurial

La consecuencia práctica es enorme. Con un sistema distribuido puedes trabajar en un tren sin wifi, hacer diez commits, revisar el historial de hace dos años y probar una idea en una rama aparte. Nada de eso necesita conexión. Solo la necesitas al final, para compartir.

¿Por qué ganó Git?

Git ganó porque el modelo distribuido resultó ser más rápido, más resistente y más cómodo para el día a día. Al tener el historial completo en local, casi todas las operaciones son instantáneas: no esperas a un servidor. Si ese servidor central se cae, tu trabajo no se detiene, porque tu copia ya tiene todo. Y como crear ramas es tan barato, abrir una para cada tarea o experimento se volvió lo normal, no la excepción.

Git nació en 2005 dentro del desarrollo del kernel de Linux, para gestionar un proyecto enorme con muchísima gente colaborando a la vez. Ese origen lo forzó a ser bueno justo en lo que más cuesta: ramas, merges y trabajo en paralelo. Con el tiempo, y con el empujón de servicios que lo alojaban en la nube, se convirtió en el estándar de facto.

¿Y GitHub no era lo mismo?

No, y esta confusión es de las más comunes al empezar. Git es la herramienta de control de versiones que corre en tu ordenador. GitHub es un servicio de una empresa que aloja repositorios Git en internet, para que tu equipo tenga un lugar común donde compartirlos.

Dicho de otro modo: Git funciona perfectamente sin GitHub. Puedes tener un repositorio Git completo en tu portátil sin cuenta en ningún sitio. GitHub (o alternativas como GitLab y Bitbucket) añade un punto de encuentro en la nube, más herramientas de equipo encima. Si esta distinción te sigue pareciendo borrosa, la aclaro a fondo en Git vs GitHub: en qué se diferencian.

Errores comunes al empezar

Pensar que es solo para equipos grandes. El malentendido más caro de todos. El historial y la capacidad de volver atrás te sirven aunque programes tú solo un sábado por la tarde. De hecho, el primer proyecto donde de verdad agradeces el control de versiones casi siempre es uno personal que rompiste sin querer y no sabías cómo recuperar.

Confundir control de versiones con copias de seguridad. Se parecen, pero responden a preguntas distintas: “¿cómo recupero mis archivos?” frente a “¿por qué esto está así y cómo era antes?”. Una copia de seguridad guarda el estado de hoy por si mañana pierdes el disco; el control de versiones guarda cómo llegaste hasta hoy, paso a paso, con el motivo de cada cambio.

Querer memorizar comandos antes de entender el modelo. La trampa clásica. Git tiene fama de difícil porque mucha gente empieza copiando comandos de internet sin saber qué es un repositorio, un commit o una rama. Cuando el modelo mental encaja, esos mismos comandos dejan de dar miedo y empiezan a tener sentido.

Creer que Git y GitHub son la misma cosa. Lo son tan poco como un procesador de textos y el servicio en la nube donde guardas tus documentos. Lo aclaro en la sección de arriba, pero conviene repetirlo porque es la confusión número uno al empezar.

Empezar de cero sin agobios

No necesitas dominar Git en un día. Necesitas entender el modelo, y luego practicar el puñado de comandos que se usan la mayoría del tiempo. El resto lo irás aprendiendo cuando lo necesites, no antes.

El siguiente paso natural es dar tus primeros pasos con la herramienta: crear un repositorio, hacer tu primer commit y ver el historial crecer. Todo eso lo tienes explicado con calma en la guía de Git para dar tus primeros pasos.

Y si prefieres aprenderlo practicando en vez de leyendo, en el curso de Git de cero a profesional trabajas el modelo mental y los comandos clave con ejercicios interactivos, a tu ritmo. Está pensado justo para alguien que empieza y quiere entender lo que hace, no memorizar recetas.

Un concepto nuevo cada semana

Preguntas frecuentes

¿Necesito control de versiones si trabajo solo?

Sí. El historial de cambios y la posibilidad de volver a una versión anterior no dependen de tener compañeros de equipo. Trabajando solo lo usarás para no perder trabajo, para probar ideas en ramas aparte sin miedo a romper lo que ya funciona, y para recordar por qué tomaste una decisión hace meses.

¿El control de versiones es lo mismo que hacer copias de seguridad?

No exactamente. Una copia de seguridad protege tus archivos frente a un fallo del disco o un borrado accidental. El control de versiones registra la evolución de tu proyecto con el motivo de cada cambio y te deja reconstruir cualquier estado pasado. Muchos equipos usan las dos cosas a la vez, porque cubren necesidades diferentes.

¿Git es lo mismo que GitHub?

No. Git es la herramienta de control de versiones que corre en tu ordenador y gestiona el historial. GitHub es un servicio en la nube que aloja repositorios Git y añade herramientas para trabajar en equipo. Puedes usar Git sin GitHub perfectamente.

¿Qué diferencia hay entre control de versiones centralizado y distribuido?

En el centralizado el historial completo vive en un único servidor y necesitas conexión para casi todo. En el distribuido cada persona tiene una copia completa del historial en su ordenador, así que puedes trabajar sin conexión y no dependes de que un servidor central esté disponible. Git es distribuido; Subversion es centralizado.

¿Tengo que aprender la terminal para usar Git?

Ayuda mucho, pero no es imprescindible desde el primer día. Existen interfaces gráficas y la integración de Git dentro de editores como VS Code, que cubren las operaciones más habituales con botones. Aun así, entender qué hace cada comando por debajo te dará mucha más soltura, así que vale la pena perderle el miedo a la terminal poco a poco.