Accueil > Partage de connaissances > Boîte à Outils > Comment synchroniser des répertoires de développement ?
 

Forum

EN REPONSE A L'ARTICLE :
Comment synchroniser des répertoires de développement ?
par Richard BONMARIN

De temps en temps, je trouve un sujet méritant de faire un peu de programmation et de m’apporter, au passage, la satisfaction de réaliser un truc sympa.

Ce sujet peut être personnel ou professionnel et, dans ce dernier cas, je me trouve parfois tenté de poursuivre mes travaux à la maison. Et c’est là que les choses se compliquent car les modifications faites à la maison doivent réintégrer l’environnement de développement du bureau... et réciproquement, puisque l’application en construction existe désormais sur deux machines distinctes.

Pendant très longtemps, je me suis contenté de zipper l’arborescence de mon application pour ouvrir l’archive en "flat view" (les fichiers sont présentés sans la hiérarchie des dossiers) et extraire les fichiers les uns après les autres vers les bons répertoires cibles. C’est très rustique et n’offre aucune protection contre les boulettes du genre "je copie malencontreusement le fichier index.php du répertoire A vers le répertoire B".

Il m’est également souvent arrivé de vouloir comparer les contenus de la source et de la cible d’un même fichier pour être certain de ne pas commettre d’erreur ; l’opération s’avérait fastidieuse puisqu’il fallait d’abord extraire le fichier archive dans un répertoire de transit, ouvrir les fichiers avec un éditeur comme UltraEdit pour, enfin, pouvoir lancer la fonction de comparaison...

Alors, comment faire pour ne pas s’emmêler au risque de perdre le travail de toute une soirée ? Personnellement, je n’ai pas trouvé la solution du premier coup...


Les échecs

ANT d’ECLIPSE

J’utilise ECLIPSE pour mes développements Web, aussi bien au bureau qu’à la maison.

Ma première idée fut d’utiliser ANT pour :

- actualiser, depuis l’environnement ECLIPSE du bureau, le contenu de la clé USB servant de support d’échange entre le bureau et le domicile
- actualiser l’environnement ECLIPSE du domicile à partir du contenu de la clé
- réaliser le processus inverse pour le flux "domicile -> bureau"

Malheureusement, le résultat n’a pas été à la hauteur de mes espérances car ANT finissait toujours par remplacer l’intégralité des répertoires, effaçant au passage les dates réelles de dernière modification des fichiers. J’ai donc laissé tomber cette solution peu satisfaisante et repris mes recherches.


Les solutions payantes

J’ai examiné - et essayé - trois logiciels payants : "Compare Advance", "FileSync" et "GoodSync" :

- "Compare Advance v1.1.16" n’est pas mal mais ne semble pas valoir les 30 US$ demandés pour une licence permanente. Il ne propose pas de version gratuite, ce qui m’empêche, par exemple, de revoir s’il permet la comparaison des contenus de fichiers...
- "FileSync v1.8" n’est pas mal non plus, d’autant qu’il est diffusé en version gratuite pour les non-professionnels, mais il a une curieuse façon d’exploiter les dates de modification et, surtout, il ne permet pas d’afficher une comparaison des contenus : c’est malheureusement rhédibitoire !
- "GoodSync v7.7.3.3" est très convivial, facile à prendre en main et présente les répertoires sous plusieurs formes : tout, les seuls changements, les erreurs, etc. Il faut installer un outil externe comme WinDiff pour comparer les contenus. Malheureusement, au delà des 30 premiers jours, sa version gratuite limite à 100 le nombre de fichiers synchronisables.


Microsoft SyncToy v2.0

J’ai ensuite trouvé l’utilitaire « SyncToy » de Microsoft, gratuit mais livré sans support.

La première impression fut bonne : l’outil est convivial, fonctionne bien avec les options par défaut, permet le filtrage des sous-répertoires ou des extensions, ainsi que le choix des fichiers à actualiser, etc.

Cependant, SyncToy ne permet pas la comparaison des contenus des fichiers avant actualisation, fonction essentielle de mon point de vue. Il faut passer par un éditeur externe comme UltraEdit pour lui faire ouvrir les deux fichiers (source et cible) avant de lancer la fonction de comparaison. Microsoft aurait pu se fendre d’un appel à un petit utilitaire de comparaison comme WinDiff, de la société... Microsoft.

Bref, j’ai rapidement repris mes recherches pour, finalement, réussir à trouver mon bonheur...


La solution : WinMerge

Enfin, je croise le chemin de WinMerge et je réalise que cet outil répond à pratiquement toutes mes attentes puisqu’il permet de :

- montrer les fichiers différents entre deux répertoires à synchroniser,
- avoir le contrôle des fichiers à actualiser et dans quel sens,
- comparer les contenus et en voir les différences (essentiel !),
- définir des couples de répertoires à synchroniser (nommés "projets"),
- dans la définition d’un projet : filtrer les extensions et protéger un répertoire en lecture seule.

A noter que les habitués d’ECLIPSE et CVS/SVN ne seront pas déroutés par la fenêtre de comparaison des contenus de WinMerge : on y trouve de grandes ressemblances.


Comment je mets en œuvre WinMerge associé à ECLIPSE

Mes workspaces ECLIPSE contiennent des répertoires et des fichiers que je ne souhaite pas voir passer d’une machine à l’autre, comme les fichiers de distribution ANT, les fichiers de configuration locale de l’application ou les fichiers CVS. J’ai donc recours à un fichier de filtrage dans lequel sont listés les répertoires et les types de fichiers à exclure.

La suite se fait en deux temps :

  1. Sur mon PC professionnel, je lance WinMerge pour actualiser la clé USB à partir du Workspace ECLIPSE, ouvert en lecture seule.
  2. Sur mon PC personnel, je lance WinMerge pour actualiser le Workspace ECLIPSE perso à partir de la clé USB vue en lecture seule.

Je fais quelques changements puis je décide de porter les changements sur la clé USB en suivant un processus analogue à celui du bureau :

  1. Je lance WinMerge pour actualiser la clé USB à partir du Workspace ECLIPSE perso (vu en lecture seule)
  2. Arrivé au bureau, je lance WinMerge pour actualiser le Workspace ECLIPSE professionnel à partir de la clé USB (vue en lecture seule).

Ainsi, la boucle est bouclée et je suis beaucoup plus serein qu’à l’époque où je me contentais d’un fichier zippé.


Un exemple de fichier de filtrage

À titre d’illustration, voici une copie de mon fichier de filtrage permettant de ne comparer que ce qui m’intéresse. À noter qu’il n’est pas possible - ou je n’ai pas trouvé comme faire - de définir un filtrage de fichiers spécifique à un répertoire particulier (exemple : « ne pas afficher les fichiers du type ’xyz’ dans le répertoire ’abc’ »)...

## This is a directory/file filter for WinMerge
name: CooCAAM (PHP)
desc: Suppresses CVS and other system directories in CooCAAM websites

## This is an inclusive (loose) filter
## (it lets through everything not specified)
def: include

## Filters for filenames begin with f:
## Filters for directories begin with d:
## (Inline comments begin with " ##" and extend to the end of the line)

d: \\.cache$                 ## Cache directory
d: \\cvs$                         ## CVS control directory
d: \\.svn$                         ## Subversion control directory
d: \\.settings$         ## ECLIPSE settings directory
d: \\_gsdata_$         ## GoodSync directory

d: \\ANT$                         ## ANT directory

f: \.log$                         ## Filter for LOG filename
f: \.bak$                         ## Filter for BAK filename (UltraEdit)
f: \.xml$                         ## Filter for XML filename (Dumpload files)
f: \.xml$                         ## Filter for XML filename (Dumpload files)
f: ^sess_                         ## Filter for PHP session filename
f: ^\.cvsignore$         ## Filter for CVS parm file
f: ^\.project$         ## Filter for ECLIPSE project file
f: ^_conf.*\.php$ ## Filter for Config file

Pour aller plus loin dans la synchronisation...

Si votre besoin va au-delà d’une "simple" synchronisation de fichiers placée sous contrôle comme c’est le cas avec WinMerge, et que vous recherchez plutôt un outil capable d’assurer automatiquement - et en tâche de fond - la synchronisation d’un ou plusieurs répertoires, vous trouverez probablement votre bonheur avec un outil comme FreeFileSync ou DirSync Pro. Ces logiciels font l’objet d’un article spécifique que je vous invite à consulter...