Connexion au serveur CVS :
Pour toutes les interactions entre un client et un serveur
il est souhaitable d'initialiser la variable $CVSROOT qui contiendra
le chemin d'accès au serveur via le réseau. Cette
variable permet d'éviter de saisir -d <chemin>
dans chaque commande cvs pour lui spécifier où
se trouve le référentiel.
export CVSROOT=':pserver:username@server-cvs:/rep_racine'
dans le cas d'une connexion pserver
export CVSROOT='username@server-cvs:/rep_racine' et export CVS_RSH='ssh'
dans le cas d'une connexion SSH.
Interactions avec le serveur :
cvs login : lorsque la variable $CVSROOT
a été correctement initialisée, la commande
cvs login doit
permettre au client de se connecter au serveur et demander alors
le mot de passe correspondant au username contenu dans la variable
$CVSROOT. Le
client crée alors le fichier ~/.cvspass
qui contiendra le mot de passe (crypté) envoyé
à chaque communication avec le serveur dans le cas d'une
communication pserver.
cvs logout : la commande cvs logout permet
de se deconnecter sur serveur et efface le mot de passe du fichier
~/.cvspass sans
supprimer le fichier
cvs checkout (ou co) -z<niveau de compression>
<module> : par cette commande, on demande au
serveur une copie du module que l'on va stocker sur la machine
client. Un sous-répertoire portant le nom du projet que
l'on vient d'importer va être créé dans
le répertoire dans lequel a été exécutée
la commande. Un second répertoire nommé CVS est
créé, il contient les informations de connexion
au serveur CVS. Il ne doit pas être modifié. L'option
-z avec une valeur accolée comprise entre 0 et 9 spécifie
le niveau de compression gzip à utiliser. Ce paramètre
optionnel peut être utilisé lors de transferts
sur un réseau bas débit.
cvs diff : permet de comparer la version contenue
dans la copie locale avec celle contenue sur le serveur. Il
est possible de réaliser trois types de comparaisons
d'un fichier :
- entre la version locale et la version actuelle du référentiel
: cvs diff <nom de
fichier>
- entre la version locale et une version identifiée du
référentiel : cvs
diff -r <identificateur de version> <nom de fichier>
- entre deux versions identifiées du référentiel
: cvs diff -r <identificateur
de version1> -r <identificateur de version2> <nom
de fichier>
cvs add -m "Commentaure" <nom_fichier>
<module> : permet d'ajouter le fichier nom_fichier
et le module précisé au référentiel.
Même si CVS ne gére pas les fichiers binaires,
il est toutefois possible d'ajouter des fichiers binaires au
référentiel par le paramètre -kb
donné en ligne de commande avant le nom du fichier.
cvs remove <fichier> : L'exécution
de cette commande n'est possible que si le fichier a été
supprimé de la copie locale par un rm
fichier. Elle permet de supprimer un fichier du référentiel.
Quant à la suppression d'un répertoire, elle n'est
possible que si le répertoire est vide.
cvs update <nom de module> ou <nom de fichier>:
Cette commande permet de récupérer les modifications
que les autres utilisateurs ont envoyé vers le serveur.
Son utilisation suppose que l'utilisateur a déjà
fait un checkout depuis le serveur et possède donc une
copie du projet sur sa machine locale. Si aucun nom n'est passé
en paramètre, CVS met à jour le module correspondant
au répertoire dans lequel on se trouve.
Chaque mise à jour est suivie d'un compte rendu repéré
par une lettre :
Lettre |
Signification |
U |
Fichier local identique à celui du référentiel |
A |
Import d'un nouveau fichier dans la copie locale |
R |
Fichier supprimé dans la copie locale |
M |
Fichier de la copie locale modifié |
C |
Fichier du référentiel en conflit avec le
fichier local |
? |
Fichier local sans correspondance dans le référentiel |
cvs commit (ou ci) -m "Commentaire" <fichier>
<module> : mise à jour de la copie locale
vers le référentiel. En l'absence du paramètre
fichier, cvs détecte automatiquement les fichiers à
mettre à jour pour le module donné. En cas d'omission
du module, cvs prendra comme module celui dans lequel on se
trouve dans l'arborescence locale. Si on ne passe par
-m "Commentaire", l'éditeur par défaut
pointé par la variable $CVSEDITOR
s'ouvrira pour la saisie du commentaire. En cas de confilt,
il convient de réaliser un cvs update afin d'importer
les modifications faites entre le checkout et le commit par
un autre utilisateur.
Chaque mise à jour est suivie d'un compte rendu repéré
par une lettre :
Lettre |
Signification |
P |
MAJ OK. Le fichier a été ajouté au
référentiel ou modifié depuis le dernier
update mais la copie locale ne l'avait pas modifiée |
U |
MAJ OK. La copie locale avait modifié le fichier
et personne d'autre. |
M |
MAJ OK. Deux personnes ont modifié le fichier simultanément
mais pas les mêmes portions de code. |
C |
MAJ NOK. Deux personnes ont modifié les mêmes
portions de code d'un fichier. |
Après l'éxécution d'un commit et avant
de quitter le projet il est bon de remonter au répertoire
précédent et de réaliser un cvs
release <repertoire du projet> qui vérifiera
si tous les changements ont bien été mis à
jour sur le référentiel.
Renommer un fichier sur le référentiel
: il n'existe pas de commande apropriée, on doit passer
par un add / remove après avoir éxécuté
un mv sur la
machine locale :
mv fic1 fic2
cvs add fic2
cvs remove fic1
cvs commit -m "On renomme fic1 en fic2" : mise
à jour automatique du référentiel à
partir du module dans lequel on se trouve.
Revenir à une version précédente d'un
fichier : en cas de problème il peut être nécessaire
de revenir à une version antérieure de la source
présente sur la machine locale. On fait alors appel au
référentiel :
- cvs update -A <nom de fichier>
- rm <nom de fichier>
- cvs update -p -r <référence de version>
<nom de fichier> > <nom de fichier>
cvs tag : la commande tag permet de spécifier
un nom àune certaine version d'un fichier ou d'un projet
permettant ainsi de revenir facilement à une version
entièrement opérationnelle sans avoir à
faire des recherches fastidieuses de l'origine du dysfonctionnement.
cvs tag <nom de version>
taggera recursivement tout le répertoire avec le nom
passé en paramètre. Pour tagger un fichier unique
on passera le nom du fichier en dernier paramètre.
cvs status -v <nom
de fichier> permet de voir le ou les tags posé(s)
sur le fichier donné.
Enfin, la récupération d'un projet taggé
se fait de la façon suivante : cvs
checkout -r <nom de version> <nom de projet>.
Historique des modifications :
cvs permet d'afficher l'historique des différentes
modifications qu'a subi un fichier.
$ cvs log fichier
Cette commande peut être combinée avec une date
ou un intervalle temporel:
$ cvs log -d "d"
fichier
$ cvs log -d ">d" fichier
$ cvs log -d "<d" fichier
$ cvs log -d "d1<d2" fichier
Ces instruction donne l'historique respectivement de:
du jour d
après le jour d
avant le jour d
entre les jours d1
et d2
Le format des dates est:
yyyy-mm-dd: une
date précise
yesterday: hier
last (week|month|year):
la semaine dernière, le mois dernier, l'an passé
xx (jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)
yyyy: un jour précis de l'année (nom des
mois au format anglais)
cvs annotate <nom de fichier> : affiche
la liste des commentaires saisis lors des mises à jour
successives du fichier donné ainsi que l'auteur et la
version associée.
cvs status <nom de fichier> : renseigne
sur l'état d'un fichier, si il doit être mis à
jour vers le serveur ou depuis le serveur par exemple
Administration du serveur :
cvs import -m "nom CVS" /home/projet Recup
Vo : cette commande permet d'ajouter le projet contenu
dans /home/projet au référentiel CVS sous le nom
nom CVS.
cvs checkout (ou co) nom_rep : réalisation
d'une copie temporaire dans nom_rep du référentiel.
cvs admin : C'est par cette commande que l'on
peut :
- mettre en place les "yeux" ("advisory locks")
permettant à un utilisateur d'être averti dès
lors qu'une mise à jour intervient sur un module donné.
- mettre en place des verrous ("exclusive locks")
qui permettent à un utilisateur de verrouiler un fichier
tant qu'il n'aura pas mis sa version à jour. Ce style
de fonctionnement rend alors CVS équivalent à
RCS.
Sauvergarde du référentiel :
Lorsque l'administrateur souhaite réaliser une sauvegarde
du référentiel (par copie dans un autre répertoire
de la machine serveur), il est impératif que personne
n'intervienne en modification au même moment. Pour ce
faire, il est possible de verrouiller le serveur par l'insertion
d'un fichier vide nommé #cvs.rfl
dans chaque répertoire du référentiel.
Pour les autres commandes, man cvs;-). |