L'entrepôt de code

L'entrepôt de code CVS stocke une copie complète de tous les fichiers et répertoires qui sont soumis à la gestion de version. En temps normal, vous n'avez pas à accéder directement à ces fichiers de l'entrepôt. En lieu et place, vous utilisez les commandes CVS pour obtenir votre propre copie des fichiers dans un répertoire de travail, puis travaillez sur cette copie. Quand vous avez fini vos modifications, vous les validez dans l'entrepôt. L'entrepôt contient ainsi les modifications que vous avez faites, de même qu'il a enregistré ce que vous avez exactement modifié, quand vous l'avez modifié, et autres informations du genre.

Créer un dépôt

Pour créer un entrepôt, lancez la commande CVS init. Cela créera un dépôt vide dans la racine CVS spécifiée de la manière habituelle.
cvs -d /usr/local/cvsroot init
Ici, le répertoire /usr/local/cvsroot deviendra le dépôt.

Variable d'environnement CVSROOT

Positionnez la variable d'environnement CVSROOT dans les scripts de démarrage de votre interpréteur de commande. Par exemple, dans ~/.bashrc :
$ export CVSROOT=:pserver:username@foo.com:/usr/local/cvsroot

Sauvegarde du dépôt

Il y a quelques points à considérer quand vous sauvegardez le dépôt :

Dépôt distant

La copie de travail de vos fichiers sources peut se situer sur une autre machine que celle hébergeant le dépôt. Cette utilisation de CVS est connue sous le terme de mode client/serveur.

Configuration du serveur : ajoutez l'entrée suivante dans le fichier /etc/inetd.conf du serveur :
2401 stream tcp nowait root /usr/local/bin/cvs cvs -f --allow-root=/usr/cvsroot pserver
Si votre super-daemon inetd veut un nom symbolique de service au lieu d'un simple numéro de port, alors ajoutez ceci dans le fichier /etc/services
cvspserver     2401/tcp
et mettez « cvspserver » au lieu de « 2401 » dans inetd.conf.

Après avoir effectué vos changements, envoyez un signal HUP à inetd.

Authentification par mot de passe pour les dépôts distants

Pour configurer l'authentification par mot de passe, créez un fichier $CVSROOT/CVSROOT/passwd. Le contenu du fichier ressemblera à :
anonymous:
kapil:1sOp854gDF3DY
melissa:tGX1fS8sun6rY:pubcvs

Les mots de passe sont chiffrés à la mode Unix. La première ligne de l'exemple autorisera l'accès à n'importe client CVS cherchant à s'authentifier avec l'utilisateur anonyme anonymous, quelque soit le mot de passe qu'il emploie. La deuxième ligne autorisera l'accès à kapil s'il fournit son mot de passe correspondant à la chaîne chiffrée.

La troisième ligne autorisera l'accès à melissa si elle donne son mot de passe, mais ses opérations CVS se feront en tant que l'utilisateur pubcvs.

Note : CVS peut être configuré pour ne pas utiliser le vrai fichier de mot de passe d'Unix, à savoir /etc/passwd, pour l'authentification CVS en positionnant le paramètre SystemAuth à « no » dans le fichier de configuration de CVS $CVSROOT/CVSROOT/config.

Utilisation du client avec l'authentification par mot de passe

Vous devez vous connecter au serveur CVS pour la première fois :
cvs -d :pserver:kapil@foo.com:/usr/local/cvsroot login
Vous pouvez ensuite utiliser toutes les commandes de CVS sur la machine distante :
cvs -d :pserver:kapil@foo.com:/usr/local/cvsroot checkout someproj

Dépôts en accès lecture seulement

Il est possible de n'autoriser l'accès qu'en lecture seule à certaines personnes en utilisant le serveur authentifié par mot de passe. Il y a deux façons de spécifier l'accès en lecture seule pour un utilisateur : par inclusion ou par exclusion.

Par inclusion signifie spécifier un utilisateur dans le fichier $CVSROOT/CVSROOT/readers, qui est une simple liste d'utilisateurs sur des lignes séparées. En voici un exemple :
kapil
yogesh
john
N'oubliez pas le dernier retour à la ligne après le dernier utilisateur.

Par exclusion, on signifie que tous les utilisateurs doivent avoir un accès en lecture-écriture, et que tous les autres auront un accès en lecture seule. Le fichier writers a le même format que le fichier readers.

Mise en place des fichiers dans le dépôt

Si les fichiers que vous voulez installer dans CVS résident dans un répertoire mon_projet, et que vous voulez les voir apparaître dans le dépôt en tant que $CVSROOT/mon_projet, vous pouvez faire ceci :
$ cd mon_projet
$ cvs import -m "sources importés" mon_projet vendor rel1-1
Ici, la chaîne « vendor » est une balise pour l'éditeur, la chaîne « rel1-1 » est une balise concernant la version du produit.

Verrous CVS dans le dépôt

Tout fichier dans le dépôt qui possède un nom commançant par « #cvs.rfl. » est un verrou en lecture. Tout fichier dont le nom commence par « #cvs.wfl. » est un verrou en écriture. Le répertoire #cvs.lock sert de verrou général. Cela signifie qu'une personne doit d'abord obtenir ce verrou avant de pouvoir créer les autres verrous.

Pour obtenir un verrou en lecture, créez d'abord le répertoire #cvs.lock. Si la création échoue parce que le répertoire existe déjà, attendez un peu et ré-eesayez. Après avoir obtenu le verrou #cvs.lock, créez un fichier dont le nom est #cvs.rfl. suivi par l'information de votre choix (par exemple, un nom de machine ou un identifiant de processus). Puis retirez le verrou #cvs.lock pour relâcher le verrou général. Vous pouvez maintenant lire le dépôt. Quand vous avez fini, retirez le fichier #cvs.rfl. pour relâcher le verrou.

Pour obtenir un verrou en écriture, créez d'abord le répertoire verrou #cvs.lock, comme pour le verrou en lecture. Vérifiez ensuite qu'il existe pas de fichiers dont les noms commencent par « #cvs.rfl. ». S'il en existe, enlevez le verrou principal #cvs.lock, attendez un peu, puis recommencez. S'il n'y pas de lecteur, créez alors un fichier dont le nom sera #cvs.wfl suivi d'informations de votre choix (par exemple, nom de machine et identifiant de processus.) Suspendez-vous au verrou #cvs.lock. Procédez à vos écritures dans le dépôt. Quand vous avez fini, retirez d'abord le verrou #cvs.wfl puis le répertoire #cvs.lock.

Révisions symboliques en utilisant les balises CVS

Le numéro de version des produits en version finale sont différents des révisions dans CVS. Les numéros de révision peuvent changer plusieurs fois entre deux versions. Vous pouvez utilisez la commande tag pour donner un nom symbolique à une certaine révision d'un fichier.

Changez de répertoire pour le répertoire de travail, and passez la commande suivante pour baliser :
$ cvs tag rel1-1 fichier.c
Cette commande marquera le fichier fichier.c comme étant de révision 1.1.

$ cvs tag rel1-1 .
Cette commande marquera récursivement tous les fichiers du répertoire courant comme étant de révision 1.1.

Vous pouvez utilisez l'option -v de la commande status pour voir toutes les balises assignées au fichier, et quels numéros de révision ils représentent, en passant la commande suivante :
$ cvs status -v fichier.c

Vous pouvez maintenant extraire n'importe quelle révision d'un module en utilisant la commande suivante :
$ cvs checkout -r rel1-1 module1
où « module » est le nom du module. L'option -r associé à la commande checkout permettra à n'importe quel moment dans le futur d'extraire les sources constituant la révision 1.1 du module « module1 ».