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