Introduction rapide à CVS <author> Jérôme Petazzoni, <tt>skaya@enix.org</tt> <abstract> Ceci document permet une prise en main ultra-rapide de CVS, pour les impatients qui veulent coder maintenant, tout de suite. Les exemples supposent que l'on dispose d'une station de travail (si possible sous Unix) connectée à Internet, avec CVS installé (peu importe la version). </abstract> <toc> <sect>Informations générales sur CVS <sect1> Qu'est-ce que ça veut dire? <p>Concurrent Version System. <sect1> Qu'est-ce que ça peut faire? <p>Le but principal de CVS est de maintenir dans un endroit centralisé l'intégralité des sources d'un projet, avec toutes les versions successives de chaque fichier. Ainsi, on peut facilement retracer l'évolution du source. De plus, CVS prévoit que plusieurs programmeurs travaillent simultanément sur les mêmes fichiers, et tente de gérer au mieux les mises à jour simultanées de ces fichiers. <p>Par exemple : Alice modifie <tt/types.h/ en rajoutant un type, Bob modifie ce même fichier en modifiant un autre type. Lors de la mise à jour, CVS regarde les différences entre le fichier original et celui édité par le programmeur et incorpore les modifications. Lorque elles concernent exactement la même section de code, il y a "conflit" et il faut qu'un des deux programmeurs s'en occupe manuellement. <sect1> Qu'est-ce que ça ne peut pas faire? <p>Le rôle de CVS n'est pas de gérer la compilation. Les Makefile, autoconf et autres sont là pour ça. De plus, CVS n'est pas spécialement adapté au suivi d'un standard ou d'un protocole, ou d'autres documents textuels. Il ne remplace pas non plus les réunions de travail et autres brainstormings. <sect> Se préparer à utiliser CVS <p>De quoi a-t-on besoin? Il faut le programme CVS. On peut l'utiliser en "stand-alone", lorsque tous les développeurs se logent sur la même machine. Mais nous allons ici détailler l'utilisation d'un <it>pserver</it>, où les programmeurs se connectent par le biais d'un réseau TCP/IP (Internet par exemple, ou un réseau local). <p>L'administrateur du serveur CVS doit donner aux développeurs les informations suivantes : le nom du serveur, le chemin d'accès (<tt>/var/cvs/superprojet</tt>), ainsi qu'un login et un mot de passe. Il ne faut pas nécessairement un compte Unix sur le serveur pour utiliser le CVS. <p>Pour vérifier que CVS est bien installé sur votre machine, essayez de lancer <tt/cvs/, tout simplement. S'il trouve, il doit répondre par une page d'aide. D'autre part, pour vérifier que le serveur CVS de démonstration est disponibles, essayez de faire <tt/ping cvs.enix.org/. <sect1> Configurer l'environnement <p>Il n'y a presque rien a faire. Sauf : positionner une variable d'environnement, CVSROOT, afin d'indiquer le serveur CVS qu'on souhaite utiliser, ainsi que le nom d'utilisateur et la repository. <p>Par exemple : <p><tt>export CVSROOT=:pserver:ecrivain@cvs.enix.org:/var/cvs/demo</tt> <p>NB : il est aussi possible d'utiliser l'option <tt/-d/ du programme <tt/cvs/, par exemple <tt>cvs -d :pserver:ecrivain@cvs.enix.org:/var/cvs/demo login</tt>. <sect1> Organisation des <it/repositories/ <p>Sur un même serveur CVS, on peut avoir plusieurs projets qui cohabitent, dans des <it/repositories/. Et dans chaque repository (en général, on peut envisager une par projet), on a des modules. En effet, lorsqu'on travaille sur un projet, celui-ci est compose de plusieurs modules (completement independants) qu'on rapatrier separement depuis le CVS. Par exemple, on peut avoir un module doc, un module src, et un module bench. Ici, le login est <tt>ecrivain</tt>, le serveur est <tt>cvs.enix.org</tt>, et la repository est <tt>/var/cvs/demo</tt>. On suppose qu'on est dans un nouveau repertoire (par exemple DemoCVS). <sect1> Se "loger" sur le serveur CVS <p>Cette operation n'est à effectuer que la première fois qu'on travaille sur la repository. Il suffit de taper : <p><tt>cvs login</tt> <p>Le mot de passe va être demandé et verifié auprès du serveur. Pour cette demonstration, utiliser le mot de passe <tt>ecrivain</tt>. Si le programme revient à l'invite sans rien dire, c'est qu'il n'y a pas de problème. Sinon il doit donner un message d'erreur (type : mot de passe invalide, par exemple). <sect1> Créer un nouveau module <p>Créons un repertoire <tt>trucmuche</tt>. (Pour que la demo marche, mettez autre chose que <tt/trucmuche/, il y a surement quelqu'un qui l'a déjà mis!) Dans ce répertoire, placez un fichier <tt>main.c</tt> et un <tt>Makefile</tt>, par exemple, avec quelques lignes chacun. Ensuite, il faut (en restant dans le répertoire <tt>trucmuche</tt>) taper la commande : <p><tt>cvs import trucmuche HEAD DEVEL</tt> <p>Normalement, un éditeur va se lancer pour demander de taper un message, qui sera incorporé au <it/log/ des fichiers. <itemize> <item><tt>import</tt> signifie qu'on veut ajouter un module avec les fichiers existants dans le repertoire, <item><tt>trucmuche</tt> est le nom du module, <item><tt>HEAD</tt> et <tt>DEVEL</tt> sont des <it>tags</it> qui servent à marquer des <it>branches</it>. Sans entrer dans les détails, cela permet de maintenir de front plusieurs versions du programme, par exemple une version <tt>ALPHA</tt> et une version <tt>STABLE</tt>, et de les faire évoluer séparément, en intégrant au coup par coup les modifications de l'une dans l'autre. </itemize> <p>Une fois que l'import est effectué, on peut (il est même recommandé) d'effacer le repertoire trucmuche (sauf bien entendu s'il y a eu une erreur!). <sect> Utilisation concrète <sect1> Récupérer les sources <p>Maintenant, se replacer dans le répertoire DemoCVS. Pour commencer à travailler sur le projet, il faut utiliser la commande de <tt>checkout</tt> : <p><tt>cvs checkout trucmuche</tt> <p>Cela va créer un répertoire <tt/trucmuche/ contenant les fichiers qu'on a importés tout à l'heure, ainsi qu'un sous répertoire CVS contenant des informations propres au programme (ne pas y toucher). <sect1> Faire des modifications <p>Une fois qu'on a fait un checkout, on peut éditer les sources avec ses outils favoris, comme si de rien n'était. <sect1> Mettre sa copie de travail à jour <p>Lorsqu'on souhaite récuperer les dernières mises à jour, par exemple juste avant de synchroniser sa copie de travail avec les sources du serveur, il faut utiliser <tt>cvs update</tt>. <sect1> Propager ses modifications <p>Une fois les modifications jugées satisfaisantes, pour les incorporer au source, utiliser <tt>cvs commit</tt>. Comme pour un import, un éditeur va etre lancé pour taper un commentaire qui sera ajoute au log. <sect1> Résolution des conflits <p>S'il y a des conflits, CVS l'indique et modifie les fichiers concernés en plaçant des repères aux endroits qui posent problème. Il suffit d'éditer les fichiers et d'effectuer la fusion à la main. <sect1> Ajouter / enlever des fichiers <p>Pour ajouter un fichier, faire <tt>cvs add nomdufichier.c</tt>, le fichier ne sera vraiment ajouté qu'au prochain <tt>commit</tt>. <p>Pour enlever un fichier, c'est <tt>cvs remove</tt>. Pour renommer un fichier, il faut l'ajouter sous son nouveau nom puis enlever l'original. Le problème est que cela fait perdre les informations de version (il faut examiner l'ancien fichier pour remonter les versions). </article>