El software de control de versiones, también conocido como sistemas de control de revisiones o control de fuentes, se utiliza para rastrear cambios en proyectos de desarrollo de software y permitir que los miembros del equipo cambien y colaboren en los mismos archivos. El software de control de versiones permite a los desarrolladores trabajar simultáneamente en el código y aislar su propio trabajo a través de lo que se conoce como ramas. Las ramas mantienen los cambios de código protegidos de los cambios en otras ramas, pero pueden fusionarse cuando el desarrollador esté listo. Los sistemas de control de versiones permiten a los desarrolladores rastrear automáticamente su trabajo, ver un historial de todos los cambios y revertir a versiones anteriores de un proyecto cuando sea necesario. Todos los cambios de código y ramas se mantienen en un repositorio (a menudo referido como el "repo").
Los sistemas de control de versiones son utilizados por equipos de desarrollo de software para agilizar el proceso de desarrollo, gestionar el código para múltiples proyectos y mantener un historial de cambios de código. Al elegir un software de control de versiones, los usuarios a menudo necesitan una solución de alojamiento de control de versiones para alojar su repositorio maestro donde los desarrolladores comprometen sus cambios de código. Los desarrolladores a menudo utilizan clientes de control de versiones para gestionar la funcionalidad de sus sistemas de control de versiones a través de una interfaz gráfica de usuario (GUI). Los sistemas de control de versiones se integran con una variedad de herramientas de desarrollo de software, incluyendo IDE, software de automatización de compilación y proveedores de PaaS.
Para calificar para la inclusión en la categoría de Software de Control de Versiones, un producto debe:
Proporcionar un mecanismo para que los desarrolladores mantengan un seguimiento de los cambios de código
Permitir a los desarrolladores ver un historial de cambios
Permitir a los desarrolladores trabajar en los mismos archivos de código al mismo tiempo
Permitir a los desarrolladores aislar su código a través de ramas
Fusionar código de diferentes ramas bajo demanda
Mostrar a los desarrolladores conflictos en las fusiones de código y permitirles resolverlos
Permitir a los desarrolladores revertir sus cambios a un estado anterior