Conceptos básicos del control de versiones y como subversion los resuelve
Los Sistemas de Control de Versiones registran los cambios que se van haciendo en los archivos de un proyecto permitiendo consultar las diferencias, recuperar versiones anteriores y trabajar en distintas ramas de desarrollo simultaneamente.
Los elementos básicos de cualquier sistema de control de versiones son:
Sistema de ficheros que almacena todos los cambios producidos en los ficheros por los distintos usuarios que están trabajando en un proyecto.
Cada usuario, cuando comienza a trabajar en un proyecto realiza una copia de trabajo local de alguna de las versiones del código, normalmente la última, a partir del repositorio.
El principal problema que procura resolver un sistema de control de versiones es evitar que varias personas que estén trabajando simultaneamente en un mismo proyecto interfieran entre sí perdiéndose accidentalmente y sin posibilidad de recuperación los contenidos que van añadiendo a las distintas versiones de los ficheros:
Una posible solución a este problema es el modelo lock-modify-unlock, el cual no muy eficiente. Un problema importante con esta solución, además de las esperas que puede provocar, es que los distintos desarrolladores no tienen constancia de los cambios que ha hecho el desarrollador que se les adelanto subiendo los cambios, y ello puede provocar que se rompa el software completamente.
La solución de subversion (y otros muchos sistemas de control de versiones) es el modelo copy-modify-merge: Necesariamente los desarrolladores deben ver los cambios realizados por el desarrollador que se les adelantó y fusionar los cambios, bien automáticamente, bien manualmente si hubiera un conflicto.
La mejor manera de evitar conflictos es mediante una comunicación fluida entre los miembros del equipo. No obstante resolver conflictos es más rápido que esperar a que otro acabe de trabajar en un fichero.
Un repositorio central lleva la cuenta de todos los cambios que se van haciendo en el proyecto. Este repositorio, que es un sistema de ficheros, es accesible a través de distintos métodos; directamente o a través de la red, de manera que permite a muchos usuarios trabajar simultaneamente en sus proyectos. Mediante un cliente los usuarios se comunican con el repositorio para hacer las operaciones y comunicarse con el repositorio. Las operaciones básicas son hacer una copia de trabajo (checkout) y actualizar el repositorio con los cambios realizados (commit).
El repositorio, cada vez que se envia un nuevo cambio (commit), crea un nuevo estado del árbol del proyecto y que se denomina revisión y a la que asigna un número único que la identifica. Cada revisión es una fotografía del árbol de ficheros en el momento en que se hizo el cambio (commit). Es importante comprender que cada número de revisión se aplica al árbol entero, no solo a los ficheros que se han cambiado/añadido.
A través de urls:
http://svn.example.com/svn/project
file:///svn/project
svn://svn.example.com/svn/project
svn+ssh://svn.example.com/svn/project
Dependiendo del método de acceso que se esté usando.
Los archivos de la copia de trabajo pueden estar en 4 estados:
Atención: updates y commits son acciones separadas. Hasta que no se hace una actualización no se cambia la revisión de la copia local, incluso aunque se haya hecho un commit que genera una nueva revisión. Por eso la revisión de una copia local no cambia cuando se hace commit. Hay que hacer update después para que esta se actualice.