Petit guide de survie CVS
Ce petit document est un résumé des principales commandes à connaître pour utiliser CVS. Nous ne parlons pas des tags, des branches, etc.
Nous supposons que :
- vous disposez d'un projet pré-existant dans
/home/user/preprojet
; - ce projet s'appelle(ra)
monprojet
; - votre login est
monlogin
; - le dépôt central (le repository) est ou sera dans
/home/monlogin/cvs-repository
(sur la machinerepos.domain.fr
).
Pour tous les projets
Création et initialisation du repository
mkdir /home/monlogin/cvs-repository cvs -d /home/monlogin/cvs-repository init
Import (ou création) d'un nouveau projet
Import d'une arborescence existante (module
monprojet
)cd /home/monlogin/preprojet cvs -d /home/monlogin/cvs-repository import \ -m "Version de depart" monprojet monlogin init cd ..
Pour créer un nouveau projet, il suffit d'importer un répertoire vide...
Extraction d'un projet
Extraire l'arborescence d'un module (monprojet). Ces commandes créeront un nouveau répertoire contenant le projet extrait.
Accès local au repository (directement via le filesystem)
cvs -d /home/monlogin/cvs-repository checkout monprojet
Accès distant au repository (via SSH)
setenv CVS_RSH SSH # pas toujours necessaire cvs -d monlogin@repos.domain.fr:/home/monlogin/cvs-repository \ checkout monprojet
Gestion d'un projet au jour le jour
Voir l'état des fichiers :
cvs status . cvs status nomdefichier
Les différents états d'un fichier :
- Up-to-date - Le fichier est à jour.
- Locally Modified - Le fichier a été modifié
localement et se base sur la dernière version de référence. Vous
pouvez intégrer vos modifications loacales via
commit
. - Needs Checkout ou Needs
Patch - Le fichier du repository est plus récent que la
version locale. Il faut le mettre à jour via
update
. - Needs Merge - Le fichier a été modifié
localement mais en se basant sur une version qui n'est pas la
plus récente. Vous devez essayer d'intégrer la nouvelle version
avec vos modifications via
update
- File had conflicts on merge - Le fichier
contient des conflits entre les modifications locales et les
modifications du repository (chercher du texte entouré par
<<<<<
...>>>>>
dans le fichier). Il faut les nettoyer et refaire la mise à jour viaupdate
- Locally Added - Le fichier vient d'être ajouté
localement et n'a pas encore été intégrer au repository via
commit
Voir les différences entre la version locale et la version de référence du repository :
cvs diff nomdefichier cvs diff -w -c nomdefichier
Intégrer les modifications locales vers le repository
cvs commit -m "message de mise à jour" nomdefichier ...
Voir les différencess entre la version locale et une ancienne version (par exemple 1.1) du repository :
cvs diff -r 1.1 nomdefichier
Voir les messages de mise à jour :
cvs log nomdefichier
Intégrer les modifications du repository vers la version locale :
cvs update -d nomdefichier
(à faire deux fois si conflits... à résoudre entre les deux fois.)
Ajout d'un nouveau fichier :
cvs add nomdefichier cvs commit -m "nouveau fichier" nomdefichier
Pour récupérer (créer) un nouveau fichier (ou un fichier qui a été supprimé localement) depuis le repository :
cvs udpate nomdefichier
Si
nomdefichier
est le nom d'un répertoire (.
par exemple), cela met à jour l'ensemble du répertoire et de ses sous-répertoires.Pour supprimer un fichier (du repository) :
rm nomdefichier cvs remove nomdefichier cvs commit -m "suppression fichier" nomdefichier
Quelques conseils généraux
A priori, on ne touche jamais ni au contenu du repository ni au
contenu des répertoires CVS locaux. Les seuls modifications qu'on
peut faire sur le repository ont rapport aux droits d'accès :
on peut donner accès en lecture/écriture à un sous-répertoire à
tout un groupe d'utilisateur pour que chacun puisse y faire ses
propres modifications (ne pas oublier de positionner le bit
's
').
On peut utiliser les commandes d'ajout et de suppression sur des sous-répertoires pour gérer toute une arborescence.
CVS ne gère pas les changements de noms : il faut faire une copie, la suppression de l'originale puis l'ajout de la copie (mais CVS ne fait aucun lien entre l'originale et la copie). Pour éviter cela, choisissez les noms de vos fichiers et l'organisation de votre arborescence avec soin.