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.
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 |
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 |
Il y a quelques points à considérer quand vous sauvegardez le dépôt :
Personne ne doit utiliser le dépôt pendant la sauvegarde, ou le logiciel de sauvegarde doit verrouiller CVS pendant la sauvegarde ;
Pour verrouiller CVS, vous devez créer un fichier « #cvs.rfl » dans chaque répertoire de dépôt.
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 |
cvspserver 2401/tcp |
Après avoir effectué vos changements, envoyez un signal HUP à inetd.
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.
Vous devez vous connecter au serveur CVS pour la première fois :
cvs -d :pserver:kapil@foo.com:/usr/local/cvsroot login |
cvs -d :pserver:kapil@foo.com:/usr/local/cvsroot checkout someproj |
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 |
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.
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 |
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.
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 |
$ cvs tag rel1-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 |