Los programas para control de versiones son un grupo de aplicaciones originalmente ideadas para gestionar ágilmente los cambios en el código fuente de los programas y poder revertirlos, cuyo ámbito ha sido ampliado pasando del concepto control de versiones al de gestión de configuración de software, en el que se engloban todas las actividades que pueden realizarse por un equipo sobre un gran proyecto software u otra actividad que genere ficheros digitales (por ejemplo: documentos, ofertas, dibujos, esquemas, etcétera).
Orígenes: funcionamiento local
En sus orígenes y antes de la aparición de las redes, todos los desarrolladores usaban la misma computadora. La gestión de versiones estaba orientada a ficheros individuales, que generalmente eran absorbidos o reemplazados por otros ficheros.
- Revision Control System (RCS): almacena la última versión y las diferencias con la anterior, lo que permiten acceder rápidamente a la versión original. Se aplicó en origen al manejo de un solo fichero, p. e. de configuración, aunque ahora es utilizado por aplicaciones más complejas para cada fichero individual.
- Source Code Control System (SCCS): formó parte de Unix; está basado en diferencias entrelazadas, que permiten construir versiones como un conjunto de subrevisiones.
Modelo cliente-servidor
Con el advenimiento de las redes, los desarrolladores usan un repositorio central al que acceden mediante un cliente en su máquina. Con el vuelco causado por las redes públicas (Usenet, UUCP, Internet, etcétera) distinguimos entre programas abiertos (código fuente disponible) y propietarios (comerciales).
Código abierto
- Concurrent Versions System (CVS): basado originalmente en RCS, licenciado mediante GPL.
- CVSNT: basado en CVS.
- OpenCVS: clon CVS bajo licencia BSD, con énfasis en seguridad y correcto uso del código fuente.
- Subversion (svn): inspirado en CVS.
- Vesta: sistema de construcción con soporte para versionado de ficheros en repositorios distribuidos.
Código privativo
- AccuRev: herramienta para gestión de la configuración de código fuente que integra un gestor de incidencias basado en flujos que maneja de forma eficiente desarrollo paralelo a escala global; también contempla un servidor para replicación.
- CA SCM: herramienta para gestión de cambios y configuración de Computer Associates.
- Autodesk Vault: herramienta de control de versiones diseñada específicamente para aplicaciones Autodesk que gestionan las relaciones complejas entre ficheros de diseño elaborados por AutoCAD y Autodesk Inventor.
- ClearCase: sistema de gestión de configuración -compatible con VSS- fabricado por Rational Software (IBM).
- codeBeamer: plataforma colaborativa para la gestión del ciclo de vida de aplicaciones.
- Configuration Management Version Control (CMVC): sistema de control de versiones de IBM, retirado.
- Global Design Platform (GDP): gestión de diseño de circuitos integrados.
- MKS Integrity: sistema para gestión del ciclo de vida de aplicaciones software.
- Perforce: herramienta con intuitivo interfaz gráfico, configuración avanzada para funcionamiento en arquitecturas de red complejas -proxy, máster-réplica, broker- y "funcionamiento off-line", así como interfaz con los IDE más extendidos y aplicable a documentos no ASCII.
- PVCS: originalmente llamado Polytron Version Control System, fue desarrollado por Don Kinzer para Polytron y lanzado en 1985, ahora pertenece a Serena.
- Quma Version Control System (QVCS): solución para Windows de muy bajo coste.
- SourceAnywhere: herramienta de control de versiones por Dynamsoft.
- StarTeam: coordina y gestiona los procesos de distribución de software de Microfocus -anteriormente Borland- un control centralizado de activos digitales.
- Telelogic Synergy: gestor de cambios integrado compatible con SCC y gestor de configuración basado en tareas, de IBM.
- Vault: herramienta de control de versiones de SourceGear (primer uso gratis).
- Visual SourceSafe: herramienta de control de versiones de Microsoft; orientada a equipos pequeños. Este control de código está caducado y no se recomienda su uso.
- Visual Studio Team Foundation Server (anteriormente Team System).
Modelo distribuido
En el modelo distribuido, cada desarrollador trabaja directamente con su repositorio local, y los cambios se comparten entre repositorios en un paso posterior.
Código abierto
- Aegis: escrito por Peter Miller, es un programa maduro, orientado a sistemas de ficheros, con soporte de red limitado.
- ArX: escrito por Walter Landry, empezó como una rama de GNU arch, pero ha sido totalmente reescrito.
- Bazaar: escrito en Python por Martin Pool y patrocinado por Canonical es un sistema descentralizado, que intenta ser rápido y fácil de usar.
- Codeville: escrito en Python por Ross Cohen; usa un algoritmo de injerto innovador.
- Darcs: escrito en Haskell y desarrollado originalmente por David Roundy, puede llevar el seguimiento de dependencias inter-parche y reagruparlas automáticamente y escogerlas usando "teoría de parches".
- DCVS: CVS descentralizado.
- Fossil: escrito por Richard Hipp para SQLite, presenta un control de versiones distribuido, wiki y seguimiento de fallos.
- Git: escrito en una combinación de Perl, C y varios scripts de shell, estuvo diseñado por Linus Torvalds según las necesidades del proyecto del núcleo Linux; con los requisitos de descentralización, rápido, flexible y robusto.
- GNU arch: descontinuado, sustituido por Bazaar.
- LibreSource: gestión de configuración.
- Mercurial: escrito en Python como un recambio en software libre de Bitkeeper; descentralizado, que pretende ser rápido, ligero, portable y fácil de usar.
- Monotone: descentralizado y funcionando en modo peer-to-peer (P2P).
- SVK: escrito en Perl por Kao Chia-liang sobre la base de subversión permitiendo hacer commit distribuidos.
Código privativo
- BitKeeper: usado en el desarrollo del Núcleo de Linux (2002–abril de 2005).
- Code Co-op: sistema de control de versiones P2P (puede sincronizar mediante correo electrónico).
- Sun WorkShop TeamWare: retirado, reemplazado por BitKeeper.
- Plastic SCM: por Codice Software, Inc.
Véase también
Referencias
Enlaces externos