CVS Handbook
Transcription
CVS Handbook
Note technique CODICIEL-LMFA No : 2001 - 01 CODICIEL - UPS CNRS S 0856 CVS Handbook A. Cadiou LMFA LMFA - UMR CNRS 5509, BP 163, 69131 ECULLY Cedex CVS Handbook - 11 Décembre 2001 CNRS-LMFA CVS Handbook Le 11 Décembre 2001 LMFA - UMR CNRS 5509, BP 163, 69131 ECULLY Cedex Table des matières 1 Qu’est-ce que CVS ? 1 2 Création et accès à une base CVS 2.1 Accès à la base CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Création de la base CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Déposer un projet dans la base CVS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 2 3 Utiliser CVS 3.1 Obtenir une copie de travail . . . . . . . . . . . . 3.2 Archiver les modifications . . . . . . . . . . . . . 3.3 Ajouter ou supprimer des éléments . . . . . . . . 3.4 Suivre l’historique . . . . . . . . . . . . . . . . . 3.5 Définition de noms de versions et branches . . . . 3.6 Revenir en arrière . . . . . . . . . . . . . . . . . . 3.7 Tableau récapitulatif des principales commandes . . . . . . . 3 3 3 3 3 4 4 4 4 Environnements utilisant CVS 4.1 tkcvs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 xemacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 Références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 CVS Handbook - 11 Décembre 2001 ii CNRS-LMFA CVS Handbook - 11 Décembre 2001 Cette notice simplifiée de l’utilisation de CVS s’inspire très largement du manuel CVS [2] et des différents documents cités en bibliographie. Elle s’appuie également sur les différents sites disponibles sur internet, dont http ://www.loria.fr/ molli/cvs-index.html et http ://www.cvshome.org. 1 Qu’est-ce que CVS ? CVS (Concurrent Version System) est un système de gestion de versions de fichiers. Il permet de conserver la trace des modifications successives effectuées sur les projets placés sous CVS, ainsi que d’archiver l’historique et la description de ces changements [2]. Il est développé par Cyclic Software et est sous licence GNU. CVS aide à gérer le développement d’un projet effectué en parallèle par plusieurs utilisateurs en identifiant les zones de conflit pour lesquelles un arbitrage humain est requis. Un projet sous CVS est organisé sous forme de modules, représentant l’arborescence des fichiers. Il est placé dans une base. CVS peut fonctionner en accès direct sur un système de fichiers réparti comme NFS ou en mode client/serveur autorisant les développements répartis sur plusieurs sites. CVS se sert de l’heure pour effectuer ses opérations. Il est donc important de synchroniser les horloges des machines connectées par un réseau IP , par exemple en utilisant Network Time Protocol. 2 Création et accès à une base CVS Un projet géré sous CVS est organisé sous forme de modules, comprenant l’arborescence de l’ensemble des fichiers archivés, récupérables par un utilisateur. Ces modules sont placés dans la base CVS, localisée par exemple sous : /usr/local/cvs Pour pouvoir récupérer un projet, c’est-à-dire obtenir une copie de travail d’un module, il est nécessaire d’avoir accès à la base CVS. Il existe trois méthodes d’accès à une base CVS. Chaque méthode peut être utilisée simultanément avec la même base. Seules les copies de travail d’un utilisateur donné doivent toujours utiliser la même méthode d’accès à la base. Le choix de la méthode d’accès s’effectue en commençant par définir la variable d’environnement CVSROOT. La façon de définir la variable CVSROOT pour chacune des trois méthodes d’accès, qui sont l’accès direct, en mode serveur pserver ou en mode rsh/ssh est précisée au paragraphe suivant. Copie de travail pserver Base CVS rsh/ssh Copie de travail direct Copie de travail Figure 1 – Accès à la base CVS CNRS-LMFA 1 CVS Handbook - 11 Décembre 2001 2.1 Accès à la base CVS Pour un accès direct, soit sur sa propre machine, soit sur un système de fichiers réparti comme NFS, la variable CVSROOT est définie par : setenv CVSROOT /usr/local/cvs en csh ou tcsh, ou encore export CVSROOT=/usr/local/cvs en bash. En mode serveur, l’exécutable CVS attend les requêtes des clients. Sur une machine cliente, la variable CVSROOT est définie par : setenv CVSROOT :pserver :user@server :/usr/local/cvs où user est le nom de l’utilisateur sur la machine server. La connexion est authentifiée par la commande cvs login exécutée sur la machine cliente. Cette commande demande un mot de passe vérifié par le serveur et stocké dans le fichier .cvspass de l’utilisateur. Après cette authentification, CVS se servira du mot de passe pour accéder au serveur. La sécurité de cette méthode est équivalente à la sécurité d’accès au fichier .cvspass. Il est donc préférable d’utiliser un mot de passe différent pour CVS et pour se connecter au serveur. Cela limite les risques. En mode rsh/ssh, la variable CVSROOT est définie lorsque la commande rsh est utilisée par : setenv CVSROOT :ext :user@server :/projet/base Il peut être intéressant de tester si le programme CVS est disponible sur le serveur server en se connectant sous l’utilisateur user, par : rsh -l user server cvs -v Pour utiliser un ssh, il faut définir la variable d’environnement CVS_RSH par : setenv CVS_RSH ssh Il est recommandé d’utiliser cette méthode sécurisée. 2.2 Création de la base CVS La base, ou repository est créée par la commande cvs init Cette commande crée les fichiers d’administration de CVS dans le répertoire défini par la variable CVSROOT. Un répertoire CVSROOT est également créé. Il est important de n’accéder à ces répertoires que par l’intermédaire des commandes CVS. 2.3 Déposer un projet dans la base CVS L’utilisateur possède par exemple un programme source en fortran qu’il souhaite administrer sous CVS, et qui existe dans le répertoire : /home/user/cfd/src Pour enregistrer ce programme sous un module qui sera appelé par exemple src_cvs, la commande import est utilisée : cvs import -m "initial version" src_cvs user V0 L’option -m permet de rentrer un commentaire en ligne, ici initial version, associé à la commande import. Vient ensuite le nom du module déposé, le nom de son auteur et un label désignant le nom de la version. Il est important que le répertoire /home/user/cfd/src ne contienne que des fichiers à effectivement placer sous CVS. En effet, chaque action sur un fichier placé dans un module CVS est gardée en mémoire par CVS. Il ne faut pas créer ou détruire de fichier ou de répertoire directement dans la base CVS, mais passer par les commandes CVS. 2 CNRS-LMFA CVS Handbook - 11 Décembre 2001 3 3.1 Utiliser CVS Obtenir une copie de travail Pour obtenir une copie de travail des fichiers d’un module, en créant l’arborescence nécessaire, la commande checkout est utilisée. Par exemple, pour récupérer la dernière version de src_cvs, il faut demander : cvs checkout src_cvs Une copie du module src_cvs est créée sur la machine de l’utilisateur. En pratique, cette commande ne s’effectue qu’une seule fois, au début du travail. Lorsque l’utilisateur n’utilise plus sa copie de travail, il peut vouloir la détruire. La commande cvs release -d src_cvs permet de la détruire en vérifiant qu’il n’y a pas de modification non archivée dans la base. 3.2 Archiver les modifications Lorsque les fichiers ont été localement modifiés par l’utilisateur à l’aide de ses outils habituels et que les modifications sont suffisamment validées pour être archivées, l’utilisateur peut soumettre tout ou une partie de ses fichiers à CVS, par la commande : cvs commit -m "Symmetry Boundary condition updated" Les commentaires permettent de décrire la nature du changement effectué. Cette commande associe de façon automatique à chaque fichier un numéro de révision du type 1.1 ou 1.1.1.1, puis 1.2, 1.3 et ainsi de suite. 3.3 Ajouter ou supprimer des éléments Pour ajouter des fichiers dans la base, il est nécessaire que les noms des fichiers soient stables. Pour ajouter un fichier dans le module, il faut effectuer les deux commandes suivantes : cvs add -m "Copyright file" copyright cvs commit -m "Add first Copyright version" copyright La première commande n’a aucune action sur CVS. Elle informe CVS que ces fichiers feront prochainement partie de la base. La seconde commande réalise l’ajout. Après modification, la commande log peut être utilisée pour vérification. Pour détruire un fichier, la commande remove intervient : cvs remove copyright cvs commit -m "remove Copyright version" copyright Elle est également validée par l’action cvs commit. 3.4 Suivre l’historique Les commentaires associés aux différentes versions de fichiers lors des archivages sont consultables par la commande : cvs log main.f où l’historique du fichier main.f du projet src_cvs s’affiche. L’état des fichiers de la version de travail peut être à tout moment comparé à l’état des fichiers de la base, pour voir si ces fichiers ont été modifiés dans la base. cvs status main.f S’il est à jour par rapport à la base, il sera décrit comme Up-to-date. Les différences entre deux versions de la base peuvent être consultées avec la commande diff. Par exemple la comparaison du fichier main.f entre la version 1.2 et la copie de travail de l’utilisateur s’effectue par : cvs diff -r 1.2 main.f CNRS-LMFA 3 CVS Handbook - 11 Décembre 2001 Pour mettre à jour un fichier, la commande update est utilisée. cvs update main.f Les conflits éventuels entre des fichiers de différentes versions peuvent ressortir à l’issue de cette opération. 3.5 Définition de noms de versions et branches Une opération importante consiste à nommer une version de fichier ou d’un ensemble de fichiers. Il s’agit d’y associer un tag. Ce nom est alors utilisé à la place du numéro de version dans toutes les commandes CVS. Par exemple, pour livrer la version V1_0 du module, le tag suivant peut être ajouté sur le projet : cvs rtag V1_0 src_cvs La commande cvs status -v permet alors d’afficher l’état des noms des versions. De façon naturelle, l’extension de cette notion de tag, est la notion de branche. CVS permet de gérer plusieurs branches de développement des modules. C’est utile par exemple, lorsque des corrections doivent être effectuées alors que le développement s’est poursuivi dans la branche principale. Il suffit alors de créer une branche secondaire à partir de la version antérieure, de corriger et d’archiver les fichiers dans cette branche secondaire. La version secondaire peut être livrée sans perturber les modifications en cours dans la branche principale. Pour créer une branche, la commande cvs rtag est utilisée avec l’option -b : cvs rtag -b -r V1_0 CORRECTIONS-V1_0 src_cvs La fusion des branches se fait ensuite par la commande : cvs checkout -j CORRECTIONS-V1_0 src_cvs 3.6 Revenir en arrière Si au cours du développement, il apparait souhaitable de revenir à une version antérieure à la dernière version de la base, il est nécessaire de mettre à jour la dernière version des fichiers concernés, de les remplacer par une version antérieure et de replacer cette version dans la version de base. Par exemple, le fichier main.f sous sa version de révision actuelle 1.2 doit être remplacé par celui qui existait dans la version 1.1. Ceci s’effectue de la manière suivante : cvs update -A main.f rm main.f cvs update -p -r1.1 main.f > main.f cvs commit -m "back to initial version" main.f La commande cvs commit valide encore la modification. 3.7 Tableau récapitulatif des principales commandes Les sous-commandes disponibles avec la commande cvs peuvent être obtenues par : cvs --help-commands Ces sous-commandes possèdent des options consultables par : cvs --help-options alors que les options spécifiques à une sous-commande donnée sont décrites par : cvs -H <sous-commande> La forme générale d’une commande CVS est la suivante : cvs [options générales] <sous-commande> [options spécifiques] Les principales commandes sont listées dans le tableau ci-dessous. 4 CNRS-LMFA CVS Handbook - 11 Décembre 2001 commande add checkout commit diff history import init log release remove rtag status tag update 4 descriptif de l’action ajoute un fichier ou un répertoire à la base extrait une copie de travail archive une version dans la base visualise les différences entre deux versions visualise l’historique de la base archive une aborescence de fichiers dans une branche d’un module de la base met en place une base CVS liste les informations sur les fichiers et leurs versions quitte la copie de travail d’un module retire un fichier d’un module manipule un nom symbolique de version pour un ou plusieurs modules visualise l’état des fichiers par rapport à la base CVS manipule un nom symbolique de version pour un ou plusieurs fichiers met à jour une copie de travail par rapport aux versions de la base Environnements utilisant CVS Il existe de nombreux outils intégrant CVS dans leur environnement. Ils permettent en général une utilisation relativement conviviale de CVS. Deux de ces outils ont été sélectionnés ci-dessous. 4.1 tkcvs tkcvs permet d’utiliser les commandes CVS graphiquement avec une interface tk. La différence entre les fichiers est visualisée par tkdiff. tkcvs permet d’utiliser un éditeur de texte pour travailler sous son interface. Cet éditeur est souvent vi par défaut. tkcvs peut être personnalisé en installant un fichier .tkcvs qui peut être généré à partir de la configuration par défaut du fichier /usr/lib/tkcvs/tkcvs_def.tcl. L’interface typique est illustrée à la figure 2. Les boutons de l’interface permettent d’effectuer les commandes checkout, diff et log aisément. Les arborescences peuvent être visualisées sous tkcvs, comme le montre la figure 3. 4.2 xemacs xemacs est interfacé avec CVS par ses modules vc et ediff ainsi que pcl-cvs. vc (version control) permet d’accéder au versionnement des fichiers individuellement. Les commandes add, update, commit, diff et annotate sont proposées dans le menu. ediff permet de visualiser la différence entre deux fichiers. Contrairement aux outils basés sur la commande unix diff qui compare les fichiers lignes par lignes, les fichiers peuvent être comparés mots par mots. pcl-cvs complète vc en permettant des mises à jour globales de la version de travail. Les outils liés à xemacs utilisent la même fenêtre que l’éditeur (cf figure 4). Les clefs des commandes sont répertoriées dans l’aide associée à xemacs. CNRS-LMFA 5 CVS Handbook - 11 Décembre 2001 Figure 2 – Interface tkcvs 6 CNRS-LMFA CVS Handbook - 11 Décembre 2001 Figure 3 – Arborescence tkcvs CNRS-LMFA 7 CVS Handbook - 11 Décembre 2001 Figure 4 – Interface xemacs 8 CNRS-LMFA CVS Handbook - 11 Décembre 2001 Références [1] P. Cederqvist. Version Management with CVS. Signum Support, 1992. [2] F. Lepied. CVS Configuration et mise en oeuvre. O’Reilly, 2000. [3] A. Marin. Mini-howto CVS sous unix. Technical Report 1.18, Inria, 2000. CNRS-LMFA 9 Note technique CODICIEL-LMFA No : 2001 - 01 Authors : A. Cadiou Title : CVS Handbook Title : Manuel simplifié d’utilisation de CVS Résumé : CVS est un logiciel de suivi de versions. Il permet de gérer plus facilement le développement d’un projet informatique en permettant de visualiser les modifications successives, de revenir en arrière en cas d’erreur ou de travailler sur des branches parallèles. Il possède par conséquent un intérêt non négligeable dans le cadre d’un travail en équipe. Ce document présente les principales commandes à connaı̂tre pour un utilisateur travaillant sous CVS. Mots clés : Gestion de projet, suivi de version Abstract : CVS (Concurrent Version System) is a version control software. CVS allows to simplify the development of a common project within a group by providing a way to visualize the various modifications proposed by the developers and archive them, to get back to a previous version when necessary or to work simultaneously on parallel branches on the same project. This is therefore an interesting tool for team work and development. This document summarizes the major commands used by co-workers under CVS. Key words : Version control system