Un sistema de control de versiones registra los cambios realizados sobre un conjunto de archivos a lo largo del tiempo, de manera que es posible recuperar versiones específicas.
Un SCV facilita el trabajo cooperativo. Ej: git, cvs, subversion.
Un SCV puede ser:
- Local: almacena las versiones en una base de datos. No existe una manera eficiente de compartir código con otros desarrolladores.
- Centralizado: se almacenan las versiones en un servidor al cual los usuarios se sincronizan para subir y bajar cambios.
- Distribuido: cada desarrollador tiene una copia local del proyecto para trabajar de manera aislada, con un mecanismo de resolución de conflictos que permite integrar los cambios.
Ejemplos de SCVs distribuidos:
- CVS: arquitectura cliente-servidor con un servidor central. Hacemos copias locales y luego las subimos (solo si están en la última versión). Licencia GNU.
- SVN: subversion surgió en el 2000 para solucionar problemas de CVS. Tiene commits atómicos, manejo de archivos binarios, y solo envía los cambios (no el archivo completo). Estructura:
TRUNKtiene la versión principal, mientras que lasTAGSalmacenan versiones de release. - GIT: surge en 2005 como alternativa open-source de bitkeeper. Es rápido, sencillo, eficiente, y distribuido. Introdujo el área de staging.