Concurrent Versions System
- Introduction
- Présentation
- Configuration d'un serveur
- Ajout d'un nouveau module
- Retrait d'un nouveau module
- Prise en compte des modifications
- 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:
- Creer le repertoire qui va recevoir tous les projets CVS
mkdir /usr/local/cvs_repository
- Positionnez votre variable d'environnement :
export CVSROOT=/usr/local/cvs_repository
- Si non present, rajoutez dans /etc/services
cvspserver 2401/tcp
- Creez le group cvs:
addgroup cvs
- Ajoutez les users pouvant accéder à cvs :
usermod -g cvs user1 usermod -g cvs user2
- Ajoutez le service nécessaire dans /etc/inetd.conf :
cvspserver stream tcp nowait root /usr/bin/cvs cvs --allow-root=/usr/local/cvs_repository pserver
- Creer la structure necessaire:
cvs -d /usr/local/cvs_repository
- Copier le fichier des mots de passe :
cp /etc/shadow /usr/local/cvs_repository/CVSROOT
- Modifiez le fichier /usr/local/cvs_repository/CVSROOT/passwd pour que ca donne: root:$1$KT4ZOG9O$4M1fgufImqfuj0K/XpuIg1: laissez l'user root et les autres users desires.
- Ajoutez au fichier /usr/local/cvs_repository/CVSROOT/modules
module_name1 <tab> module_name1 module_name2 <tab> module_name2
- Mettre à jour les droits:
cd /usr/local/cvs_repository chgrp -R cvs . chmod ug+rwx . CVSROOT
- Pour tester votre connection:
export CVS_CLIENT_LOG=/tmp/log export CVSROOT=:pserver:user@host:/usr/local/cvs_repository cvs login
Si la connecton echoue, les raison sont détaillées dans /tmp/log.in et /tmp/log.out - Pour être prévenu des qu'une modif est effectuée,
modifez le fichier /usr/local/cvs_repository/CVSROOT/notify pour mettre
:
ALL mail %s -s "CVS update"
Puis modifiez le fichier /usr/local/cvs_repository/CVSROOT/users pour mettreCVS_user:Email adress
Ex: alian: alian@alianwebserver.com
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.
- Choisir le répertoire à importer
- Choisir les types binaires /ascii pour les différentes extensions importées.
- Choisir le nom du module, ainsi que son nom éventuel de 1ere release.
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
- Pour retirer un module du serveur CVS, faire Admin/ Checkout module. Cela a pour effet de créer une copie de travail du module concerné.
- Choisir le répertoire où importer le module
- Puis dans l'écran suivant le nom du module à retirer
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: |
|
$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. |