Per la sincronizzazione dei dati si sono diffusi due modelli. Nel primo caso vi è un server centrale in base al quale i client sincronizzano i loro file. I client dovranno potersi collegare via rete almeno temporaneamente al server. Questo modello è quello utilizzato da subversion, CVS ed WebDAV. L'alternativa è rappresentata da computer "equiparati" che sincronizzano i loro dati a vicenda. Questo è l'approccio che segue unison. rsync segue l'approccio client-server, comunque ogni client può fungere a sua volta da server.
Subversion, CVS, rsync e unison sono disponibili su tutta una serie di sistemi operativi tra cui UNIX e Windows.
Con subversion, CVS WebDAV, rsync e unison la sincronizzazione viene inizializzata manualmente dall'utente. Il vantaggio è che si ha maggior controllo sul processo di sincronizzazione ed è più facile risolvere dei conflitti. Dall'altra parte, se la sincronizzazione viene effettuata troppo di rado aumentano le probabilità che si verifica un conflitto.
In subversion o CVS i conflitti si verificano solo raramente anche se sono diverse persone a lavorare ad un grande progetto. I documenti vengono costruiti riga dopo riga. Quando si verifica un conflitto, spesso ciò riguarda solo un client. Generalmente, nel caso di subversion o CVS i conflitti sono semplici da risolvere. unison comunica il verificarsi di conflitti e si può escludere il file dal processo di sincronizzazione. Non è così semplice allineare le modifiche come nel caso di subversion o CVS.
Mentre con subversion o CVS quando si verifica un conflitto, le modifiche possono essere assunte anche parzialmente, nel caso di WebDAV un check-in può essere eseguito solo se il processo di modifica nel suo intero non ha prodotto dei conflitti.
rsync non presenta delle funzionalità per trattare ed eliminare eventuali conflitti. L'utente dovrà fare attenzione a non sovrascrivere per errore dei file e risolvere manualmente i conflitti che emergeranno. Per andare sul sicuro, si potrà ricorrere ad applicazioni di versionamento come RCS.
unison e rsync sincronizzano interi alberi di directory. I file che si aggiungono all'albero vengono coinvolti automaticamente nel processo di sincronizzazione.
In subversion o CVS bisogna aggiungere esplicitamente nuovi file e directory tramite il comando cvsadd. In tal modo si ha un maggior controllo sui file da sincronizzare. Dall'altra parte spesso si dimenticano i nuovi file, soprattutto se nell'output di svn update, svn status o cvs update si ignorano i '?' a causa del mole dei file.
Subversion o cvs permettono inoltre di ricostruire versioni precedenti di un file. Ad ogni modifica si ha la possibilità di aggiungere un breve commento per poter meglio seguire e rintracciare le varie modifiche apportate al file in passato. Questa funzionalità si rivela di particolare utilità nella stesura della tesi o dei sorgenti di un programma.
Su ogni computer interessato serve abbastanza spazio per i dati dislocati. Per subversion o cvs serve inoltre del spazio aggiuntivo per la banca dati (il cosiddetto repository) sul server. Visto che sul server viene memorizzato anche lo storico dei dati è necessario ulteriore spazio. Nel caso di file nel formato testo il fabbisogno non è eccessivo anche perché vengono memorizzate solo le righe modificate; mentre per file binari ad ogni modifica il fabbisogno cresce nella misura del volume del file.
unison dispone di una interfaccia grafica che indica cosa il programma intende sincronizzare. Si può accettare la proposta o escludere singoli file dalla sincronizzazione. Inoltre è possibile confermare in modo interattivo i singoli processi nel modo testo.
Gli utente più esperti impiegano CVS di solito servendosi della riga di comando. Comunque vi sono anche interfacce grafiche per Linux (cervisia…) ed anche per Windows (wincvs). Tanti tool di sviluppo (p.es. kdevelop) ed editor di testo (p.es. emacs) supportano CVS o subversion. Grazie a questi front-end risolvere dei conflitti diventa una faccenda davvero semplice.
unison e rsync sono semplici da utilizzare ed indicati anche per principianti. CVS o subversion sono già un po' più complessi nel loro utilizzo. Per un eventuale impiego si dovrebbe aver afferrato il modo di interagire tra il repository e i dati in locale. In locale si dovrebbe innazitutto avere comunque la versione aggiornata dei file, questo si ottiene con il comando cvs update o svn update. Dopo aver eseguito questo comando, con il comando cvs commit o svn commit i dati vanno rispediti nel repository. Se si segue sempre questa procedura CVS o subversion risultano essere semplici da utilizzare anche per principianti.
La sicurezza contro l'intercettazione o addirittura la manipolazione dei dati durante il loro trasferimento dovrebbe essere sempre data.
Sia per unison che CVS, rsync o subversion si può ricorrere ad ssh (Secure Shell) per mettersi al riparo dagli attacchi sovramenzionati. Evitate di utilizzare rsh (Remote Shell) con CVS o unison e anche gli accessi tramite il meccanismo pserver del CVS non sono consigliabili in rete non protette. subversion è per questi casi già più indicato visto che offre i necessari meccanismi di sicurezza tramite l'utilizzo di Apache.
CVS viene utilizzato da già tempo da tanti sviluppatori per amministrare i propri progetti ed è estremamente stabile. Grazie allo storico, con CVS si è anche al riparo di determinati errori causati da disattenzioni dell'utente (p.es. cancellare per errore un file). Anche se subversion non gode della diffusione di CVS, viene già utilizzato produttivamente (si veda l'esempio dello stesso progetto subversion).
unison è un prodotto relativamente recente ma è già molto stabile. L'utente dovrà fare molta attenzione per evitare degli errori: se ad esempio accetta di cancellare un file durante il processo di sincronizzazione, il file risulterà irrecuperabile. Ciò vale anche per rsync.
Table 24.1. Feature dei tool di sincronizzazione -- = molto scarso, - = scarso o non presente, o = mediocre, + = buono, ++ = molto buona, x = presente
unison | CVS/subv. | rsync | mailsync | |
|---|---|---|---|---|
Client/Server | uguale | C-S/C-S | C-S | uguale |
Portabil. | Lin,Un*x,Win | Lin,Un*x,Win | Lin,Un*x,Win | Lin,Un*x |
Interattivo | x | x/x | x | - |
Velocità | - | o/+ | + | + |
Conflitti | o | ++/++ | o | + |
Selez. file | Directory | Selez./file,direct. | Directory | Mail box |
Storico | - | x/x | - | - |
Spazio dis. | o | -- | o | + |
GUI | + | o/o | - | - |
Difficoltà | + | o/o | + | o |
Attacchi | +(ssh) | +/+(ssh) | +(ssh) | +(SSL) |
Perdita di dati | + | ++/++ | + | + |