DÉBUTER AVEC CVS
CVS est un système de gestion de fichiers. Il permet de travailler à
plusieurs lors d'un développement. Cet outil conserve toutes les
révisions apportées au fichier. Il est donc possible de revenir sur une
version d'un fichier en particulier. Les sources sont situées sur un
serveur. Les développeurs prennent ces sources et les téléchargent afin
de pouvoir travailler localement. Ils peuvent ensuite mettre à jour les
fichiers se trouvant sur le serveur. Les conflits pouvant survenir sont
gérés en partie par CVS. CVS doit être installé avant de pouvoir
effectuer les exemples de ce tutoriel.
Préparation
Nous utiliserons les sources de qemu dans cet exemple. Télécharger
les sources de qemu et décompressé les.
Nous tenons compte ici que les sources sont dans le répertoire qemu. Si
aucun repository n'a été créé pour
le serveur cvs, il faut en définir un. S'il a déjà été défini, la
commande ci-dessus n'endommagera pas le système actuel. Cette commande
doit être faite sur le serveur.
cvs -d /opt/cvsroot init
Variable d'environnement
Nous devons maintenant créer une variable d'environnement afin de faciliter l'utilisation de cvs.
Ajouter dans le fichier .bashrc de l'usager:
La commande ci-dessus permet de se connecter à un serveur distant.
export CVSROOT=:pserver:ing@linux-sv1:/opt/cvsroot
ing étant le nom du compte de l'usager
linux-sv1 étant le nom du serveur
Le serveur cvs est situé dans: /opt/cvsroot
En terme cvs, /opt/cvsroot est le repository
Au lieu d'utiliser un serveur distant, il est possible d'utiliser un serveur local
export CVSROOT=/opt/cvsroot
Ces valeurs doivent bien sûr être adaptées à votre environnement.
Chaque répertoire à la racine du repository est appelé un module.
Type de connexion
Notez qu'il y a diverses techniques pour se connecter à un serveur
cvs. Il est possible d'utiliser ssh, pserver, rsh. L'utilisation de
pserver n'est pas très sécuritaire, car le mot de passe est envoyé en
clair lors de la tentative de connexion.
Commandes cvs
Import
Nous allons maintenant prendre les sources de qemu et les transférer sur le serveur cvs.
ing@ti-engetud-pc:~> cvs import qemu GY start
GY est utilisé comme nom de vendeur est start est utilisé pour spécifier que c'est la première version.
Si aucun problème n'est survenu, un message similaire à :
No conflicts created by this import devrait être affiché dans la console.
Checkout
De retour dans le répertoire de l'usager nous allons prendre les
sources du serveur et les transférer dans son répertoire. L'usager
travaillera donc toujours en local sur les fichiers au lieu d'utiliser
directement les fichiers sur le serveur. Si le répertoire de source de
qemu était au départ dans ce répertoire, effacez-le.
ing@ti-engetud-pc:~> cvs checkout qemu
Cette commande copie les sources du projet qemu du repository
spécifié dans la variable d'environnement mentionné plutôt dans le
répertoire courant. Il est possible d'utiliser la compression, il suffit
d'ajouter z et un chiffre.
ing@ti-engetud-pc:~> cvs -z4 checkout qemu
Dans chaque répertoire se trouvant dans les sources, un répertoire nommé CVS est créé. Ne touchez pas à ce
répertoire, il est utilisé par CVS.
Diff et update
Si plusieurs personnes ont accès au source, il est possible que
depuis que vous avez pris les sources que certain fichier est été
modifié. Nous allons maintenant vérifier si les fichiers local sont à
jour par rapport au serveur.
ing@ti-engetud-pc:~> cvs diff -D now qemu
Si les fichiers étaient déjà à jour, vous devriez avoir un message similaire à:
cvs diff: Diffing qemu
cvs diff: Diffing qemu/hw
cvs diff: Diffing qemu/linux-user
cvs diff: Diffing qemu/linux-user/arm
cvs diff: Diffing qemu/linux-user/i386
cvs diff: Diffing qemu/linux-user/ppc
cvs diff: Diffing qemu/linux-user/sparc
cvs diff: Diffing qemu/pc-bios
cvs diff: Diffing qemu/slirp
cvs diff: Diffing qemu/target-arm
cvs diff: Diffing qemu/target-arm/nwfpe
cvs diff: Diffing qemu/target-i386
cvs diff: Diffing qemu/target-ppc
cvs diff: Diffing qemu/target-sparc
cvs diff: Diffing qemu/tests
Nous effaçons le répertoire target-ppc et le fichier ppc.ld sur le
serveur. Si vous regardez sur le serveur, ppc.ld a été modifié en
ppc.ld,v.
ing@ti-engetud-pc:~> cvs diff -D now qemu
cvs diff: Diffing qemu
cvs diff: Diffing qemu/hw
cvs diff: Diffing qemu/linux-user
cvs diff: Diffing qemu/linux-user/arm
cvs diff: Diffing qemu/linux-user/i386
cvs diff: Diffing qemu/linux-user/ppc
cvs diff: Diffing qemu/linux-user/sparc
cvs diff: Diffing qemu/pc-bios
cvs diff: Diffing qemu/slirp
cvs diff: Diffing qemu/target-arm
cvs diff: Diffing qemu/target-arm/nwfpe
cvs diff: Diffing qemu/target-i386
cvs diff: Diffing qemu/target-ppc
cvs diff: cannot open directory /opt/cvsroot/qemu/target-ppc: No such file or directory
cvs diff: skipping directory qemu/target-ppc
cvs diff: Diffing qemu/target-sparc
cvs diff: Diffing qemu/tests
Le répertoire target-ppc n'est pas effacé sur le poste local. CVS ne
prend pas en compte les répertoires. Rien n'avise qu'un fichier a été
effacé.
Nous allons maintenant voir ce qui arrive si un fichier a été mis à
jour sur le serveur. Nous imaginons ici qu'une autre personne a modifié
le fichier a.out.h.
Le début du fichier était:
/* a.out.h
Copyright 1997, 1998, 1999, 2001 Red Hat, Inc.
et est maintenant
/* a.out.h
Copyright 1997, 1998, 1999, 2001, 2004 Red Hat, Inc.
Nous allons voir maintenant voir la différence entre les deux fichiers.
ing@ti-engetud-pc:~> cvs diff -D now qemu
cvs diff: Diffing qemu
Index: qemu/a.out.h
===================================================================
RCS file: /opt/cvsroot/qemu/a.out.h,v
retrieving revision 1.2
retrieving revision 1.1.1.1
diff -r1.2 -r1.1.1.1
3c3
< Copyright 1997, 1998, 1999, 2001, 2004 Red Hat, Inc.
---
> Copyright 1997, 1998, 1999, 2001 Red Hat, Inc.
cvs diff: cannot find revision control file for qemu/ppc.ld
cvs diff: Diffing qemu/hw
cvs diff: Diffing qemu/linux-user
cvs diff: Diffing qemu/linux-user/arm
cvs diff: Diffing qemu/linux-user/i386
cvs diff: Diffing qemu/linux-user/ppc
cvs diff: Diffing qemu/linux-user/sparc
cvs diff: Diffing qemu/pc-bios
cvs diff: Diffing qemu/slirp
cvs diff: Diffing qemu/target-arm
cvs diff: Diffing qemu/target-arm/nwfpe
cvs diff: Diffing qemu/target-i386
cvs diff: Diffing qemu/target-ppc
cvs diff: cannot open directory /opt/cvsroot/qemu/target-ppc: No such file or directory
cvs diff: skipping directory qemu/target-ppc
cvs diff: Diffing qemu/target-sparc
cvs diff: Diffing qemu/tests
CVS nous indique à l'aide du mot index, le fichier qui a été modifié.
Les changements entre notre version et celle disponible sur le serveur
sont aussi affichés.
La commande diff nous a indiqué qu'il y avait un fichier plus récent sur le serveur. Nous allons effectuer la mise à jour.
ing@ti-engetud-pc:~>cvs update qemu
cvs update: Updating qemu
P qemu/a.out.h
cvs update: qemu/ppc.ld is no longer in the repository
cvs update: Updating qemu/hw
cvs update: Updating qemu/linux-user
cvs update: Updating qemu/linux-user/arm
cvs update: Updating qemu/linux-user/i386
cvs update: Updating qemu/linux-user/ppc
cvs update: Updating qemu/linux-user/sparc
cvs update: Updating qemu/pc-bios
cvs update: Updating qemu/slirp
cvs update: Updating qemu/target-arm
cvs update: Updating qemu/target-arm/nwfpe
cvs update: Updating qemu/target-i386
cvs update: Updating qemu/target-ppc
cvs update: cannot open directory /opt/cvsroot/qemu/target-ppc: No such file or directory
cvs update: skipping directory qemu/target-ppc
cvs update: Updating qemu/target-sparc
cvs update: Updating qemu/tests
Le fichier a.out.h local a été mis à jour.
Suppression
Dans le répertoire de qemu local, nous effaçons le fichier sparc.ld Ensuite ce changement va être apporté au serveur cvs.
ing@ti-engetud-pc:~/qemu> cvs remove sparc.ld
cvs remove: scheduling `sparc.ld' for removal
cvs remove: use 'cvs commit' to remove this file permanently
Lors du prochain commit, le fichier sparc.ld sera effacé sur le serveur.
Ajout
Créons un fichier info.txt en local. Son contenu sera: ceci est un test. Nous allons maintenant l'ajouter au serveur cvs.
ing@ti-engetud-pc:~/qemu> cvs add info.txt
cvs add: scheduling file `info.txt' for addition
cvs add: use 'cvs commit' to add this file permanently
Commit
La commande commit doit être effectuée afin que les changements soient apportés au serveur.
ing@ti-engetud-pc:~> cvs commit qemu
cvs commit: Examining qemu
cvs commit: Examining qemu/hw
cvs commit: Examining qemu/linux-user
cvs commit: Examining qemu/linux-user/arm
cvs commit: Examining qemu/linux-user/i386
cvs commit: Examining qemu/linux-user/ppc
cvs commit: Examining qemu/linux-user/sparc
cvs commit: Examining qemu/pc-bios
cvs commit: Examining qemu/slirp
cvs commit: Examining qemu/target-arm
cvs commit: Examining qemu/target-arm/nwfpe
cvs commit: Examining qemu/target-i386
cvs commit: Examining qemu/target-ppc
cvs commit: Examining qemu/target-sparc
cvs commit: Examining qemu/tests
Log message unchanged or not specified
a)bort, c)ontinue, e)dit, !)reuse this message unchanged for remaining dirs
Action: (continue)
RCS file: /opt/cvsroot/qemu/info.txt,v
done
Checking in qemu/info.txt;
/opt/cvsroot/qemu/info.txt,v > info.txt
initial revision: 1.1
done
Removing qemu/sparc.ld;
/opt/cvsroot/qemu/sparc.ld,v >-- sparc.ld
new revision: delete; previous revision: 1.1.1.1
done
Noter la présence au début des commandes abort, continue, edit...
Nous allons effectuer la commande par défaut: continue. L'ajout du
fichier info.txt et la suppression du fichier sparc.ld à été faite.
Gestion des révisions
Les différentes versions de logiciel sont notées par un chiffre.
Certaines versions peuvent être plus significatives que d'autre. Un nom
peut leur être attribué avec cvs. On appose une étiquette au projet.
ing@ti-engetud-pc:~> cvs rtag pre_alpha qemu
cvs rtag: Tagging qemu
cvs rtag: Tagging qemu/hw
cvs rtag: Tagging qemu/linux-user
cvs rtag: Tagging qemu/linux-user/arm
cvs rtag: Tagging qemu/linux-user/i386
cvs rtag: Tagging qemu/linux-user/ppc
cvs rtag: Tagging qemu/linux-user/sparc
cvs rtag: Tagging qemu/pc-bios
cvs rtag: Tagging qemu/slirp
cvs rtag: Tagging qemu/target-arm
cvs rtag: Tagging qemu/target-arm/nwfpe
cvs rtag: Tagging qemu/target-i386
cvs rtag: Tagging qemu/target-sparc
cvs rtag: Tagging qemu/tests
L'arborescence de qemu va être recréée en local. Nous allons mettre cette version nommée pre_alpha dans un nouveau répertoire.
ing@ti-engetud-pc:~> mkdir tmp
ing@ti-engetud-pc:~> cd tmp
ing2@ti-engetud-pc:~/tmp> cvs export -r pre_alpha qemu
Cette version est maintenant appelée pre_alpha.
Nous pouvons par exemple voir les changements qu'il y a avec cette version et celle du serveur.
ing@ti-engetud-pc:~> cvs diff -r pre_alpha qemu
Nettoyer
Il est possible d'enlever ce que nous avons fait en local et de mettre à jour les fichiers du serveur si nécessaire.
ing@ti-engetud-pc:~>cvs release -d qemu
Ignorer des types de fichiers
CVS ignore les fichiers ayant l'extention .old, .bak, .obj...
Il est possible d'ajouter d'autre type de fichier. Il suffit de créer un
fichier .cvsignore dans le répertoire racine de l'usager
*.bat
!.bak
Les fichiers de type bat ne sont plus pris en compte, mais les fichiers de type bak sont maintenant pris en compte.
CHANGEMENT
Il est possible de voir les différents changements apportés à un
fichier. Nous voyons ci-dessous différentes informations à propos d'un
fichier. La date, version et auteur qui a apporté un changement. Chaque
fois qu'un commit est faite, une autre révision du fichier est faite.
ing@ti-engetud-pc:~/qemu> cvs log oss.c
RCS file: /opt/cvsroot/qemu/oss.c,v
Working file: oss.c
head: 1.1
branch: 1.1.1
locks: strict
access list:
symbolic names:
pre_alpha: 1.1.1.1
start: 1.1.1.1
GY: 1.1.1
keyword substitution: kv
total revisions: 2; selected revisions: 2
description:
----------------------------
revision 1.1
date: 2004/10/07 15:15:40; author: engcoop2; state: Exp;
branches: 1.1.1;
Initial revision
----------------------------
revision 1.1.1.1
date: 2004/10/07 15:15:40; author: engcoop2; state: Exp; lines: +0 -0
CONFLITS
Lorsque plusieurs personnes ont accès à un projet sur un serveur cvs,
il peut survenir des conflits. Il suffit d'imaginer que deux ou
plusieurs personnes modifient le même fichier. CVS va joindre les
changements ensemble. Si c'est les mêmes lignes qui ont été modifiées,
cvs demandera de résoudre ce conflit. Ce type de problème n'est
heureusement pas courant.
Nous avons vu rapidement comment n'ont pas été abordé. Néanmoins, les
commandes montrées vous permettent aisément de gérer vos sources et de
participer à des projets sur le Web.