Software de Control de Versiones
Encuentra información útil sobre el software de control de versiones: ventajas y desventajas de las herramientas más utilizadas.
¿Qué es el software de control de versiones?
El software de control de versiones (VCS) es una herramienta que registra los cambios realizados en un conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar cualquier versión anterior, ver quién modificó qué y combinar el trabajo de muchas personas sin sobrescribirse mutuamente. Es la columna vertebral de cualquier flujo de trabajo colaborativo en desarrollo de software y resulta imprescindible en el momento en que más de una persona toca una base de código.
Esta página explica las dos familias de software de control de versiones, repasa las herramientas más conocidas con sus ventajas e inconvenientes, y te ayuda a decidir cuál se adapta mejor a tu proyecto. Si primero quieres entender el concepto subyacente, lee Sistema de Control de Versiones; para ver por qué Git en particular se impuso, consulta Qué es Git.
Centralizado vs. distribuido
Casi todo VCS cae en una de dos arquitecturas, y la diferencia lo condiciona todo lo demás.
- Centralizado (CVCS): un único servidor alberga el historial canónico. Los clientes obtienen una copia de trabajo y confirman los cambios directamente en ese servidor. Ejemplos: CVS, SVN. La ventaja es que hay una fuente de verdad clara y un control de acceso sencillo; la desventaja es que se necesita acceso a la red para confirmar cambios y el servidor es un punto único de fallo.
- Distribuido (DVCS): cada clon es una copia completa del repositorio entero, incluido todo el historial. Confirmas cambios, creas ramas y consultas el historial localmente y sin conexión, y luego sincronizas con otros cuando estés listo. Ejemplos: Git, Mercurial, Monotone. Esto hace que la mayoría de las operaciones sean instantáneas y elimina el punto único de fallo, a costa de un modelo mental ligeramente más complejo.
El diseño distribuido de Git es la principal razón por la que crear ramas y confirmar cambios se siente instantáneo: no hay ningún viaje de ida y vuelta a un servidor. Cada clon que realizas con git clone ya contiene el historial completo del proyecto.
Herramientas más utilizadas
Git
Git es el sistema de control de versiones distribuido estándar de facto en la actualidad. Es rápido, eficiente y maneja proyectos de cualquier tamaño. Sus fortalezas distintivas son la creación barata de ramas locales (consulta git branch), un área de preparación muy conveniente (consulta git add) y compatibilidad con muchos flujos de trabajo. Es software libre y de código abierto.

Limitaciones. El soporte para archivos binarios de gran tamaño es débil por defecto, aunque Git LFS resuelve este problema. Las operaciones pueden ralentizarse en repositorios muy grandes con historiales extensos, y la amplitud de comandos puede resultar abrumadora para los principiantes.
CVS
CVS (Concurrent Versions System) es un sistema centralizado que fue muy popular históricamente, pero que ahora está prácticamente obsoleto, superado por las herramientas distribuidas modernas. Registra el historial de archivos y documentos, y funciona en casi todas las plataformas de hardware y sistemas operativos. Es software libre y de código abierto.

Limitaciones. CVS no verifica la integridad del repositorio y carece de confirmaciones atómicas, seguimiento de fusiones y revisiones firmadas; deficiencias que motivaron directamente el desarrollo de sus sucesores.
SVN
SVN (Apache Subversion) es un sistema de control de versiones centralizado ampliamente utilizado durante los años 2000 y que aún se encuentra en algunos entornos empresariales y heredados. Sus características incluyen directorios versionados, confirmaciones atómicas, seguimiento de fusiones, operaciones de primer nivel para copiar/mover/renombrar/eliminar, un modelo cliente-servidor, metadatos versionados de forma libre, soporte completo de MIME y bloqueo de archivos. Es software libre y de código abierto.

Limitaciones. Los tiempos de modificación de archivos no se almacenan, la normalización de nombres de archivo puede ser problemática entre plataformas, y no hay soporte para revisiones firmadas.
Mercurial
Mercurial es un sistema de control de versiones distribuido escrito principalmente en Python. Es rápido, admite proyectos de cualquier tamaño y tiene una interfaz famosamente predecible y fácil de aprender. Funciona en sistemas Unix, Windows y macOS, maneja bien los archivos binarios y tiene un sólido soporte para fusión y creación de ramas. Es software libre y de código abierto.

Limitaciones. Python es necesario para todos los complementos, no se admiten descargas parciales y no siempre funciona bien con extensiones de terceros.
Monotone
Monotone es un sistema de control de versiones distribuido escrito en C++. Es un VCS de archivo único y transaccional que ofrece operación completamente desconectada, fusión sensible al historial, ramas ligeras, bajo mantenimiento y sincronización entre pares. Funciona en Linux, Solaris, macOS, Windows y otros sistemas Unix. Es software libre y de código abierto.

Limitaciones. Sin soporte HTTP, los usuarios no pueden realizar descargas ni confirmar cambios desde detrás de un proxy, y algunas operaciones, sobre todo la descarga inicial, presentan problemas de rendimiento. Monotone está prácticamente abandonado hoy en día y tiene una relevancia moderna limitada.
Comparación rápida
| Herramienta | Arquitectura | Estado | Fortaleza destacada | Debilidad principal |
|---|---|---|---|---|
| Git | Distribuido | Estándar de la industria | Velocidad, ramas, ecosistema | Archivos binarios grandes, curva de aprendizaje |
| Mercurial | Distribuido | Mantenido, nicho | Interfaz predecible y sencilla | Ecosistema más pequeño |
| SVN | Centralizado | Heredado / empresarial | Bloqueo de archivos, modelo simple | Necesita servidor para confirmar cambios |
| CVS | Centralizado | Obsoleto | Importancia histórica | Sin confirmaciones atómicas ni verificación de integridad |
| Monotone | Distribuido | Prácticamente abandonado | Modelo de integridad sólido | Sin HTTP, descarga inicial lenta |
¿Cuál deberías elegir?
Para casi cualquier proyecto nuevo, la respuesta es Git: tiene la comunidad más grande, el mejor soporte de alojamiento (GitHub, GitLab, Bitbucket) y las herramientas más completas. Recurre a una alternativa solo cuando una restricción concreta te empuje hacia ella:
- Mercurial — si tu equipo prefiere un conjunto de comandos más reducido y consistente y no estás vinculado al ecosistema de Git.
- SVN — si necesitas bloqueo estricto de archivos para activos binarios que no se pueden fusionar, o si mantienes un flujo de trabajo centralizado existente.
- CVS / Monotone — generalmente solo cuando se mantiene un repositorio heredado existente; evítalos para trabajo nuevo.
Una vez que te hayas decidido por Git, el siguiente paso es instalarlo y aprender cómo funciona en la práctica la gestión del código fuente.