SVN PLR CVS

SVN PLR CVS

Jueves 16 Mar 2006

Hace poco hicimos una introducción a los sistemas de control de versiones. Hace un poco más les conté acerca de mi visita a FOSDEM, donde entre otras cosas, vi una presentación sobre Subversion (SVN) que me convenció de abandonar CVS. De acuerdo a los comentarios dejados por nuestras ilustres visitas, parece que ya existe cierto concenso con respecto a esto, así es que ahora hablaremos de las mejoras introducidas por SVN.

Primero que todo, hay que dejar en claro que SVN fue diseñado pensando en reemplazar CVS, por lo tanto, tiene la misma arquitectura basada en un repositorio central (más adelante hablaremos de repositorios descentralizados). Los comandos también son muy parecidos, reduciendo así el tiempo de aprendizaje. La idea es que se pueda migrar de CVS a SVN con un costo muy bajo. Las mejores más importantes son las siguientes:

  • Los commits son atómicos y más eficientes. Si el commit sufre una interrupción, no corrompe el repositorio. Para ingresar un cambio en un archivo, CVS tiene que transferir todo el archivo entre la copia local y el repositorio. Luego, con ambos archivos a la mano establece la diferencia. SVN calcula antes la diferencia y sólo transfiere los bytes involucrados en el cambio, haciendo el commit mucho más eficiente en cuanto a tiempo y tráfico.
  • CVS estudia diferencias entre archivos basándose en líneas. SVN en cambio lo hace comparando bytes, lo que permite parches de menor tamaño. Además, permite un mejor manejo de documentos de texto que contienen párrafos, a diferencia de los archivos con código.
  • Para renombrar un archivo en CVS, simplemente no puedes. Tienes que borrarlo, y agregar la copia como un archivo nuevo con otro nombre. Lo peor es que el nuevo archivo no hereda el historial, por lo tanto, lo pierdes. SVN permite renombrar archivos e incluso cambiarlos de directorio manteniendo todo el historial.
  • El soporte de archivos binarios es nativo y funciona muy bien. En la presentación se mencionó que los desarrolladores de Quake no tuvieron ningún problema actualizando su gigantesca carga de imágenes en el repositorio.
  • SVN trabaja en base a revisiones que involucran todo el proyecto. CVS en cambio, funciona con historiales independientes por cada archivo, o sea, no es fácil identificar una correción de bug que involucra cambios en distintos archivos, porque cada uno tiene distintos números de revisión. Este cambio introducido por SVN permite al equipo de trabajo hablar por ejemplo sobre "la revisión 742", y hace mucho más fácil las mezclas entre distintas ramas de desarrollo. Para mí, este es un cambio fundamental.

Por supuesto, la comparación es un poco injusta porque SVN se hizo después que CVS, cuando ya se descubrieron sus falencias. Pero es bueno que se pueda ir mejorando en vez de quedarnos estancados. Para motivar aún más el cambio, existe la herramienta cvs2svn , que permite mantener todo el historial del proyecto y migrar a SVN. Entonces, a parte de barreras administrativas, yo no veo ninguna razón para seguir usando CVS en vez SVN.

Para concluir, les cuento que tkcvs, una excelente interfaz gráfica para CVS, ahora también soporta SVN - a partir de la versión 8.0 - pero han cambiado de logo. Lo interesante del logo es que evidencia las diferencia entre ambos sistemas.