CVS est un outil permettant à plusieurs personnes de travailler sur un projet commun, de développement, mais pourquoi pas de documentation. Vous disposez alors sur votre propre machine d'une copie de l'arborescence de développement, et lorsque vous le souhaitez vous pouvez proposer une mise à jour ou un développement nouveau après avoir rapatrié la dernière version depuis le serveur CVS. CVS gérera alors les différences et gardera un historique de l'ensemble du projet. En aucun cas vous ne pouvez effacer un fichier, vous pouvez aussi remonter à chaque version de votre développement, ainsi si vous constatez une mauvaise direction vous pouvez revenir à la version antérieure.
Dans le cadre éducatif quel
est le but d'un serveur CVS, et que peut on en faire ?
D'abord pour vous aider à développer des produits, et permettre à d'autres de
ne pas réinventer la roue à chaque fois. Les projets communs sont souvent les
plus complets et les mieux faits.
Par exemple, vous souhaitez développer en PHP la gestion des notes ou la
gestion des salles ou même un outil de travail collaboratif. Le travail est
important, il a plus de chance d'aboutir à plusieurs que seul.
Ensuite pour permettre éventuellement aux élèves des classes informatiques de
voir un outils de travail qui exige une certaine rigueur et permet de
travailler sur un projet commun. N'est ce pas d'actualité...!?
Suivant la situation, il vous
faut le client (dans tous les cas) et éventuellement le serveur (si vous
souhaitez en avoir un pour vous même sur votre machine en local).
Se pose encore à vous l'OS que vous utilisez :
Pour Linux ou BSD le client (en ligne de commande) a une forte chance de se
trouver déjà sur votre machine (tapez CVS pour voir). Sinon on trouve les
sources sur le CD de votre distribution, on trouve aussi des clients
graphiques, mais je ne les utilise pas. Pour la partie "serveur" il
n'existe pas vraiment des choses en plus, Il vous faut simplement
utiliser TCP_Wrappers ou SSH, si la machine est une machine distante, sinon (en
local sur votre propre machine) il vous faut simplement créer et initialiser le
dépôt.
Pour windows il existe plusieurs solutions clientes qui sont wincvs (le plus
complet) et un assez simple tortoiseCVS qui se place dans l'explorer. Il semble qu'il
existe aussi un serveur CVS pour NT, mais je ne le connais pas.
Enfin un outils bien pratique webcvs, permet de voir l'ensemble de votre
développement, de voir les modifications avec des différences de couleurs. Cet
outil étant une interface web, vous devez avoir un serveur apache d'installé.
Avant de commencer il vous
faut comprendre le principe de fonctionnement.
Vous devez avoir un serveur sur lequel vous avez créé un dépôt (repository). La
première fois vous "envoyez" votre premier développement qui se
trouve en local sur votre machine au serveur (import).
Puis vous devez faire un "checkout" pour redescendre la version qui
se trouve sur le serveur, sur votre machine, dans votre répertoire de
développement, vous allez alors avoir un répertoire CVS, qu'il ne faut pas
modifier. Ce répertoire est utilisé par cvs pour comparer ce qui est sur le
serveur et ce qui est sur votre machine.
Par la suite si vous êtes le seul à travailler sur le serveur vous devez
utiliser des "commit" pour faire les mises à jour, et éventuellement
des "add" pour ajouter des nouveaux fichiers, ou
répertoires.
Par contre si vous êtes plusieurs à travailler sur votre projet, cela demande
un peu plus de rigueur, à savoir à chaque fois que vous modifiez des choses sur
le projet, vous devez d'abord vérifier que quelqu'un n'est pas passé avant vous
et que le fichier que vous venez de modifier n'a pas déjà été modifié. Par
précaution faites un "co" ou "checkout" avant sinon vous
risquez d'avoir un problème que CVS vous indiquera au moment du
"commit".
Enfin au moment ou vous pensez que votre développement est stable vous le
"taguez" de façon à pouvoir le retrouver par la suite sous un nom
plus parlant et surtout de pouvoir retrouver l'ensemble des scripts
correspondants à ce tag, même si par la suite l'ensemble du projet continue à
évoluer.
Vous pouvez par la suite retrouver les différentes versions de chaque fichier
de votre projet et de voir les différences apportées "diff",
"log", "status".
5 Configuration de la partie serveur
Il n'y a pas grand chose à
faire.
- Créez le dépôt (repository), l'endroit ou CVS va placer les sources et les
mises à jour, par exemple dans le répertoire /home on crée un répertoire cvs (mkdir /home/cvs).
CVS ne recrée pas de nouveaux fichiers à chaque mise à jour, il crée seulement
la différence, ce qui implique qu'il n'a pas besoin d'un grand espace. Vous ne
devez jamais intervenir dans ce répertoire, autrement qu'avec le client CVS.
- Initialisez le dépôt cvs -d
/home/cvs init (cela
est fait une bonne fois pour toute).
- Voilà vous avez terminé. Dans le répertoire /home/cvs vous avez un répertoire
CVSROOT. Encore une fois vous ne devez jamais intervenir dedans... j'ai bien
dis JAMAIS.
- Pour éviter d'avoir à réécrire à chaque fois -d /home/cvs céez une variable d'environnement,
sur votre machine cliente, pour indiquer à CVS ou se trouve le dépôt
export CVSROOT='/home/cvs'.
Se pose à vous maintenant l'usage que vous allez faire de ce serveur. Est-il
pour vous seulement, sur votre propre machine sans accès distant ou doit il
être ouvert à d'autres.
5.2 Utilisation en
local sans accès distant
5.2.1 Placer dans le dépôt votre travail
- Copier dans le dépôt votre travail (Je suppose ici que vous avez déjà créé
des petites choses). Placer vous dans le répertoire de développement local et
faites (je suppose ici que vous avez créé la variable d'environnement, sinon
ajouter -d /home/cvs) :
cvs import -m "Ma
première version" /home/cvs/mon_developpement moi version_1
- m "Ma première version" permet d'indiquer un commentaire, si vous ne
le faites pas ici CVS va ouvrir l'éditeur VI (VI est utilisé par défaut mais
vous pouvez spécifier un autre éditeur avec la variable CVSEDITOR).
- /home/cvs/mon_developpement
est le nom de la branche de votre premier développement.
- moi est le
nom du fabricant, donc mettez le votre.
- version_1
la première version de votre développement (le premier tag).
5.2.2 Simplifiez vous la vie
- On peut ici donner un nom à son projet (module) de façon à ne pas avoir
à chaque fois à l'appeler avec son chemin (répertoire). Pour cela il faut aller
dans un répertoire quelconque et faire un cvs checkout CVSROOT. Vous allez alors copier
sur "votre machine" le répertoire "d'administration de CVS"
(On utilise ici le sens votre machine bien que vous travaillez déjà dessus pour
différencier la notion de serveur CVS et de client CVS). Vous avez alors les
fichiers de paramétrage de CVS dans votre répertoire temporaire. Dans le
fichier modules ajouter PHP /home/cvs/mon_developpement sauvegardez.
Puis faire cvs commit -m
"Ajout du module PHP" PHP. Attention on ne peut pas
faire un commit en tant que root, il faut donc avoir donner les droits
nécessaires sur le répertoire à l'utilisateur qui "commit"....mais
vous ne travaillez jamais comme root sur votre machine..:)
L'avantage est que maintenant vous n'avez plus à donner le chemin, mais
simplement d'indiquer le nom du module, à savoir PHP (Pas une bonne idée comme
nom de module, car on a vite fait de développer de nouvelles applications en
PHP).
5.2.3 Commencer à développer
- A partir d'ici vous avez placé dans CVS votre première version, mais bien
sur, vous continuez à développer et vous apporter des changements dans
vos scripts, vous avez des nouveaux fichiers, répertoires et vous devez en
détruire.
- Vous devez d'abord recharger la version que vous venez de placer sur CVS.
Pour cela il vous faut aller dans un répertoire ou vous avez l'habitude de
développer puis faire cvs
checkout PHP (On peut aussi faire cvs co PHP) pour récupérer
les sources de votre développement. (Comprenez moi bien, la première fois vous
envoyez un nouveau projet dans le dépôt de CVS, puis immédiatement vous devez
le faire redescendre sur votre machine afin de créer un répertoire CVS sur
votre machine locale dans le répertoire de travail, ceci afin de permettre à
CVS de gérer les différences entre votre travail en local et le dépôt du
serveur CVS).
- Faites vos modifications, ou même ajoutez des fichiers à votre travail,
lorsque vous pensez que cela est nécessaire vous allez les placer dans le
dépôt. Si le fichier existe déjà un simple commit suffit.
cvs commit -m
"Modification de la couleur" table.php (ce fichier
existe déjà dans CVS). Ou si vous avez modifié beaucoup de fichiers cvs commit - m "Modifications du
jour" (CVS est capable de trouver les fichiers modifiés
en local).
Par contre si vous souhaitez ajouter un fichier qui n'existe pas faites :
cvs
add -m "Nouveau fichier pour effacer" efface.php,
puis cvs commit -m
"fichier pour effacer" efface.php
- Détruire un fichier cela est plus compliqué, car on ne peut jamais détruire
un fichier dans CVS. Vous pouvez toujours faire un remove (cvs remove
fichier.php), mais ce fichier existera toujours sur le serveur CVS....mais
n'est ce pas le but de CVS (On peut le détruire complètement mais cela n'est pas
le but de cette documentation). Attention pour faire un remove d'un
fichier il faut que celui-ci n'existe plus dans votre répertoire de travail,
enfin pensez à faire un commit.
Je vous laisse le soin de regarder l'ensemble des commandes pour voir ce qu'il
est possible de faire.
- A partir de là vous avez
l'ensemble de votre projet sur CVS. Ce qui compte maintenant pour vous est
comment je peux voir les différences entre mes mises à jour, à quel moment une
version de mon projet est stable. CVS gère pour vous les numéros de versions.
Tous les fichiers n'ont pas obligatoirement un numéro de version identique,
certains fichiers ont pu être modifiés de nombreuses fois pas d'autres, hors
CVS incrémente à chaque commit votre numéro de version. Si à un moment de votre
développement vous considérez que votre travail est stable vous pouvez le
"taguer". Cela permettant de pouvoir retrouver l'ensemble de fichiers
correspondant à ce tag. Pour taguer cvs
tag stable_1. Ainsi par le suite vous pouvez retrouver
l'ensemble de vos fichiers par un simple cvs co -r stable_1 PHP (si vous n'avez aucune
version, ou si vous souhaitez la placer dans un autre répertoire local) ou cvs
update -r PHP si
vous souhaitez écraser la version que vous avez.
5.3 Vous souhaitez pouvoir utiliser CVS depuis d'autres machines et permettre à
d'autres de l'utiliser.
Il y a plusieurs solutions pour faire cela, en utilisant rsh et
pserver. Je ne commente ici que pserver.
5.3.1 Vous devez
d'abord configurer Inetd.conf.
On suppose ici connu la notion de droits et de TCP_Wrappers sous Linux.
Vous devez placer dans le fichier /etc/inetd.conf la ligne suivante (si elle
n'est pas déjà là)
cvspserver stream tcp nowait
root /usr/bin/cvs cvs -f --allow-root=/home/cvs/mon_developpement/depot pserver
Ne pas oublier ici de relancer inetd (ou simplement de le forcer à relire son
fichier killall -HUP inetd). Pensez aussi à vérifier les fichiers
hosts.allow et hosts.deny.
/usr/bin/cvs
indique l'endroit ou se trouve l'exécutable cvs.
--allow-root=/home/cvs
indique l'endroit ou se trouve le dépôt.
-f permet de
ne pas charger le fichier ~/.cvsrc (ce fichier permet de spécifier des
arguments aux commandes CVS sans être obligé de les saisir à chaque fois).
Éventuellement il vous faut ajouter dans le fichier /etc/services la ligne
cvspserver 2401/tcp (je dis éventuellement parce qu'il y a de
fortes chances qu'il y soit déjà).
Si vous le souhaitez vous pouvez ajouter plusieurs lignes au fichier inetd.conf,
afin de gérer plusieurs dépôts.
5.3.2 Créer un
utilisateur et se connecter.
Il vous faut créer ici les logins pour permettre la connexion. Pour cela
j'utilise htpasswd du serveur Apache. Placez vous dans le répertoire
/home/cvs/CVSROOT et créez le fichier passwd (attention cela est une exception,
vous ne devez jamais créer directement dans ce répertoire vous devez toujours
passer par les commandes de CVS).
htpasswd -c passwd
nom_de_login. Il vous demande alors de donner un mot de
passe. Vous êtes ici dans le même cas que pour Apache, le fichier passwd à des
entrées de type login:mot_de_passe_crypté.
Pour ajouter d'autres personnes faites la même commande sans -c.
Pour accéder alors au serveur CVS la commande est
cvs -d :pserver:mon_login@cvs.ac-creteil.fr:/home/cvs login
Il vous demande alors le mot de passe qui vous a été donné par
l'administrateur du serveur CVS. Par la suite les commandes sont identiques,
sauf que vous devez donner la syntaxe un peu longue du dessus par exemple pour
un commit
cvs -d
:pserver:mon_login@cvs.ac-creteil.fr:/home/cvs commit -m "Pour
l'exemple" index.php
Pour éviter cela vous devez ajouter une variable d'environnement du type
export CVSROOT='pserver:mon_login@cvs.ac-creteil.fr:/home/cvs'
et cela sur la machine du réseau depuis laquelle vous vous connectez. Vous
n'avez plus qu'à faire un cvs
login.
A partir de là vous avez permis à d'autres de travailler sur votre projet. Cela
implique quelques règles, à savoir vous n'êtes plus le seul à modifier votre
projet, il vous faut donc prendre soin de faire un update avant de retravailler
dessus afin de tenir compte des modifications apportées par les autres. Il se
peut toutefois qu'une nuit venue par un grand froid, vous décidiez de modifier
la même page. Au moment du premier "commit" il ne va pas y avoir de
problème, mais la deuxième personne qui va vouloir faire un commit va avoir un
problème. CVS est en mesure de traiter le problème, ou alors de vous demander
de le traiter à la main (en fait au téléphone pour trouver un compromis entre
les deux).
5.3.3 Gérer les droits
Jusque là on a considéré qu'il n'y avait qu'un seul utilisateur. Cet
utilisateur doit posséder un droit en lecture écriture sur le dépôt (car cvs
a besoin d'écrire des locks).
Si vous
avez à gérer plusieurs utilisateurs, il vous faut créer un compte système par
utilisateur (utilisez aussi les groupes), ce qui n'est pas très pratique. On
peut donc soit utiliser des comptes linux, soit utiliser un
mécanisme propre à CVS.
CVS offre une solution qui
consiste à modifier le fichier passwd avec VI par exemple, en transformant les
lignes de la façon suivante :
mon_login:mot_de_passe:compte_systeme
pour chaque compte que vous souhaitez créer. Vous n'avez alors besoin que d'un
compte système pour l'ensemble de vos comptes cvs. Vous devez penser alors à donner les
droits au compte "compte_systeme" sur le dépôt. Vous devez donner à
ce compte système les droits : lecture, écriture et exécuter, car cvs à besoin
de créer des "lock" pour interdire l'accès simultané. Cela pose un
petit problème puisque tous les utilisateurs doivent avoir un droit lecture
écriture. Il existe une solution qui consiste à déplacer hors du dépôt le
"lock", vous devez pour cela configurer le fichier config
qui se trouve dans CVSROOT.
Pour pouvoir ne donner que des droits de lecture, vous devez passer pas pserver.
Pour cela vous devez créer dans le dépôt (pas directement mais en utilisant
cvs) les fichiers readers ou/et writers, avec dedans un "mon_login"
par ligne.
CVS procède de la façon suivante :
Si l'utilisateur existe dans le fichier passwd et si son mot de passe est
correct, alors si le fichier readers
existe et si l'utilisateur est dedans il a un accès en lecture seul, de même si
le fichier writers
existe et qu'il n'est pas dedans il a toujours un accès en lecture seul, si le
fichier writers
existe avec l'utilisateur dedans il a alors le droit lecture-écriture. Vous
devez lire cela comme le plus restrictif s'applique, donc si vous êtes dans readers et dans writers vous n'avez qu'un
droit de lecture. Si aucun des deux fichiers n'existent vous avez aussi un
droit lecture - écriture.
Comment procéder :
Commencer par rapatrier le répertoire CVSROOT en local cvs -d /home/cvs co CVSROOT
Puis dans le répertoire rapatrié créer le fichier writers touch writers
Ajouter l'utilisateur avec son nom de login cvs, dans ce fichier (Il doit
exister dans le fichier passwd)
puis ajouter le dans le dépôt cvs
add writers suivi d'un cvs commit. Comme le fichier writers
existe, seul l'utilisateur se trouvant dedans pourra écrire dans le dépôt. Si
vous n'avez pas mis d'utilisateur alors personne ne pourra écrire.
Je ne traite pas ici la possibilité de déléguer le droit de créer des comptes sur le serveur CVS, par contre un besoin peut être de donner un droit anonymous afin de faire un checkout, il faut pour cela que la connexion soit sans mot de passe et en écriture seule. Ajouter le compte anonymous dans CVSROOT/passwd, puis ajouter un fichiers readers avec le nom (ou les noms) des utilisateurs anonymous qui n'ont que le droit de lecture.
5.3.4 Les fichiers de CVSROOT
Le répertoire CVSROOT qui se
trouve dans le dépôt est créé avec la commande init. En fait vous installez
dans se répertoire un certain nombre de fichiers qui sont utilisés pas CVS
pour la configuration. Tous les fichiers ne sont pas créés par
l'initialisation. Il en existe en plus que vous devez ajouter. Vous ne pouvez
intervenir sur ces fichiers qu'avec les commandes CVS (sauf pour le fichier
passwd). Pour cela faites un checkout du répertoire CVSROOT (cvs checkout
CVSROOT) afin de l'avoir en local, faites vos modifications puis faites un
commit, afin que cela soit pris en compte pas le serveur.
checkoutlist | Liste des fichiers qui doivent se trouver dans le répertoire CVSROOT, mais qui n'y sont pas par défaut (exemple le fichier users). |
commitinfo | Permet de lancer des commandes avant d'archiver un fichier
(avec un commit). La syntaxe dans le fichier est la suivante : nom_du_répertoire commande_à_exécuter |
config | Permet de paramétrer certaines actions de CVS. LockDir indique l'endroit ou l'on stocke le fichier de lock. Cela évite en le changeant de place de donner des droits en écriture à tout le monde. PreservePermissions, n'est pas actif par défaut, cela ne fonctionne pas en mode client/serveur. Permet d'utiliser les fichiers particuliers. SystemAuth La valeur par défaut est yes, cela permet de valider l'utilisateur par le compte système, si l'utilisateur n'est pas présent dans le fichier passwd. TopLevelAdmin La valeur par défaut est yes. permet lorsque vous faites un checkout de placer le répertoire CVS au même niveau que le répertoire contenant le module. |
cvsignore | Permet d'exclure certain type de fichiers listés dans ce
fichier, par exemple .back .old.... Il est possible dans ajouter. |
cvswrappers | Permet de mettre en place des filtres pour les fichiers lorsqu'ils sont extraits (checkout, update) option -f, ou avant d'être archivés (commit ou import) option -t, ou permet de choisir la méthode de mise à jour : Merge ou Copie, par défaut la méthode est Merge (fusion) mais vous pouvez vouloir faire cela vous même en gardant une copie des deus versions, option -m "COPY" |
editinfo | Permet d'indiquer l'éditeur de texte utilisé. Cela pouvant être paramétré suivant le répertoire. La syntaxe est nom_du_répertoire editeur_a_utiliser |
history | Contient l'archivage des commandes checkout, commit, export, release, rtag et update. |
loginfo | Permet d'executer un certain nombre d'actions après une
commit Par exmple pour envoyer un messages CVSROOT /usr/bin/mail -s "$s" moi@ac-creteil.fr |
modules | Permet de donner des noms symboliques aux différentes hiérarchies de votre développement. Ainsi vous pouvez indiquer un alias, un chemin (l'utilisateur arrive alors directement au sous répertoire), une union entre plusieurs répertoires, permettant de les extraire d'un coup. On peut aussi indiquer des options, permettant de lancer des commandes. |
notify | Permet d'envoyer des messages lorsque est réalisé un add, edit ou watch |
passwd | Fichier à ajouter avec htpasswd par exemple et qui contient
la liste des utilisateurs de CVS. Le seul fichier que l'on doit ajouter
directement dans le répertoire. La syntaxe est Nom_de_connexion_cvs:mot_de_passe_crypté:compte_donnant_les_droits |
rcsinfo | Le fichier "rcsinfo" est utilisé pour indiquer les fichiers à insérer dans l'éditeur lorsque celui-ci est invoqué lors d'un commit ou d'un import. |
readers | Permet d'indiquer les personnes qui ne possèdent qu'un droit de lire dans le dépôt. L'utilisateur doit exister dans le fichier passwd. |
taginfo | Permet de lancer un script pour vérifier la syntaxe du nom utilisé pour le tag |
users | Ce fichier n'est pas créé à l'initialisation du dépôt. Il permet d'associer un E-mail à un nom de connexion. La syntaxe est login:E-mail |
val-tags | Fichier utilisé par CVS, non modifiable. |
verifymsg | Permet de lancer un script de vérification des commentaires passés avec des commit |
writers | Permet d'indiquer les utilisateurs qui ont un droit en écriture. Ce fichier est à utiliser avec le fichier readers |
6 Les commandes
6.1
Exemples des commandes les plus utilisées
- Si vous
n'avez pas créé une variable d'environnement pour CVSROOT, pensez à ajouter
-d /home/cvs (votre dépôt)
ou -d :pserver:login@serveur_cvs.fr:/home/cvs
Se loguer - déloguer |
|
cvs login |
Pour ce loguer sur le serveur cvs |
cvs logout |
Pour ce déloguer |
Initialiser le dépôt |
|
cvs init |
Pour initialiser le dépôt la première fois. Cette commande ne se fait qu'une fois, et doit être faites sur la machine qui gère le dépôt. |
Ajouter un nouveau projet |
|
cvs import -m "un nouveau travail" mon_projet fabriquant nom_du_tag |
Cette commande permet d'ajouter un nouveau projet en important un répertoire complet, mon_projet est le nom du module qui est pour le moment le répertoire, le fabriquant est plus flou, indiquer donc votre nom, et nom du tag est le premier tag qui vous permet de retrouver cette version à tout moment, même après les évolutions. |
Ajouter, supprimer un fichier - répertoire |
|
cvs add nouveau.php |
Cette commande permet d'ajouter un fichier ou un répertoire. Vous devez obligatoirement faire un commit après un add. Si vous n'ajoutez pas un -m "commentaire" vous allez lancer VI. |
cvs add -m "Commentaire" nouveau.php |
Idem avec le commentaire. |
cvs add un_repertoire |
Ajoute un répertoire, il faut faire un commit après |
cvs add -kb mon_fichier |
Permet d'ajouter un fichier dans le dépôt, sans que celui-ci soit pris en compte (historicisable) par cvs. |
cvs
remove detruire.php |
Pour enlever un fichier de votre "repository" ou dépôt. Ce fichier n'est jamais enlevé complètement il peut être rappelé à tout moment. Vous devez faire un commit pour que cela soit effectif. |
Commit |
|
cvs
commit |
Cette commande permet de soumettre une modification. Comme
cela elle "commit" l'ensemble des fichiers se trouvant sur votre
machine, et vérifie qu'il n'y a pas de conflit avec la version se trouvant
sur le serveur. |
cvs
commit index.php |
Vous ne soumettez que le fichier index.php (il ouvre VI pour permettre l'ajout d'un commentaire). |
cvs commit -m "Mise à jour d'index.php le 10 Juillet 2001" index.php |
Vous soumettez le fichier index.php, en donnant un commentaire, vi ne sera alors pas lancer (il faut que le commentaire ne dépasse pas une ligne sinon vous devez utiliser vi). |
cvs
commit -r 2.12 index.php |
Pour forcer un numéro de version. Il doit obligatoirement supérieur au numéro existant. |
Rapatrier des fichiers depuis le dépôt |
|
cvs checkout nom_du_module |
Pour récupérer en local l'ensemble du module "nom_du_module". Cela permet de créer le répertoire CVS sur votre espace de travail en local. Il est indispensable de le faire la première fois après un import. |
cvs checkout -r stable_1 nom_du_module |
Pour récupérer la version stable_1 du projet. Vous ne devez avoir aucune version sur votre machine ou alors vous devez l'avoir détruite. |
cvs update nom_du_module |
Pour mettre à jour en local ce qui se trouve sur le serveur lorsqu'il est utilisé par d'autres. Vous avez déjà une version du projet sur votre machine. |
cvs
update -r stable_1 |
Pour mettre à jour à partir de la version stable_1 qui a été "taguer" avec le nom stable_1. Vous possédez déjà un répertoire de travail sur votre machine. |
cvs export -r stable_1 nom_module |
Commande identique à checkout, mais permet de rapatrier sur
son disque dans un répertoire autre que votre répertoire de travail sans le
répertoire CVS. Avec les options -R (le tag) -d (la date) et le nom du
module. |
Taguer |
|
cvs tag stable_2 |
Lorsque vous considérez que votre travail est stable ou
mérite une attention particulière vous pouvez le "taguer" en lui
donnant un nom. |
cvs tag -d stable_1 mon_fichier |
Supprime un tag sur le fichier mon_fichier. On peut supprimer un tag sur un ensemble de fichier |
Voir ce qui a été fait |
|
cvs log |
Indique les logs sur les révisions, certaines options sont disponibles comme la date, le nom d'un fichier.... |
cvs log -wtoto -d ">01/11/2001" |
Affiche toutes les révisions depuis le 11 Janvier 2001 faites par l'utilisateur toto. |
cvs status |
Permet de connaître l'état d'un fichier. Vous pouvez savoir si votre fichier en local est à jour par rapport au dépôt. |
cvs diff mon_fichier |
Liste la différence entre la version local de "mon_fichier" et la version se trouvant sur le dépôt |
cvs diff -r 1.1 -r 1.4 mon_fichier |
Liste les différences entre deux révisions de "mon_fichier". |
cvs anotate mon_fichier |
Produit une vision chronologique des révisions |
cvs history |
Permet de voir l'historique des modifications |
cvs
history -a -xM '-D 3 days ago' |
Permet de voir l'ensemble des fichiers modifiés depuis 3 jours. |
6.2 Les options de la commande CVS
La commande CVS dispose d'options dont la plus utilisée est -d afin d'indiquer le chemin du dépôt. Elles se placent entre CVS et la commande (add, commit, ...etc).
-a | Permet de mettre en place pour le mode client serveur l'authentification. |
-b <chemin> | Cherche les commandes RCS dans <chemin> |
-d <chemin du dépôt> | Indique le chemin du dépôt. Peut être remplacé par la variable d'environnement $CVSROOT |
-e <Edituer> | Indique l'éditeur à utiliser (VI par défaut) |
-f | Permet de ne pas utiliser le fichier ~/.cvsrc. Cette option peut être donnée dans le fichier inetd.conf. cvsrc permet d'indiquer les options que l'on souhaite passer à chaque commande CVS effectuée. |
-H | Donne l'aide d'une sous commande |
-l | Désactive l'historique |
-n | Permet de passer des commandes sans quelles ne s'appliquent. |
-q | Presque pas de bruit |
-Q | Pas de bruit |
-r | Permet de n'avoir que les fichiers en lecture seul |
-s VAR=<Variable> | Indique la variable utilisateur VAR |
-T <Répertoire> | Indique le répertoire temporaire |
-t | Affiche une trace de l'exécution d'un programme |
-v | Affiche la version du fichier |
-w | Permet d'extraire les fichiers en lecture écriture. Cette option est l'option par défaut. |
-x | Permet de chiffrer les données |
-z <1 à 9> | Indique le niveau de compression |
7 Cas particuliers
7.1 Effacer un répertoire
Pour supprimer un répertoire, il faut commencer par le supprimer du
répertoire local (rm
répertoire), puis le supprimer dans le dépôt (cvs release -r répertoire)
et enfin le supprimer sur les répertoires de tous les utilisateurs (cvs update -P).
7.2 Renommer un fichier
Cela n'est pas vraiment prévu sous cvs. La solution possible est de le
renommer en local (mv
mon_fichier new_mon_fichier), puis de le supprimer dans le
dépôt (cvs remove mon_fichier),
de remettre le nouveau (cvs
add new_mon_fichier), puis un commit (cvs commit -m "nouveau nom"
new_mon_fichier).
7.3 Restaurer un fichier effacé
On récupère en local la dernière version du fichier (cvs update -r 1.1 mon_fichier_efface),
puis on ajoute au dépôt (cvs
add mon_fichier_efface), puis un commit (cvs commit -m "le revoilà"
mon_fichier_efface).
8 Messages
Lorsque vous ajoutez un fichier,
ou que vous faites un Checkout vous avez des messages
U Nom_du_fichier |
Updates |
Récupération de la dernière version du fichier. |
P Nom_du_fichier |
Patched |
Mise à jour de la dernière version du fichier |
M Nom_du_fichier |
Modified |
Vous avez modifiez le fichier |
C Nom_du_fichier |
Conflict |
Le fichier a déjà été commité. |
T Nom_du_fichier |
Tagged |
Le fichier vient d'être tagué |
? Nom_du_fichier |
Unknown |
Le fichier est inconnu |
9 Les branches
Le principe est assez simple, vous
avez développé un programme et vous l'avez fait évoluer dans une version
1.xx.. Problème vous avez passé votre développement à votre voisin qui
refuse de faire une mise à jour. L'évolution que vous avez fait prendre à votre
développement demande plus de mémoire et il refuse d'en remettre dans sa
machine, en plus les options que vous avez ajouté ne lui servent pas. Et oh
malheur, il découvre un bug. Vous devez alors revenir en arrière pour modifier
cette ancienne version. Vous devez donc à partir de la version qu'il a entre
les mains développer un correctif. Voilà rapidement exposé le problème. Les
branches permettent de faire évoluer le produit en parallèle sur les deux
versions.
Comment procéder :
On crée une nouvelle branche à partir de la version dont le tag est
version_1 cvs rtag -b -r version_1 version_1_1
On récupère cette branche cvs
update -r version_1_1 , on peut alors faire les modifications
pour corriger le bug.
On fait les modifications nécessaires et on commit la mise à jour : cvs commit -m "Anciennes modifs"
On revient à la version en cours : cvs update -A
On peut maintenant constater que cette mise à jour est aussi
nécessaire pour la version sur laquelle on travaille, il faut alors appliquer
cette modification en tenant compte que depuis la version_1 votre projet à
évoluer, il faut donc faire cvs
update -j version_1_1 mon_fichier
10 Les clients Linux
En plus de la ligne de commande qui me semble déjà bien pratique, sauf peut être pour voir les différences, mais alors on peut utiliser WebCVS, il existe une interface graphique sous KDE ou Gnome mais je ne connais pas bien. Vous essayez et vous me dites.
11 Les clients Windows
11.1 wincvs
Et oui depuis quelques temps on trouve des clients (gratuits) pour les
"windowseuries". Parmi les produits existants, le plus complet est WinCVS (http://www.cvsgui.org ). Pour le configurer
aller dans "admin" puis "préférences" vous avez alors la
fenêtre suivante qui s'ouvre. Il vous faut la remplir.
Puis toujours dans "admin" >> "login" pour vous connecter au serveur, il vous demande alors le mot de passe. J'ai eu des problèmes pour utiliser cette méthode, par contre en passant par la ligne de commande aucun problème. Cet outil est très complet, peut être trop.
11.2 Tortoise
Un autre produit (qui a ma préférence sous Windows) plus simple mais
suffisant pour passer toutes les commandes dont on a besoin (http://www.cvsgui.org/TortoiseCVS/index.html
). Il s'intègre à l'explorer et se place dans le menu du click droit de votre
souris. Il ne pose pas de problème à installer, mais par contre il est plus
délicat à désinstaller, cela n'étant pas prévu. Suivant l'endroit, sur un
fichier, un répertoire, sur un nouveau fichier ou un fichier déjà ajouté, le
menu s'enrichi de nouvelles commandes.
Vous devez commencer à le configurer pour indiquer le serveur, le chemin du
dépôt, le nom du module (attention ne nommé pas le répertoire local dans lequel
vous allez travailler CVS, ce nom étant réservé). Aller pour cela dans Make New
Module..
Vous obtenez alors, la boite suivante :
Une fois la configuration faite, vous pouvez faire un checkout pour rapatrier le module sur lequel vous souhaitez travailler. Vous obtenez une fenêtre presque identique avec en plus un onglet "Revision" qui vous permet de faire un checkout par nom de tag, branche, date.
Dans le répertoire que vous venez de rapatriez, si vous cliquez droit dessus vous allez avoir un nouveau menu permettant de faire des commit, tag, branche, update. Attention vous devez avoir dans ce répertoire un répertoire au nom de CVS à ne pas toucher.
WebLog vous permet de voir les logs, mais tortoise utilise ici WebCVS, vous devez donc lui indiquer ou se trouve l'interface WebCVS si elle existe. Merge vous permet de faire une fusion de deux répertoires ou fichiers. Cet outil est vraiment bien et suffisamment complet pour faire l'essentiel côté client.
12 WebCVS
Un cgi qui vous permet de
voir l'ensemble de votre dépôt via une interface web. Vous pouvez voir les
fichiers et leur différences avec un jeu de couleur. On ne peut pas faire des
mises à jour avec cet outil, mais cela permet de rendre vos
développements visibles à d'autres.
Vous pouvez vous le procurer à http://www.spaghetti-code.de/software/linux/cvsweb
on le trouve aussi sous forme de RPM.
Pour qu'il fonctionne vous devez avoir Apache, PERL, ainsi que rlog et rcsdiff
d'installés sur votre machine. Pour le configurer vous devez dans cvsweb.cgi
indiquer ou vous avez placé le fichier cvsweb.conf, puis dans cvsweb.conf
indiquer ou se trouve le dépôt de cvs sur votre machine. Il y a d'autres
petites choses à changer pour adapter l'interface et surtout penser à donner
les bons droits. Il faut que cvsweb.cgi puisse lire le dépôt donc avoir les
droits nécessaires.
Pour voir le résultat je vous propose http://cvs.ac-grenoble.fr
le serveur cvs de l'équipe de développement de SLIS.
13 En savoir plus
Vous trouverez sur les sites suivants un complément sur CVS. Cette documentation est loin d'en faire le tour.
www.cvshome.org
www.loria.fr/~molli/cvs-index.html
http://ganymede.ac-grenoble.fr/slis/devel/cvs-howto.html
© Philippe Chadefaux - 10/07/2001 -