Alianwebserver.com

Retour au sommaire Linux

Concurrent Versions System

  1. Introduction
  2. Présentation
  3. Configuration d'un serveur
  4. Ajout d'un nouveau module
  5. Retrait d'un nouveau module
  6. Prise en compte des modifications
  7. Substitution des mots-clefs

1. INTRODUCTION

CVS est un logiciel d'aide au développement de logiciels. Il permet entre autre de gérer les versions et d'enregistrer l'historique du développement d'un produit. CVS permet aussi le développement de produits en équipe en gérant les accès concurrents sur les fichiers de développement. 

Par exemple, des anomalies s'introduisent parfois lorsque le logiciel est modifié, et l'anomalie peut être détectée longtemps après d'autres modifications. Avec CVS, on peut facilement rechercher les vieilles versions pour voir quel sont les changements qui ont causé l'anomalie.

Aussi, on pourrait enregistrer chaque version de chaque fichier créé. CVS mémorise toutes les versions dans un fichier intelligent et enregistre seulement les différences entre les versions.

CVS permet de travailler aussi en groupe sur un même projet. Il est difficile de recouvrir des changements en groupe de travail à moins de faire extrêmement attention. Quelques éditeurs, comme Emacs, essayent de s'assurer que le même fichier n'est jamais modifié par deux personnes en même temps. Malheureusement, si quelqu'un utilise un autre éditeur, la sauvegarde ne fonctionnera pas. CVS résout ce problème en isolant les programmeurs. Chaque programmeur travail dans son propre répertoire, et CVS fusionne le travail.

En revanche CVS n'est pas un compilateur ni un système de gestion de projets ni un outil de communication.

(Extrait de http://www.allemand.claranet.fr/linux/cvs/cvsimp.html Petit guide de l'utilisation de CVS).

CVS possède un long héritage du monde Unix , et a été porté sur pratiquement toutes les plate-formes.

Voir http://www.cyclic.com/cyclic-pages/howget.html pour une liste des portages de CVS. Outre l'interface classique en ligne de commande, on notera les clients WinCVS (http://www.wincvs.org ) sous Windows et Cervisia sous Linux qui fournissent de sérieux coup de pouce pour commencer. Si l'interface peut changer suivant le produit, le fonctionnement de CVS reste identique.

2. PRESENTATION

CVS fonctionne en mode client serveur. Le serveur contient des modules (projets) qu'il fourni aux différents développeurs. Ceux-ci ramènent le module, font les modifications et soumètent leur travail une fois les modifications effectuées. Chaque fois qu'un module est soumis (« Commit »), le serveur vérifie que chacun des fichiers n'a pas été modifié et enregistre les différences. 

En effet, plutôt que de stocker un exemplaire des différentes versions d'un fichier, CVS enregistre les différences. Cela permet de connaître l'historique des modifications ainsi que leurs auteurs.

Les modules sont stockés dans un répertoire, appelé Repository, désigné par la variable d'environnement CVSROOT. Chaque module à son répertoire correspondant à son nom. Ce répertoire doit être connu de chacun des clients pour permettre le rapatriement des modules. Avec les serveurs Unix, on peut se connecter via un disque local, rsh ou ssh, sur les clients Windows, ce répertoire doit être accessible via le réseau (Définir un répertoire sur le serveur de fichier avec Samba par exemple).

3. CREATION DU REPOSITORY

La démarche décrite plus loin concerne uniquement le cas où vous voulez pouvoir accéder au sereur cvs depuis une autre machine. Sinon la démarche est simple:

mkdir /usr/local/cvs_repository

export CVSROOT=/usr/local/cvs_repository

Et c'est tout. Sinon:

4. AJOUT D'UN NOUVEAU MODULE

Pour ajouter un module, utilisez CVS Admin/ Import module. Cela a pour effet de transférer le répertoire sélectionner dans la le CVSROOT. 

La commande CVS équivalente est qqc comme:

 cvs import -I ! -I CVS -W "*.gif" -k b 
     nom_module Auteur Release1-1

5. RETRAIT D'UN NOUVEAU MODULE

La commande CVS équivalente est qqc comme:

cvs checkout -P nom_module

6. PRISE EN COMPTE DES MODIFICATIONS

Sur les fichiers sélectionnés, appuyez sur le bouton « Commit ». Cela aura pour effet de mettre à jour sur le serveur vos modifications, et de faire évoluer le numéro de version.

Si un autre développeur a fait évoluer la version depuis, une alerte est levée. Si possible CVS fusionne les deux versions, ou pose des alertes sur les points ambigus.

Si vous ne voulez pas que CVS fusionne les versions avant que vous ayez fini vos modifications, vous devez verrouiller le fichier. (N'oubliez pas de le déverouiller !).

7. SUBSTITUTIONS DE MOTS-CLEFS

Vous pouvez gérer directement dans votre source certaines variables qui seront mises à jour automatiquement (auteur, version, date de modification, chemin original).

Voici la liste des mots-clefs : 

$Author$

Le nom de login de l'utilsateur qui a validé cette révision.

$Date$

La date et l'heure (UTC) à laquelle cette revision a eu lieu.

$Header$

Un entête standart contenant le nom complet du fichier RCS, son numéro de révision, la date (UTC), l'auteur, l'état, et le verouilleur (si fichier vérouillé). 

$Id$

Pareil que $Header$, excepté que le nom de fichier RCS ne contient pas le chemin complet.

$Name$

Tag name used to check out this file.

$Locker$

Le nom de login de l'utilisateur qui a vérouillé cette révision (vide, si non vérouillé).

$Log$

Le message de log soumit lors du commit, precedé par un entête contenant le nom complet du fichier RCS, son numéro de révision, la date (UTC), l'auteur. Les messages de sortie ne sont jamais remplacés. A la place le nouveau message de log est inséré après $Log:...$.  Chaque nouvelle ligne est prefixe par la même chaine qui précede le mot clé $Log. Par exemple, si le fichier contient

/* Here is what people have been up to:
   *
   * $Log: frob.c,v $
   * Revision 1.1  1997/01/03 14:23:51  joe
   * Add the superfrobnicate option
   *
   */
alors les lignes additionnelles lines qui seront ajoutées lors de l'expansion du mot clé $Log precedé par * . Au contraire des annciennes versions de CVS et RCS, le "commentaire de début de ligne" du fichier RCS n'est pas utilisé.  

$RCSfile$

Le nom du fichier RCS sans le nom de répertoire.

$Revision$

Le numéro de révision affecté à ce fichier.

$Source$

Le nom complet du fichier RCS.

$State$

L'etat de la révision.