Gérer ses sources avec CVS

Transcription

Gérer ses sources avec CVS
Gérer ses sources avec CVS
Matthieu Herrb
LAAS/CNRS
Version 1.6 - 11 mars 2001
Qu’est-ce que CVS ?
→ un système de contrôle de version pour :
• Garder une trace des modifications de fichiers
source.
• Travailler à plusieurs sur un projet.
Ce n’est pas un système de gestion de projet
Il ne gère pas :
• la compilation
• la documentation
• les bugs
• les tests
• les versions du projet
• les procédures d’installation.
1
Bibliographie
• K. Fogel Open Source Development with CVS
Coriolis inc. 1999. http://cvsbook.red-bean.com/
• G. N. Purdy CVS Pocket Reference O’Reilly. 2000.
• F. Lepied CVS Configuration et mise en œuvre
O’Reilly. 2000.
• http://www.cvshome.org/
2
Concepts de base (1)
• Dépot (repository )
Répertoire partagé par tous
Conserve l’historique des modifications
Géré avec RCS
• Module
Ensemble de fichiers sources ou de répertoires
constituant un projet.
• Révision
Chaque fichier a un numéro de révision unique.
3
Concepts de base (2)
• Branches
branche 1.2.1.1.1
branche 1.2.1
Tronc principal
branche 1.3.2
• Version du projet
6= révision d’un fichier !
4
Concepts de base (3)
• Tags
Marques symboliques sur une révision.
Permettent de définir les versions du projet.
Permettent de créer des branches.
• Mot-clé
Mot du type $clé$ remplacé par une valeur CVS.
5
Principales commandes (1)
• Extraire un module du dépot pour créer une copie
de travail :
cvs checkout module...
• Mettre à jour une copie de travail par rapport au
dépot :
cvs update [fichier...]
• Ajouter un nouveau fichier du répertoire courant
dans le dépot :
cvs add fichier...
• Supprimer un fichier (déja détruit) du dépot :
cvs remove fichier...
• Enregistrer les modifications des fichiers spécifiés
(nécessaire après add et remove) :
cvs commit [fichier...]
6
Principales commandes (2)
• Afficher l’historique de ce fichier :
cvs log [fichier...]
• Afficher l’état de ce fichier :
cvs status [fichier...]
• Afficher les différences avec le dépot :
cvs diff [options] [fichier...]
• Afficher les différences entre deux versions d’un
module :
cvs rdiff -r rev1 -r rev2 module...
Permet de produire des patches.
• Placer un tag sur la dernière révision des fichiers :
cvs tag tag [fichier...]
• Placer un tag sur un module :
cvs rtag tag module...
7
Exemple d’utilisation
Dépot
/usr/local/cvs_hilare2
src
graphique
comLib
checkout
modules
update
commit
/home/pierre/hilare2
/home/paul/hilare2
src
graphique
src
graphique
comLib
modules
Copie de travail
comLib
modules
Copie de travail
8
Démarrer un projet avec CVS
• Créer le dépot
mkdir /usr/local/projet/cvs
chgrp projet /usr/local/projet/cvs
chmod g+ws /usr/local/projet/cvs
setenv CVSROOT /usr/local/projet/cvs
cvs init
• Importer les sources
cd /home/matthieu/projet/src
cvs import -m ’initial import’ src LAAS V0
• Définir les modules
cvs checkout CVSROOT
cd CVSROOT
emacs modules
cvs commit modules
• Sortir les copies de travail
cd /home/matthieu/projet
mv src src.orig
cvs checkout src
rm -rf src.orig
9
Travailler à plusieurs
• Pas de verrou sur les sources.
Chacun a sa propre copie.
• Gestion des conflits:
– pas de commit possible sans update
– détection des conflits → résolution à la main
– pas de nouveau commit avant résolution du
conflit
• Dépot accessible en écriture aux membres d’un
groupe Unix
• Utilisation du serveur CVS pour accès par internet
Authentification par rsh, ssh, kerberos ou un mécanisme
interne à CVS.
• Envoi de messages automatique après modifs
par action définies dans CVSROOT/loginfo
10
Gestion des branches
Pour :
• corriger un problème sur une ancienne version
• développer 2 idées en parallèle
• gérer sa propre version d’un logiciel
• fusionner après une divergence.
11
Autres outils
• emacs et xemacs proposent le mode VC qui gère
CVS.
C-x v v exécute l’action CVS suivante
(update, commit, add).
Dans ${HOME}/.emacs pour ne pas gérer CVS:
(setq vc-handle-cvs nil)
• pcl-cvs : autre interface à CVS pour emacs.
• Il existe une GUI en tk (?).
• L’extension rcs : inclure les mots-clés dans un
document LATEX.
12
Conclusion : Stratégies
• Attention à l’organisation du projet :
Structurer en modules indépendants.
• Copies de travail :
– Une seule copie de travail
– Une copie de travail de référence + une par
personne
• Enregistrer (cvs commit) régulièrement les modifs.
• Créer des branches pour les releases officielles.
• Importer les sources externes dans une branche
séparée.
13
Conclusion : Difficultés
• Difficile de renommer un fichier ou un répertoire.
• Définir la bonne organisation répertoires et des
Makefiles.
• Gestion des branches pas toujours évidente.
14