Existen dos modelos diferentes para la distribución de datos. Por un lado es posible utilizar un servidor central con el que el resto de ordenadores (“clientes”) comparen sus archivos. Para ello todos los clientes han de poder acceder al servidor, por lo menos de vez en cuando, a través de una red. Este modelo es el utilizado por Subversion, CVS y WebDAV. La alternativa consiste en que todos los ordenadores tengan los mismos derechos y comparen sus datos entre sí. Este es el planteamiento empleado por Unison. En realidad rsync trabaja en modo cliente servidor, pero cada cliente puede utilizarse a su vez como servidor.
Subversion, CVS y Unison están disponibles para muchos otros sistemas operativos, como es el caso de otros Unix y Windows.
La sincronización de datos en Subversion, CVS, WebDAV y Unison es iniciada por el usuario. Esto permite un mayor control sobre los archivos que se van a sincronizar y una resolución más fácil de posibles conflictos. Por otra parte, puede suceder que la sincronización se lleve a cabo con demasiada poca frecuencia, lo que aumenta el riesgo de conflictos.
En Subversion o CVS aparecen conflictos rara vez, incluso aunque varias personas trabajen en un gran proyecto de programa. Los distintos documentos se fusionan línea a línea y, en caso de que ocurra un conflicto, sólo afectará a un cliente. Por lo general, los conflictos en Subversion o CVS se resuelven fácilmente.
Los conflictos en Unison se notifican al usuario y el archivo se puede entonces excluir de la sincronización. Por otra parte, los cambios no se fusionan tan fácilmente como en Subversion o CVS.
Subversion o CVS aceptan parcialmente los cambios también en caso de un conflicto. En cambio WebDAV sólo registra los cambios si no existe ningún conflicto en toda la modificación.
rsync no maneja ni resuelve conflictos. El usuario es quien tiene que preocuparse de no sobreescribir por equivocación archivos y de resolver manualmente todos los conflictos que se presenten. Para controlarlo puede utilizar adicionalmente un sistema de control de versiones como RCS.
En su configuración predeterminada, Unison sincroniza un árbol completo de directorios. Los nuevos archivos presentes en el árbol se incorporan automáticamente a la sincronización.
En el caso de Subversion o
CVS es necesario añadir explícitamente nuevos
directorios y archivos por medio de
svn add y
cvsadd respectivamente. La consecuencia
es un mayor control sobre los archivos que van a formar parte de la
sincronización. Por otra parte, los nuevos archivos tienden a olvidarse;
sobre todo si debido al número de archivos se ignora el signo '?' que
aparece en la salida de
svn update,
svn status y
cvs update respectivamente.
Como función adicional, Subversion o CVS permiten reconstruir las versiones anteriores de los archivos. Cada vez que se realiza un cambio es posible añadir una pequeña nota y posteriormente reproducir el desarrollo del archivo basándose en el contenido y en los comentarios. Esto resulta de gran utilidad en el caso de tesis o textos de programas.
En cada uno de los ordenadores participantes se necesita espacio suficiente en el disco duro para todos los datos distribuidos. En el caso de Subversion o CVS se necesita además espacio adicional para la base de datos (repository) en el servidor. Allí también se guarda la historia de los archivos, por lo que los requisitos de espacio son mucho mayores que el espacio necesario en sí. En el caso de archivos en formato texto, los requisitos de espacio se mantiene dentro de límites razonables, ya que sólo hay que volver a guardar las líneas que han sido modificadas. Pero en el caso de archivos binarios, el espacio requerido aumenta en el orden del tamaño del archivo con cada cambio que se produce.
Unison está equipado con una interfaz gráfica que muestra la sincronización sugerida por Unison. Se puede aceptar esta propuesta o bien excluir archivos sueltos del proceso de sincronización. Además es posible confirmar cada uno de los procesos de forma interactiva en modo texto.
Los usuarios más experimentados suelen utilizar Subversion o CVS desde la línea de comandos. No obstante, también existen interfaces gráficas para Linux (cervisia, ...) y Windows (wincvs). Numerosas herramientas de desarrollo (ej. kdevelop) y editores de texto (ej. emacs) tienen soporte para CVS o Subversion. A menudo, el uso de estos frontales simplifica en gran medida la resolución de conflictos.
Unison y rsync son
muy fáciles de usar y resultan adecuados también para usuarios
principiantes. El manejo de Subversion y
CVS es algo más complejo. Para utilizarlo es
necesario haber comprendido la interacción entre el repositorio y los datos
locales. Siempre hay que fusionar primero los cambios en los datos locales
con el repositorio. Para ello se utiliza el comando
cvs update o
svn update. Una vez hecho esto,
los datos deben volver a enviarse al repositorio con
cvs commit o
svn commit. Siempre que se
respeten estos procesos, el uso de CVS o
Subversion es muy sencillo incluso para
principiantes.
En un escenario ideal, la seguridad de la transferencia de datos debería estar garantizada en caso de accesos no autorizados o incluso de la modificación de los datos. Tanto Unison como CVS, rsync o Subversion pueden utilizarse a través de ssh (secure shell) y están por lo tanto bien protegidos frente a posibles agresiones como las mencionadas arriba. Se recomienda no utilizar CVS o Unison a través de rsh (remote shell) y evitar también el acceso a través del mecanismo CVS “pserver” en redes poco protegidas. Subversion ofrece automáticamente los mecanismos de seguridad necesarios porque utiliza Apache.
Numerosos desarrolladores utilizan desde hace mucho tiempo el excepcionalmente estable CVS para administrar sus proyectos de programación. Además, el almacenamiento de la historia de los cambios hace que en CVS se esté protegido incluso frente a fallos del usuario (como por ejemplo la eliminación accidental de un archivo). Aunque Subversion aún no se utiliza con tanta frecuencia como CVS, ya es usado en el área productiva (por ejemplo el mismo proyecto Subversion lo utiliza).
Unison es todavía relativamente nuevo, pero demuestra ya un alto grado de estabilidad. Es más sensible frente a fallos del usuario. Una vez confirmado un proceso de eliminación de un archivo durante la sincronización, no hay vuelta atrás. Lo mismo pasa con rsync.
Tabla 47.1. Prestaciones de las herramientas de sincronización de datos: -- = muy malo, - = malo o no disponible, o = regular, + = bueno, ++ = muy bueno, x = disponible
Unison | CVS/subv. | rsync | mailsync | |
|---|---|---|---|---|
Cliente/servidor | igualdad | C-S/C-S | C-S | igualdad |
Portabilidad | Lin,Un*x,Win | Lin,Un*x,Win | Lin,Un*x,Win | Lin,Un*x |
Interacción | x | x/x | x | - |
Velocidad | - | o/+ | + | + |
Conflictos | o | ++/++ | o | + |
selecc.fich. | directorio | selecc./fich., direct. | directorio | buzón |
Historia | - | x/x | - | - |
Esp. disco | o | -- | o | + |
GUI | + | o/o | - | - |
Dificultad | + | o/o | + | o |
Ataques | +(ssh) | +/+(ssh) | +(ssh) | +(SSL) |
Pérdida datos | + | ++/++ | + | + |