Synchro avec CVS
Le scénario : au lieu d’utiliser un seul Mac, vous en utilisez régulièrement deux (un de bureau et un portable), et vous voudriez maintenir à jour des copies de vos données sur toutes vos machines. Après tout, quand vous travaillez à la maison, vous voulez tirer parti du large moniteur et des processeurs dual d’un PowerMac de bureau, et quand vous êtes sur la route, il vous faut toute la portabilité d’un iBook ou d’un PowerBook.
La plupart des solutions pour particuliers à ce problème sont aléatoires et sources d’erreurs. Il y a cependant un outil que les développeurs de logiciels utilisent et qui peut vous aider. Il s’appelle CVS. Et avec lui, vous pouvez travailler avec vos données où que vous soyez.
CVS, C’est Quoi?
CVS est un outil open source qui fournit un contrôle de version. Le contrôle de version correspond à la pratique de maintenance d’information sur le développement d’un projet en retraçant les changements et en coordonnant les efforts de développement de nombreux développeurs. CVS utilise un “repository” (recueil) centralisé (appelé quelques fois archive ou dépôt) pour conserver toutes les informations concernant le moindre fichier, ainsi que tout changement de ces fichiers, contenu dans un projet. Ces types de systèmes sont utilisés dans le développement de projets petits ou grands, y compris le développement de systèmes d’exploitation tels que Mac OS X.
Quand il utilise le contrôle de version, chaque développeur sans exception a une copie de ces fichiers sur sa propre machine. Comme un développeur effectue des changements, ils sont récupérés sur le dépôt central, ce qui permet aux autres développeurs du projet d’accéder au code le plus récent. Cela permet à beaucoup de gens de coopérer sur les mêmes fichiers sources avec un minimum d’histoires. Si deux développeurs font des changements sur le même fichier au même moment, CVS diffèrera l’enregistrement du second fichier jusqu’à ce que le second développeur résolve le conflit. Ces conflits sont facilement résolus et le développement reprend.
CVS supporte toutes sortes d’opérations supplémentaires qui sont utiles à des équipes importantes. Cependant, pour nos besoins (qui sont beaucoup moins exigeants que dans le cas du développement logiciel), nous pouvons nous contenter de le fonctionnalité que nous venons de décrire et l’utiliser pour résoudre le problème d’organisation de nos propres données sur de multiples machines. Même si vous êtes la seule personne à utiliser vos données, CVS peut vous aider à les maintenir facilement sur autant de machines que votre compte bancaire peut vous permettre d’en acheter.
CVS est livré dans les outils de développement de Mac OS X. Pour l’utiliser, vous devrez installer les outils de développement. Vous pouvez les trouver sur le CD-ROM des Outils de Développement livré avec votre copie de Mac OS X ou vous pouvez les télécharger sur la Apple Developer Connection. Bien sûr, vous pouvez toujours récupérer le source de CVS et le compiler vous-même, mais alors vous aurez besoin de GCC. Evitez-vous des problèmes et récupérez les outils de développement.
Utiliser CVS
Tout d’abord, il faut identifier la machine qui servira de dépôt. Si vous avez deux machines, par exemple un iBook et un PowerMac, vous devriez alors choisir celle qui reste à la maison et qui est la plus puissante, ici le PowerMac. Si vous êtes assez chanceux pour avoir une troisième machine que vous utilisez comme serveur dans d’autres buts, alors il serait préférable d’utiliser cette machine pour y mettre votre dépôt. Le point important est que la machine que vous utilisez comme serveur devrait être celle qui a le plus de chances de gagner en puissance en étant disponible quand vous en avez besoin.
Une fois que le dépôt est décidé, vous pouvez y accéder de la machine sur lequel il est ou bien d’autres machines. Le premier cas, quand le dépôt et la copie de travail des fichiers sont sur la même machine, est un exemple d’usage local. Le second cas, quand vous travaillez sur vos fichiers à partir de votre iBook, est appelé usage à distance. Dans les deux cas, vous utilisez le même ensemble de commandes CVS, mais le travail de configuration est un peu plus important dans le cas d’un usage à distance.
Créer le Dépôt
Une fois que vous avez décidé sur quelle machine placer le dépôt, il vous faut déterminer où sur cette machine vous voulez faire vivre ce dépôt. Vous devez vous assurer qu’il s’agit d’un endroit dont vous vous souviendrez facilement plus tard. Pour ma configuration, j’utilise le répertoire /Library/Depot . Une fois que vous avez décidé de cet emplacement, créez le répertoire, puis initialisez votre dépôt avec les commandes suivantes :
[Mercury ~] duncan% mkdir /Library/Depot [Mercury ~] duncan% cvs -d /Library/Depot init
L’argument -d fait savoir à CVS où le dépôt se trouve. L’argument init dit à CVS d’initialiser le répertoire comme dépôt CVS et installe une copie des fichiers qui contrôleront son fonctionnement.
La Première Sortie
Pour s’assurer que tout va bien, nous allons effectuer une sortie initiale du dépôt. Créez un répertoire vide (sur la même machine que le dépôt) et exécutez la commande suivante dans ce répertoire :
[Mercury ~/tmp] duncan% cvs -d /Library/Depot checkout .
Une fois encore, l’argument -d fait savoir à CVS dans quel répertoire le dépôt se trouve. L’argument checkout. (n’oubliez pas le point à la fin !) dit à CVS de sortir une copie de tout ce qui se trouve dans le dépôt. CVS devrait alors vous envoyer ce qui suit :
cvs checkout: Updating . cvs checkout: Updating CVSROOT U CVSROOT/checkoutlist U CVSROOT/commitinfo U CVSROOT/config U CVSROOT/cvswrappers U CVSROOT/editinfo U CVSROOT/loginfo U CVSROOT/modules U CVSROOT/notify U CVSROOT/rcsinfo U CVSROOT/taginfo U CVSROOT/verifymsg
Les fichiers sortis sont les fichiers d’administration. En éditant, puis en vérifiant ces fichiers, on peut changer le mode de fonctionement de CVS. Nous laisserons la plus grande part de ces fichiers tranquille, mais il y en a un que nous avons besoin de modifier.
Identifier Les Fichiers Binaires
En plus de plusieurs bizarreries, CVS a un défaut majeur. Par défaut, il gère tous les fichiers et fichiers de texte et ne peut, en lui-même, faire le différence entre texte et binaire. Il veut gérer tous les fichiers comme du texte parce qu’alors il peut sauver de l’espace dans le dépôt en stockant juste la différence entre fichiers. Pour des fichiers HTML, c’est parfait. Par contre, pour des fichiers binaires avec lesquels on travaille tout le temps, comme des fichiers Microsoft Word (.doc) ou Excel (.xls), cette stratégie tombe à plat et provoquera de gros problèmes.
Pour résoudre ceci, éditez le fichier de code CVSROOT/cvswrappers pour
le transformer en ce qui suit (les lignes qu’il vous faut ajouter sont en gras)
:
# This file affects handling of files based on their names. # # The -t/-f options allow one to treat directories of files # as a single file, or to transform a file in other ways on # its way in and out of CVS. # # The -m option specifies whether CVS attempts to merge files. # # The -k option specifies keyword expansion (e.g. -kb for binary). # # Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers) # # wildcard [option value][option value]... # # where option is one of # -f from cvs filter value: path to filter # -t to cvs filter value: path to filter # -m update methodology value: MERGE or COPY # -k expansion mode value: b, o, kkv, &c # # and value is a single-quote delimited value. # *.ai -k 'b' *.doc -k 'b' *.bmp -k 'b' *.class -k 'b' *.classes -k 'b' *.dmg -k 'b' *.eps -k 'b' *.gif -k 'b' *.gz -k 'b' *.icns -k 'b' *.jar -k 'b' *.jpg -k 'b' *.jpeg -k 'b' *.nib -k 'b' *.ofile -k 'b' *.pdf -k 'b' *.png -k 'b' *.ppm -k 'b' *.ppt -k 'b' *.pqg -k 'b' *.prj -k 'b' *.ps -k 'b' *.psd -k 'b' *.tar -k 'b' *.tif -k 'b' *.tiff -k 'b' *.ttf -k 'b' *.xls -k 'b' *.Z -k 'b' *.zip -k 'b'
Ce n’est pas une liste exhaustive, mais correspond à ce que j’utilise quotidiennement dans mon dépôt. Assurez-vous que tout fichier binaire que vous mettrez dans votre dépôt se trouve sur la liste. Notez que le fichier est sensible à la casse, aussi voudrez-vous peut-être les versions capitales.
Une fois que vous avez édité le fichier, nous devons l’inscrire en retour. Pour cela, tapez la commande suivante :
[Mercury ~/tmp] duncan% cvs commit -m "Sync"
Ceci dit à CVS de renvoyer nos changements dans le dépôt. L’argument -m est le message de renvoi qui sera conservé dans le dépôt. Quand vous exécuterez cette commande, vous devriez voir la sortie suivante :
cvs commit: Examining . cvs commit: Examining CVSROOT Checking in CVSROOT/cvswrappers; /Library/Depot/CVSROOT/cvswrappers,v <-- cvswrappers new revision: 1.2; previous revision: 1.1 done cvs commit: Rebuilding administrative file database
Cette sortie vous dira toutes les actions effectuées par CVS. Dans ce cas, il remarque que nous avons modifié un des fichiers de configuration et reconstruit sa base de données administrative.
Vous pourriez remarquer que nous n’avons pas utilisé l’argument -d pour CVS cette fois. Nous avons juste besoin de dire à CVS où le dépôt se trouve si nous ne l’avons pas encore retiré dans le répertoire où nous travaillons. Une fois retiré, CVS se garde assez d’informations pour tout retrouver.
Faire Des Sorties Sur Des Machines Distantes
Pour sortir un dépôt sur d’autres machines, nous allons utiliser la capacité de lancer CVS avec SSH. Cela requiert deux choses:
- Le serveur SSH est opérationnel et fonctionne sur la machine sur laquelle le dépôt se trouve.
- La variable d’environnement
CVS_RSHest définie sur la machine client sur laquelle nous allons sortir le dépôt.
Pour satisfaire à la première condition, vous n’avez qu’à autoriser l’option Connexion à distance sur le pannneau des Préférences de Partage, comme montré sur la figure 1.
|
Figure 1. Autoriser l’option de Connexion à distance. |
Ceci autorise le serveur SSH sur votre machine ce qui vous permettra de vous logger sur celle-ci à partir de toute autre machine qui a un client SSH.
Il existe quelques manières différentes qui vous permettront de satisfaire le deuxième condition. Vous pouvez initialiser la variable d’environnement en ligne de commande avec la commande setenv. Pour cela, exécutez simplement la ligne suivante:
[Titanium ~/tmp] duncan% setenv CVS_RSH ssh
Bien sûr cela va bientôt devenir ennuyeux, puisqu’il faudra toujours vous rappeler d’exécuter cette commande. Vous pourriez toujours l’initialiser dans votre fichier
~/.tcshrc , mais il y a une solution encore meilleure. Vous pouvez l’initialiser dans votre fichier ~/.MacOSX/environment.plist . Cela assurera qu’elle est initialisée pour toute application qui lance des programmes compatibles qui ont une intégration CVS incluse, comme Project Builder, pour qu’ils utilisent votre dépôt sans problè,mes. Tout ce que vous avez besoin de faire est de créer le répertoire
~/.MacOSX (s’il n’existe pas), et de sauver ce qui suit comme votre fichier environment.plist :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
<plist version="0.9">
<dict>
<key>CVS_RSH</key>
<string>/usr/bin/ssh</string>
</dict>
</plist>
C’est de loin la meilleure solution, bien que vous deviez redémarrer votre machine pour que cela soit effectif. Une fois ceci fait, vous êtes prêt à sortir le dépôt. Pour cela, nous allons utiliser une variante de la commande de sortie cvs que nous avons utilisée précédemment qui dira à CVS que notre dépôt se trouve sur une machine différente. Cette commande est de la forme :
cvs -d :ext:[utilisateur]@[machine]:[répertoire de dépôt] checkout
Sur ma machine, j’exécute la commande suivante :
[Titanium ~/tmp] duncan% cvs -d :ext:duncan@Mercury.local:/Library/Depot
checkout.
Une fois encore, n’oubliez pas le point à la fin! Si c’est la première fois que vous utilisez SSH entre vos machines, vous verrez une sortie qui vous demandera si vous êtes sûr de vouloir vous connecter. Vous devrez ensuite entrer votre mot de passe pour la machine contenant le dépôt. Après ç, les fichiers seront sortis comme avant.
Il y a un autre moyen d’accéder à un dépôt CVS (appelé accès pserver), mais il est plus difficile à configurer et moins sûr pour nos besoins. Si vous voulez vraiment configurer ce type d’accès, vous pouvez trouver des informations sur la manière de le faire dans la plupart des livres CVS.
L’Utilisation Au Quotidien
Maintenant que nous avons sorti le dépôt sur deux machines avec succès, nous sommes prêts à utiliser CVS pour nos fichiers. Le reste de cette section vous donnera les commandes de base dont vous avez besoin pour travailler avec vos fichiers.
Ajouter Des Fichiers
Supposons que nous voulons conserver des images dans le dépôt. Pour cela, nous pourrions créer un sous-répertoire Images dans notre copie sortie du dépôt, copier les images dedans, puis ajouter les fichiers à CVS.
Les commandes suivantes illustrent comment nous pourrions le faire :
[Mercury:~/tmp] duncan% mkdir Pictures [Mercury:~/tmp] duncan% cp ~/Pictures/me.jpg Pictures/me.jpg [Mercury:~/tmp] duncan% cvs add Pictures Directory /Library/Depot/Pictures added to the repository [Mercury:~/tmp] duncan% cvs add Pictures/me.jpg cvs add: scheduling file `Pictures/me.jpg' for addition cvs add: use 'cvs commit' to add this file permanently [Mercury:~/tmp] duncan% cvs commit -m "Sync" cvs commit: Examining . cvs commit: Examining CVSROOT cvs commit: Examining Pictures RCS file: /Library/Depot/Pictures/me1.jpg,v done Checking in Pictures/me.jpg; /Library/Depot/Pictures/me.jpg,v <-- me.jpg initial revision: 1.1 done
Pour sortir le fichier vers l’autre machine, nous entrerions la commande update
comme suit :
[Mercury:~/tmp] duncan% cvs update -d
L’option -d de la commande update dit à CVS de sortir tous les sous-répertoires ajoutés depuis la dernière fois que nous avons effectué une mise à jour. Vous devriez voir la sortie suivante :
cvs update: Updating . cvs update: Updating CVSROOT cvs update: Updating Pictures U Pictures/me.jpg
Voilà! Vous venez de créer un miroir à jour de vos données entre plusieurs machines. Tout ce que vous ajouterez à une machine apparaîtra sur les autres machines. Vous avez juste besoin de vous rappeler d’ajouter les fichiers dans le dépôt, et de lancer régulièrement la commande cvs update -d.
Supprimer Des Fichiers
Occasionnellement, vous voudrez peut-être supprimer un fichier du dépôt.
Pour cela, vous n’avez qu’à supprimer le fichier, puis lancer une commande
cvs delete. Voici un exemple :
[Mercury:~/tmp] duncan% rm Pictures/me.jpg [Mercury:~/tmp] duncan% cvs delete Pictures/me.jpg cvs remove: scheduling `Pictures/me.jpg' for removal cvs remove: use 'cvs commit' to remove this file permanently [Mercury:~/tmp] duncan% cvs commit -s "Sync" cvs commit: Examining . cvs commit: Examining CVSROOT cvs commit: Examining Pictures Removing Pictures/me.jpg; /Library/Depot/Pictures/me.jpg,v <-- me.jpg new revision: delete; previous revision: 1.1 done
Déplacer des fichiers est un problème avec CVS. Il n’y a pas de commande cvs move (déplacer), aussi devrez-vous effacer le fichier où il était et le replacer à l’endroit où vous voulez qu’il soit.
Appliquer CVS A Notre Scénario
Maintenant que nous avons appris comment utiliser CVS, comment devrions-nous l’utiliser ? La réponse est “ça dépend”. Les désirs de chacun seront différents, mais après avoir utilisé CVS sur plusieurs machines pendant de nombreuses années, voici un ensemble de conseils:
- Ne faites pas passer votre répertoire d’accueil entier dans CVS. Il y a beaucoup de données que vous n’avez pas besoin de dupliquer. A la place, concentrez-vous à à faire passer les choses importantes: vos documents.
- Ne faites pas passer d’applications. Encore une fois, ce sont les données qui sont importantes. Vous pouvez facilement installer la même application sur plusieurs machines. CVS est parfait pour s’assurer que vos fichiers de données pour ces applications sont bien partagés sur toutes vos machines.
- Ceci dit, CVS est le lieu idéal pour planquer vos scripts shell et autres friandises que vous pourriez garder dans votre répertoire ~/bin.
- Surtout assurez-vous que vous avez l’indicateur binaire approprié dans
CVSHOME/cvswrappers avant de faire passer un fichier binaire pour la première fois. Sinon vous pourriez avoir des problèmes plus tard.
En général, je conserve le contenu de mon dossier ~/Documents dans CVS ce qui me permet d’avoir tous mes documents avec moi où que j’aille. De la même manière, je garde aussi dossier ~/bin dans CVS pour que tous mes scripts shell et outils en ligne de commande restent avec moi. Et finalement, je conserve tout mon Code dans un dossier ~/Code . Pour les maintenir à jour, j’ai un script (dans ~/bin ) qui exécute ce qui suit:
cd ~/Code cvs update cd ~/Documents cvs update cd ~/bin cvs update
Vous utiliserez les méthodes qui ont le plus de sens pour votre usage. Expérimentez un moment. Voyez ce qui marche. Mais en commençant avec ces règles, vous devriez arriver à vos désirs plus rapidement.
Les problèmes CVS
CVS ne sera jamais l’outil parfait pour le boulot. Les personnes qui utilisent les outils de Source Code Management (SCM, Gestion du Code Source, le terme rigolo pour la tâche que CVS effectue) vous diront toutes les gênes occasionnées par CVS. Ces gênes comprennent habituellement le fait que même si vous faites passer trois fichiers ensemble, CVS ne note pas que les versions de ces trois fichiers sont liées. De même, déplacer des fichiers avec CVS est problématique. Vous devez d’abord effacer le fichier de CVS puis le mettre dans son nouvel emplacement. Non seulement c’est lourd, mais vous défaites l’histoire du fichier.
Même avec ces erreurs, CVS est un outil très utile pour la maintenance de vos données sur plusieurs machines. Et si l’on regarde ce qui nous arrive, il y a un successeur de CVS en développement appelé Subversion qui résoudra de nombreux problèmes de CVS . Vous pouvez vous renseigner sur Subversion sur
href=”http://subversion.tigris.org/” target=”_blank”>http://subversion.tigris.org/.
Les ressources CVS
Cet article constitue un point de départ dans votre utilisation de CVS pour la gestion de vos données. Cependant, à partir d’un certain moment vous voudrez probablement approfondir ce que CVS peut faire. Les ressources suivantes peuvent vous être utiles:
- CVS Pocket
Reference, par Gregor N. Purdy (publié en 2000 par O’Reilly and
Associates, avec une Deuxième
Edition parue en Août). Ce petit guide accessible vous donne la liste complète des commandes CVS et de leurs options. - Le site CVS, qui se trouve sur
href=”http://www.cvshome.org” target=”_blank”>http://www.cvshome.org/. Ce site web contient le code source de CVS, des FAQs et le manuel d’utilisateur de CVS “officiel” de 184 pages par Per Cederqvist, et al.

Textes originaux en anglais sur O’Reilly : In Sync With CVS par James Duncan Davidson

Chargement
Commentaires récents