Llevamos ya varios días que hemos migrado algunos repositorios de CVS a Subversion y se nota una gran diferencia, sobre todo en los update. Tras usarlo varios días y si nos paramos a pensar un poco, es bastante lógico.
CVS mantiene un número de versión para cada uno de los ficheros en el repositorio y cada fichero es independiente totalmente de los demás. De hecho, puedes entrar directamente en el repositorio, borrar uno de los ficheros con su historia y el repositorio sigue funcionando perfectamente, se olvida por completo que ese fichero ha existido alguna vez.
Subversion no tiene número de versión para cada fichero, sino que tiene un único número de versión para todo el repositorio. Si se toca un solo fichero, el número de versión de todo el repositorio se incrementa en uno.
Esta diferencia, que en cuestión de gustos puede ser mejor una u otra, tiene una importancia importante en la eficacia de los update. Si estoy en CVS y hago un update de todo el proyecto, CVS no tiene más remedio que revisar todos los ficheros uno a uno para ver si en el repositorio hay una versión más moderna de ese fichero y actualizarla. Eso, en un proyecto grande, con varios miles de ficheros, puede tardar un rato.
Sin embargo, con subersion, mi copia local tiene un número de versión que es de la última vez que hice update. Si ahora hago un nuevo update, subversion sólo tiene que comparar la versión de mi copia local y la del repositorio (sólo compara un entero). Si coincide, es que el update no tiene que hacer nada. Si no coincide, el repositorio tiene guardado qué ficheros se tocaron para esa nueva versión (y las anteriores si hay varias versiones de diferencia), así que sólo hay que hacer update de esos ficheros. No es necesario recorrerlos todos uno a uno.
En resumen, un update de un proyecto grande que antes tardaba tres o cuatro minutos, ahora se hace en unos segundos.
Por ello, si tu proyecto va a ser grande, con varios miles de ficheros, CVS no es una buena opción, ya que perderás mucho tiempo haciendo los updates diarios de los fuentes (y si el proyecto es grande, serán muchos días). Es mucho mejor Subversion (o cualquier otro sistema de control de versiones que lleve todo el repositorio con un único número de versión), ya que el update diario es cuestión de segundos.
De la misma forma, crear tags o ramas es muy lento en CVS, porque debe recorrer todos los ficheros y marcar el tag o rama en cada uno de ellos. Mientras que subversion le basta con marcar que la revisión 1234 es un tag o rama. (En subversion no hay tags o ramas, como en CVS, sino que son copias, pero son copias "perezosas", es decir, no se hace realmente la copia hasta que el fichero cambia en la copia).
Por cierto, teníamos varios repositorios de CVSNT y aunque la herramienta de migración cvs2svn comenta que puede haber problemas en la migración a Subversion de CVSNT, no hemos encontrado ninguno (salvo temas de acentos y eñes dentro de los ficheros, en el nombre de los mismos o en el comentario de los commit).