Deux modèles différents de distribution des données sont répandus. Dans le premier modèle, tous les ordinateurs (appelés clients) synchronisent leurs données avec un serveur central. Le serveur doit être accessible à tous les clients au moins de temps en temps. Ce modèle est utilisé par subversion, CVS et WebDAV.
Dans l'autre modèle, tous les ordinateurs connectés par le réseau peuvent synchroniser mutellement leurs données en tant que pairs. Cette méthode est utilisée par unison. rsync fonctionne en réalité en mode client, mais on peut utiliser chaque client en tant que serveur.
Subversion, CVS et unison sont également disponibles sur de nombreux autres systèmes d'exploitation comme les autres Unix et sous Windows.
Dans le cas de subversion, de CVS, de WebDAV et de unison, la synchronisation de données est lancée manuellement par l'utilisateur. Ce comportement permet de contrôler plus précisément les données à synchroniser et de gérer plus aisément les conflits. En revanche, si la synchronisation est réalisée trop rarement, les risques de conflit sont augmentés.
Dans le cas de subversion ou de CVS, il est rare qu'un conflit survienne, même si plusieurs personnes collaborent pour un même gros projet logiciel. Ceci est dû au fait que les documents sont vérifiés ligne par ligne. En cas de conflit, cela ne concerne toujours qu'un seul client. Un conflit est en principe facile à résoudre avec subversion ou CVS.
Dans le cas d'unison, vous êtes informé des conflits et il est possible d'éviter la synchronisation du fichier. En revanche, les modifications ne sont pas aussi faciles à effectuer qu'avec subversion ou CVS.
Alors que dans subversion ou CVS il est également possible d'enregistrer partiellement des modifications en cas de conflit, WebDAV ne procède à la validation que si l'ensemble de la modification réussit.
rsync n'offre aucun moyen de traiter les conflits. L'utilisateur doit veiller lui-même à ne pas écraser des fichiers par erreur et à résoudre à la main tous les conflits susceptibles d'apparaître. Pour ne pas courir de risques, on peut utiliser aussi un système de contrôle de versions comme RCS.
Dans la configuration par défaut d'Unison, toute la structure arborescente du répertoire est synchronisée. Les nouveaux fichiers qui s'y présentent sont automatiquement concernés par la synchronisation.
Avec subversion ou
CVS, les nouveaux répertoires et fichiers doivent être ajoutés explicitement au
moyen de svn add et
cvs add respectivement.
Ceci permet un contrôle précis des fichiers à synchroniser. En revanche, de
nouveaux fichiers sont souvent négligés, surtout si, à cause du nombre important
de fichiers, les points d'interrogation affichés par
svn update et
svn status ou
cvs update sont ignorés.
Subversion et CVS offrent une fonctionnalité supplémentaire qui permet la reconstitution des anciennes versions de fichiers. Lors de chaque modification, il est possible d'ajouter une brève note de travail, permettant de suivre ensuite facilement le développement des fichiers grâce au contenu et aux annotations. Ceci constitue une aide très utile pour les projets de fin d'études et les textes de logiciels.
On a besoin sur tous les ordinateurs concernés de suffisamment d'espace libre sur le disque dur pour héberger toutes les données réparties. Dans le cas de subversion et de CVS, il faut en plus prévoir de l'espace sur le serveur pour la base de données du référentiel. L'historique des fichiers étant également enregistré sur le serveur, l'espace nécessaire est encore plus important. Pour les fichiers au format texte, la place occupée est relativement raisonnable car seules les lignes modifiées sont à nouveau enregistrées. En revanche, pour les fichiers binaires, l'encombrement augmente à chaque modification de la taille du fichier.
Unison offre une interface utilisateur graphique qui affiche les procédures de synchronisation qu'Unison veut réaliser. Vous pouvez accepter la proposition ou rejeter certains fichiers de la synchronisation. En mode texte, il est en outre possible de confirmer individuellement les procédures de façon interactive.
Les utilisateurs expérimentés exécutent normalement subversion ou CVS à la ligne de commande. Il existe cependant des interfaces graphiques pour Linux, telles que cervisia ainsi que pour d'autres systèmes d'exploitation, comme wincvs. Beaucoup d'outils de développement, tels que kdevelop, et d'éditeurs de texte, tels que emacs, offrent une prise en charge de CVS ou subversion. Ces interfaces frontales permettent bien souvent de résoudre plus facilement les conflits.
Unison et rsync sont assez faciles à utiliser et conviennent également aux débutants.
CVS et subversion sont un peu plus complexes. Pour ces derniers, il faut avoir comprendre
l'interaction entre le référentiel et les données locales. Les modifications des données
doivent tout d'abord être comparées localement avec le référentiel. Les commandes
cvs update et
svn update sont prévues à
cet effet. Les données doivent alors être renvoyées au référentiel avec les commandes
cvs commit ou
svn commit.
Une fois qu'on a compris cette procédure, même les débutants peuvent facilement utiliser
CVS ou subversion.
Dans le cas idéal, les données devraient être protégées contre l'interception et la manipulation. Unison, CVS, rsync et subversion s'utilisent facilement via ssh (secure shell) et sont ainsi sécurisés contre les attaques de ce genre. Il est préférable de ne exécuter CVS ou Unison via rsh (remote shell). De même, l'accès à CVS par le biais du mécanisme pserver est à déconseiller dans les réseaux non sécurisés. Grâce à l'utilisation d'Apache, subversion offre d'origine la sécurité nécessaire.
Beaucoup de développeurs utilisent CVS depuis longtemps pour gérer leurs projets logiciels ; il est particulièrement stable. En enregistrant l'historique du développement, CVS offre même une protection contre certaines erreurs de l'utilisateur, telles que l'effacement accidentel d'un fichier. Bien que subversion ne bénéficie pas encore d'une aussi grande diffusion que CVS, on l'emploie déjà en productiion, par exemple pour le projet subversion lui-même.
Unison est encore relativement récent mais offre une grande stabilité. Il est toutefois plus sensible aux erreurs de l'utilisateur. Lorsqu'on en a terminé avec la synchronisation de l'effacement d'un fichier, celui-ci est irrémédiablement perdu.
Tableau 47.1. Fonctionnalités des outils de synchronisation de fichiers : -- = très mauvais, - = mauvais ou non disponible, o = moyen, + = bon, ++ = excellent, x = disponible
|
unison |
CVS/subv. |
rsync |
mailsync | |
|---|---|---|---|---|
|
Client/Serveur |
égale |
C-S/C-S |
C-S |
égale |
|
Portabilité |
Lin,Un*x,Win |
Lin,Un*x,Win |
Lin,Un*x,Win |
Lin,Un*x |
|
Interactivité |
x |
x/x |
x |
- |
|
Vitesse |
- |
o/+ |
+ |
+ |
|
Conflits |
o |
++/++ |
o |
+ |
|
Sél. de fichiers |
Répertoire |
Sél./fichier, rép. |
Répertoire |
Boîte aux lettres |
|
Historique |
- |
x/x |
- |
- |
|
Espace disque dur |
o |
-- |
o |
+ |
|
Interf. util. |
+ |
o/o |
- |
- |
|
Complexité |
+ |
o/o |
+ |
o |
|
Attaques |
+(ssh) |
+/+(ssh) |
+(ssh) |
+(SSL) |
|
Perte de donn. |
+ |
++/++ |
+ |
+ |