Corrigé
Transcription
Corrigé
UNIVERSITÉ DE NICE – SOPHIA ANTIPOLIS Licence 3 d’Informatique UFR FACULTÉ DES SCIENCES Environnement de Programmation 2005-2006 Parc Valrose – BP 71 – F 06108 NICE Cedex 2 Philippe Collet Séance de TP n◦ 01 de la semaine du 27 janvier 2006 Gestion de versions et de configurations Corrigé Conventions pour les TPs de cet enseignement • Créez un répertoire “EnvProg” pour tous les Tps de cet enseignement. • Pour chaque TP, créez un sous-répertoire de séance qui indique un numéro et un identifiant du TP, par exemple “01.CVS” pour ce TP. Placez-vous sous ce répertoire de séance. • Les sujets des TPs en format HTML (hypertexte avec des liens pour se déplacer sur internet ou récupérer des fichiers de fournitures) sont disponibles sous http://deptinfo.unice.fr/twiki/bin/view/Linfo/GLEnvtProg0506 Objectifs • • • • Comprendre les mécanismes de gestion de versions, puis de gestion de configurations Savoir utiliser et interpréter les commandes de base de cvs. Comprendre la différentiation textuelle sous-jacente et la problématique des conflits. Savoir résoudre les conflits avec un outil graphique. 1. Petites opérations avec RCS • Téléchargez le fichier “cvsQuickRef.html”. Réponse ⇒ Utilisez votre navigateur... • Placez le dans une archive “RCS” avec la commande ci avec une description appropriée (par exemple, Memento CVS en format html...). En cas de besoin, faites ci --help ou man ci pour obtenir la syntaxe et le manuel de la commande. Réponse ⇒ ~> ci --help ci: unknown option: --help ci usage: ci -{fIklMqru}[rev] -d[date] -mmsg -{nN}name -sstate -ttext \ -T -Vn -wwho -xsuff -zzone file ... ~> ci cvsQuickRef.html cvsQuickRef.html,v <-- cvsQuickRef.html enter description, terminated with single ’.’ or end of file: NOTE: This is NOT the log message! >> Memento de la commande CVS (format html) >> . initial revision: 1.1 done ~> ls -l total 48 -r--r--r-- 1 rr profs 48778 Jan 26 14:29 cvsQuickRef.html,v On remarque que le fichier de base a le suffixe , V (comme version) et que cette base est protégée contre les écritures. Cela évite de l’effacer malencontreusement. • Sortez une nouvelle version de la base RCS avec la commande co. Réponse ⇒ ~> co --help co: unknown option: --help co usage: co -{fIlMpqru}[rev] -ddate -jjoins -ksubst -sstate \ -T -w[who] -Vn -xsuff -zzone file ... ~> co cvsQuickRef.html cvsQuickRef.html,v --> cvsQuickRef.html Séance de TP n◦ 01– Gestion de versions et de configurations 2 revision 1.1 done • Remarquez les protections associées au fichier. Réponse ⇒ ~> ls -l total 96 -r--r--r-- 1 rr profs 48556 Jan 26 14:35 cvsQuickRef.html -r--r--r-- 1 rr profs 48778 Jan 26 14:29 cvsQuickRef.html,v Le fichier extrait de la base est également protégé contre les écritures. Cela signifie que plusieurs utilisateurs peuvent en même temps lire le même fichier, avec la même version. Mais si l’on veut le modifier, il faut prévenir le fichier de base de cette intention, pour qu’il bloque toute autre sortie en vue d’une modification. C’est ce qu’on obtient en verrouillant la sortie, avec l’option -l (lock). • Sortez une version en la verrouillant. Réponse ⇒ ~> co -l cvsQuickRef.html cvsQuickRef.html,v --> cvsQuickRef.html revision 1.1 (locked) done ~> ls -l total 96 -rw-r--r-- 1 rr profs 48556 Jan 26 14:44 cvsQuickRef.html -r--r--r-- 1 rr profs 48786 Jan 26 14:44 cvsQuickRef.html,v Cette fois, le fichier autorise les modifications. • Modifiez le fichier avec E MACS (rajoutez quelques lignes de html, enlevez en quelques unes que vous pourrez repérer à la visualisation). Réponse ⇒ ~> emacs cvsQuickRef.html & ~> ls -l total 96 -rw-r--r-- 1 rr profs 48549 Jan 26 15:11 cvsQuickRef.html -r--r--r-- 1 rr profs 48786 Jan 26 14:44 cvsQuickRef.html,v ctrl M de chaque fin de ligne utilisés par On a modifié le fichier avec Emacs, ici en supprimant les caractères Windows et en modifiant un commentaire (indiqué en HTML par <!-- commentaire -->). • Rentrez la version modifiée dans la base avec un message « modif de td » en lui donnant le numéro « 2.0 ». Réponse ⇒ ~> ci -r2.0 cvsQuickRef.html cvsQuickRef.html,v <-- cvsQuickRef.html new revision: 2.0; previous revision: 1.1 enter log message, terminated with single ’.’ or end of file: >> modifs du TD >> . ~> ls -l total 48 -r--r--r-- 1 rr profs 49116 Jan 26 15:11 cvsQuickRef.html,v Pour indiquer le numéro de version (ou revision), il faut utiliser l’option -r sans espace. Lorsqu’un numéro de version est a deux composantes, la première indique une révision majeure (qui modifie les fonctionnalités) et la seconde une révision mineure (qui corrige un défaut sans modifier les fonctionnalités). Lorsqu’un numéro de version a plus de deux composantes, il s’agit d’un document situé dans une branche d’une hiérarchie de révisions. L’intérêt des branches est par exemple pour distinguer différentes lignes d’un même produit, des versions pour différents systèmes ou machines, etc. Le fichier a disparu mais est entré dans la base. On remarque que la taille de la base est très inférieure à deux fois la somme des deux versions du fichier, ce qui montre bien que seule une version (la dernière dans le cas de RCS) et les différences successives sont stockées dans la base, pour gagner de la place. Séance de TP n◦ 01– Gestion de versions et de configurations 3 • Obtenez les informations sur la base “RCS” avec la commande rlog. Réponse ⇒ ~> ~> rlog cvsQuickRef.html,v RCS file: cvsQuickRef.html,v Working file: cvsQuickRef.html head: 2.0 branch: locks: strict rr: 2.0 access list: symbolic names: keyword substitution: kv total revisions: 2; selected revisions: 2 description: Memento de la commande CVS (format html) ---------------------------revision 2.0 locked by: rr; date: 2006/01/26 14:09:04; author: rr; state: Exp; lines: +8 -8 modifs du TD ---------------------------revision 1.1 date: 2006/01/26 13:28:33; author: rr; state: Exp; Initial revision ============================================================================= La commande rlog indique les caractéristiques de l’état courant de la base (son état, la dernière version, l’état verrouillé ou non, le nombre de révisions, le titre général du fichier (description), et pour chaque révision, son numéro, qui a fait la modification, le commentaire de celle-ci et à quelle date, bref tout l’historique des modifications successives qui ont été conservées (car on peut supprimer certaines versions non pertinentes). • Utilisez la commande rcsdiff pour visualiser les différences entre les deux versions. Réponse ⇒ ~> rcsdiff -r1.1 -r2.0 cvsQuickRef.html,v =================================================================== RCS file: cvsQuickRef.html,v retrieving revision 1.1 retrieving revision 2.0 diff -r1.1 -r2.0 ... 18,19c18 < <!-- vim:tabstop=2:shiftwidth=2 < --> --> <!-- vim:tabstop=2:shiftwidth=2 --> 1371,1372c1370,1372 ... Les différences sont exprimées comme pour la commande diff. Par exemple, 18,19c18, signifie que les lignes 18 à 19 du premier fichier (ici la version 1.1) sont remplacées (change) par une seule ligne 18 dans le deuxième fichier (ici la version 2.0). Le contenu des lignes du premier fichier sont préfixées par le signe "<" et celui du deuxième fichier par le signe ">". • Etudiez le contenu du fichier cvsQuickRef.html,v avec E MACS. Que constatez-vous ? Réponse ⇒ ~> emacs cvsQuickRef.html head 2.0; access; symbols; locks rr:2.0; strict; comment @# @; Séance de TP n◦ 01– Gestion de versions et de configurations 4 2.0 date 2006.01.26.14.09.04; author rr; state Exp; branches; next 1.1; 1.1 date 2006.01.26.13.28.33; author rr; state Exp; branches; next ; desc @Memento de la commande CVS (format html) @ 2.0 log @modifs du TD @ text @<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> ... La base est constituée du contenu intégral de la dernière version, précédée d’entêtes en format textuel : les informations qu’on lit en clair avec la commande rlog. 2. Prise en main de CVS • Créez un sous-répertoire “Q2cvs” spécifique pour cette partie du TD. Réponse ⇒ ~> mkdir Q2cvs ~> cd Q2cvs • Vérifiez que vous pouvez bien lancer la commande cvs. Réponse ⇒ ~> whence cvs # sous zsh /usr/bin/cvs # A t t e n t i o n , i l e x i s t e d ’ a u t r e s v e r s i o n s d e CVS q u i # V é r i f i e z que vous avez b i e n c e t t e v e r s i o n . peuvent ne pas marcher . ~> cvs --version Concurrent Versions System (CVS) 1.11.17 (client/server) ... Specify the --help option for further information about CVS # cvs marche ~> cvs --help # ou cvs -H Usage: cvs [cvs-options] command [command-options-and-arguments] where cvs-options are -q, -n, etc. (specify --help-options for a list of options) where command is add, admin, etc. (specify --help-commands for a list of commands or --help-synonyms for a list of command synonyms) where command-options-and-arguments depend on the specific command (specify -H followed by a command name for command-specific help) Specify --help to receive this message The Concurrent Versions System (CVS) is a tool for version control. For CVS updates and additional information, see Séance de TP n◦ 01– Gestion de versions et de configurations the CVS home page at http: / / www . c v s h o m e . o r g / o r Pascal Molli’s CVS site at http: / / www . l o r i a . f r / ~ m o l l i / c v s − i n d e x . h t m l ~> cvs --help-commands CVS commands are: add Add a new file/directory to the repository admin Administration front end for rcs annotate Show last revision where each line was modified checkout Checkout sources for editing commit Check files into the repository diff Show differences between revisions edit Get ready to edit a watched file editors See who is editing a watched file export Export sources from CVS, similar to checkout history Show repository access history import Import sources into CVS, using vendor branches init Create a CVS repository if it doesn’t exist kserver Kerberos server mode log Print out history information for files login Prompt for password for authenticating server logout Removes entry in .cvspass for remote repository pserver Password server mode rannotate Show last revision where each line of module was modified rdiff Create ’patch’ format diffs between releases release Indicate that a Module is no longer in use remove Remove an entry from the repository rlog Print out history information for a module rtag Add a symbolic tag to a module server Server mode status Display status information on checked out files tag Add a symbolic tag to checked out version of files unedit Undo an edit command update Bring work tree in sync with repository version Show current CVS version(s) watch Set watches watchers See who is watching a file (Specify the --help option for a list of other help options) ~> cvs --help-synonyms CVS command synonyms add admin annotate checkout commit diff export history import log login rannotate rdiff release remove rlog rtag status tag update version are: ad new adm rcs ann co get ci com di dif exp ex hi his im imp lo logon lgn rann ra patch pa re rel rm delete rl rt rfreeze st stat ta freeze up upd ve ver • Faites un man cvs pour vous remémorer les sous-commandes les plus utiles et leurs options. Réponse ⇒ ~> man cvs 5 Séance de TP n◦ 01– Gestion de versions et de configurations 6 Le manuel occupe 42 pages !!! Pour avoir un aperçu, il vaut mieux lire le document Quick reference to CVS commands saisi lors de la question sur RCS ou essayer les différentes commandes cvs -help qui suffisent généralement. Il existe aussi sur Internet des CVS quick reference cards comme celle distribuée. Mais attention aux différentes versions, car certaines sont anciennes. Le site http://ximbiot.com/cvs/wiki/index.php donne un manuel en hypertexte très complet et récent. • Suivant les indications de l’enseignant, exportez la variable CVSROOT avec la valeur /u/profs/collet/l3info/envtprog/TP1/cvsroot1 /u/profs/collet/l3info/envtprog/TP1/cvsroot2 /u/profs/collet/l3info/envtprog/TP1/cvsroot3 /u/profs/collet/l3info/envtprog/TP1/cvsroot4 /u/profs/collet/l3info/envtprog/TP1/cvsroot5 /u/profs/collet/l3info/envtprog/TP1/cvsroot6 /u/profs/collet/l3info/envtprog/TP1/cvsroot7 /u/profs/collet/l3info/envtprog/TP1/cvsroot8 • CVS utilise l’éditeur de texte par défaut vi pour saisir des messages de log. Si vous ne connaissez pas cet éditeur, le mieux est de définir une variable d’environnement EDITOR qui contient le nom de votre éditeur favori (par exemple E MACS). Réponse ⇒ ~> export CVSROOT=/u/profs/collet/l3info/envtprog/TP1/cvsroot1 ~> export EDITOR=emacs Si vous entrez par mégarde dans l’éditeur vi, voici les commandes de secour pour s’en sortir : • pour avoir l’invite des commandes, tapez : en début de ligne. Si cela ne marche pas parce que vous êtes en mode insertion de caractères, tapez ESC . : • Une fois que vous l’invite “:” de commande en bas de l’écran, tapez w pour sauvegarder (si vous le voulez !) et •q pour quiter Vi. 3. Récupération d’une configuration pour modification • Utilisez l’opération checkout sur la base pour récupérer la hiérarchie du module nommé “Java2D”. Réponse ⇒ ~> cvs -H checkout Usage: cvs checkout [-ANPRcflnps] [-r rev] [-D date] [-d dir] [-j rev1] [-j rev2] [-k kopt] modules... -A Reset any sticky tags/date/kopts. -N Don’t shorten module paths if -d specified. -P Prune empty directories. -R Process directories recursively. -c "cat" the module database. -f Force a head revision match if tag/date not found. -l Local directory only, not recursive -n Do not run module program (if any). -p Check out files to standard output (avoids stickiness). -s Like -c, but include module status. -r rev Check out revision or tag. (implies -P) (is sticky) -D date Check out revisions as of date. (implies -P) (is sticky) -d dir Check out into dir instead of module name. -k kopt Use RCS kopt -k option on checkout. (is sticky) -j rev Merge in changes made between current revision and rev. ~> cvs checkout Java2D cvs checkout: Updating Java2D U Java2D/Java2Demo.html U Java2D/Java2Demo.jar U Java2D/README.txt Séance de TP n◦ 01– Gestion de versions et de configurations 7 cvs checkout: Updating Java2D/src U Java2D/src/AnimatingControlsSurface.java U Java2D/src/AnimatingSurface.java U Java2D/src/CloningFeature.java U Java2D/src/ControlsSurface.java .. cvs checkout: Updating Java2D/src/demos cvs checkout: Updating Java2D/src/demos/Arcs_Curves U Java2D/src/demos/Arcs_Curves/Arcs.java U Java2D/src/demos/Arcs_Curves/BezierAnim.java U Java2D/src/demos/Arcs_Curves/Curves.java ... • Interprétez le résultat à l’écran. Réponse ⇒ La commande cvs checkout Java2D réalise l’équivalent d’une copie récursive du module “Java2D” (répertoire) situé dans le répertoire indiqué dans la variable CVSROOT. Chaque fois que cvs met à jour un sous-répertoire, cela est indiqué par un message du genre : cvs checkout: Updating Java2D/src/demos/Paths suivi des noms de fichiers qui sont mis-à-jour (up to date) : U Java2D/src/demos/Paths/Append.java U Java2D/src/demos/Paths/CurveQuadTo.java U Java2D/src/demos/Paths/FillStroke.java ... • Observez le résultat dans le répertoire. Quels répertoires spéciaux existent maintenant ? Que contiennent-ils ? Réponse ⇒ ~> ls Java2D ~> du 11 12 11 11 45 11 53 11 41 11 49 11 46 11 44 11 41 11 55 11 52 11 31 11 53 529 761 1189 1197 ./Java2D/CVS ./Java2D/src/CVS ./Java2D/src/demos/CVS ./Java2D/src/demos/Arcs_Curves/CVS ./Java2D/src/demos/Arcs_Curves ./Java2D/src/demos/Clipping/CVS ./Java2D/src/demos/Clipping ./Java2D/src/demos/Colors/CVS ./Java2D/src/demos/Colors ./Java2D/src/demos/Composite/CVS ./Java2D/src/demos/Composite ./Java2D/src/demos/Fonts/CVS ./Java2D/src/demos/Fonts ./Java2D/src/demos/Images/CVS ./Java2D/src/demos/Images ./Java2D/src/demos/Lines/CVS ./Java2D/src/demos/Lines ./Java2D/src/demos/Mix/CVS ./Java2D/src/demos/Mix ./Java2D/src/demos/Paint/CVS ./Java2D/src/demos/Paint ./Java2D/src/demos/Paths/CVS ./Java2D/src/demos/Paths ./Java2D/src/demos/Transforms/CVS ./Java2D/src/demos/Transforms ./Java2D/src/demos ./Java2D/src ./Java2D . ~> cd Java2D/CVS ~> ls -lsRa Séance de TP n◦ 01– Gestion de versions et de configurations 8 8 1 1 1 drwxr-xr-x drwxr-xr-x -rw-r--r--rw-r--r--rw-r--r-- 2 4 1 1 1 rr rr rr rr rr 8 deptinfo 8192 jan 26 17:14 . deptinfo 8192 jan 26 17:14 .. deptinfo 158 jan 26 17:14 Entries deptinfo 7 jan 26 17:14 Repository deptinfo 45 jan 26 17:14 Root ~> more Root /u/profs/collet/l3info/envtprog/TP1/cvsroot1 ~> more Repository Java2D ~> more Entries /Java2Demo.html/1.1.1.1/Mon Oct 7 15:58:18 2002 / / /Java2Demo.jar/1.1.1.1/Mon Oct 7 15:58:17 2002 / / /README.txt/1.1.1.1/Mon Oct 7 15:58:18 2002 / / D/src / / / / On observe que chacun des répertoires qui ont été récupérés sont maintenant équipés d’un sous-répertoire “CVS”, comme celui situé sous la racine “Java2D”. Dans tous ces répertoires “CVS” se trouvent trois fichiers (ici, mais il peut il y en avoir d’autres selon les manipulations effectuées) : “Root” : donne l’URL de la base au cas où la variable CVSROOT ne serait pas définie. “Repository” : donne le nom de chemin du répertoire racine de l’entrepôt (repository). Par opposition, on appelle l’environnement local de travail (working files le bac à sable (sandbox). “Entries” : donne pour chaque fichier du répertoire le nom du fichier, son numéro de version (au sens RCS) et la date de dernière mise à jour. Dans le cas d’un sous-répertoire, on voit apparaître la lettre “D” comme pour “src”. • Modifiez un fichier java (mettez vous d’accord pour qu’ils soient différents entre les étudiants, on verra les conflits par la suite) en rajoutant quelques lignes, en en supprimant d’autres et en modifiant certaines. Profitezen pour ajouter des commentaires dans le source Java comme $Revision: 1.1 $, $Author: rr $, $Date: 2006/01/27 06:08:23 $ Réponse ⇒ ~> emacs Java2D/src/Intro.java & On ajoute en tête du fichier des lignes de commentaires du genre // // // $Revision : 1.1 $ $Author : rr $ $Date : 2006/01/27 06:08:23 $ L’intérêt de ces marques entre deux signes dollar est qu’elles sont reconnues par RCS lorsqu’on lui demande d’extraire des versions de ses bases (CVS utilise une base RCS pour chaque fichier qu’il gère). Lors d’une commande co, RCS effectue des substitutions en remplaçant des identificateurs prédéfinis pazr la veleur qu’il connait : date de la dernieère version, numéro de version, auteur du fichier... Ces informations marquent ainsi les documents avec ces informations d’identification et celles-ci peuvent être affichées par des commandes comme ident. Bien entendu, il ne faut pas que ces marques polluent les fichiers, aussi on les place dans des commentaires du langage ou des chaînes pour des programmes, car elle resteront ainsi dans les programmes binaires. • Trouver l’opération cvs qui montre quels fichiers sont modifiés dans votre vision locale. Appliquez la à toute l’arborescence, puis à votre fichier. Réponse ⇒ La commande cvs update compare l’entrepôt distant avec le tas de sable local en vue de mettre à jour le tas de sable. Elle annote les différents fichiers et répertoires avec une lettre M (modifié), U (remis à jour), etc. (cf. le cours, page 24). Comme cette commande prend en argument des fichiers ou répertoires à comparer, on peut demander une comparaison plus ou moins large, récursive (option -R) par défaut ou non (option -l local). Lorsque des fichiers sont différents de la version de l’entrepôt, par défaut cvs update indique la différence. Mais avec l’option -C (clean), la version locale est remplacée par la version de l’entrepôt. Au contraire, l’option générale de cvs -n ne touche pas aux fichiers locaux, affiche seulement les différences. C’est ce qu’il faut faire ici. Séance de TP n◦ 01– Gestion de versions et de configurations 9 ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs/Java2D ~> cvs -n update . cvs update: Updating cvs update: Updating M src/Intro.java cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating cvs update: Updating . src src/demos src/demos/Arcs_Curves src/demos/Clipping src/demos/Colors src/demos/Composite src/demos/Fonts src/demos/Images src/demos/Lines src/demos/Mix src/demos/Paint src/demos/Paths src/demos/Transforms ~> cvs -n update Intro.java M Intro.java ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs ~> ls Java2D ~> cvs -n update Intro.java cvs update: cannot open CVS/Entries for reading: No such file or directory cvs update: nothing known about Intro.java cvs [update aborted]: cannot open CVS/Root: No such file or directory ~> cd Java2D ~> ls CVS Java2Demo.html Java2Demo.jar README.txt src ~> cvs -n update Intro.java cvs update: nothing known about Intro.java ~> cvs -n update src/Intro.java M src/Intro.java ~> cvs -n update -l src cvs update: Updating src M src/Intro.java ? src/cvs • Trouvez l’opération cvs qui visualise les modifications effectuées. Réponse ⇒ La commande cvs diff compare les fichiers locaux à ceux de l’entrepôt, dans une certaine version (par défaut la plus récente). On peut comparer des fichiers explicites ou des répertoires, de manière récursive ou non. Cette commande ne modifie pas le tas de sable, donc inutile de mettre l’option -n. ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs/Java2D/src ~> cvs diff -l . cvs diff: Diffing . Index: Intro.java =================================================================== RCS file: /u/profs/collet/l3info/envtprog/TP1/cvsroot1/Java2D/src/Intro.java,v retrieving revision 1.3 Séance de TP n◦ 01– Gestion de versions et de configurations 10 diff -r1.3 Intro.java 19,20d18 < < 23,25d20 < * < * @version @( # ) I n t r o . j a v a 1.11 00/08/21 < * @author Brian Lichtenwalter 26a22 > Ici, on compare le répertoire courant, tous ses fichiers, mais de façon non récursive (option -l local). 4. Mise à jour de la base CVS pour diffuser vos modifications • Utilisez l’opération commit sur le seul fichier modifié pour mettre à jour la base “CVS” en ajoutant comme message « modification de votre_nom pour le TP ». Réponse ⇒ On utilise la commande commit. On peut lui demander ses options et ses arguments avant de l’exécuter. ~> cvs -H commit Usage: cvs commit [-Rlf] [-m msg | -F logfile] [-r rev] files... -R Process directories recursively. -l Local directory only (not recursive). -f Force the file to be committed; disables recursion. -F logfile Read the log message from file. -m msg Log message. -r rev Commit to this branch or trunk revision. (Specify the --help global option for a list of other help options) ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs ~> cvs commit -m "modif de rr pour le TP" Java2D cvs commit: Examining Java2D cvs commit: Examining Java2D/src cvs commit: Examining Java2D/src/demos cvs commit: Examining Java2D/src/demos/Arcs_Curves cvs commit: Examining Java2D/src/demos/Clipping cvs commit: Examining Java2D/src/demos/Colors cvs commit: Examining Java2D/src/demos/Composite cvs commit: Examining Java2D/src/demos/Fonts cvs commit: Examining Java2D/src/demos/Images cvs commit: Examining Java2D/src/demos/Lines cvs commit: Examining Java2D/src/demos/Mix cvs commit: Examining Java2D/src/demos/Paint cvs commit: Examining Java2D/src/demos/Paths cvs commit: Examining Java2D/src/demos/Transforms Checking in Java2D/src/Intro.java; /u/profs/collet/l3info/envtprog/TP1/cvsroot1/Java2D/src/Intro.java,v new revision: 1.2; previous revision: 1.1 done <-- • Vérifiez le résultat de cette opération avec une opération cvs appropriée. Réponse ⇒ On réutilise la commande cvs -n update pour voir si les deux arborescences sont synchronisées. ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs ~> cvs -n update Java2D/ cvs update: Updating cvs update: Updating ? Java2D/src/cvs cvs update: Updating cvs update: Updating Java2D Java2D/src Java2D/src/demos Java2D/src/demos/Arcs_Curves Intro.java Séance de TP n◦ 01– Gestion de versions et de configurations cvs cvs cvs cvs cvs cvs cvs cvs cvs cvs update: update: update: update: update: update: update: update: update: update: Updating Updating Updating Updating Updating Updating Updating Updating Updating Updating 11 Java2D/src/demos/Clipping Java2D/src/demos/Colors Java2D/src/demos/Composite Java2D/src/demos/Fonts Java2D/src/demos/Images Java2D/src/demos/Lines Java2D/src/demos/Mix Java2D/src/demos/Paint Java2D/src/demos/Paths Java2D/src/demos/Transforms 5. Mise à jour de votre répertoire pour prendre en compte les nouveautés dans la base CVS • Utilisez l’opération update pour obtenir les modifications effectuées par les autres développeurs sur le serveur CVS. Réponse ⇒ On réutilise la commande cvs update, mais cette fois sans l’option -n pour mettre à jour le tas de sable. Si on utilise l’option -C c’est la version des autres étudiants qui écrasera la modification locale. Si un fichier n’a pas été modifié localement, mais a été modifié par d’autres étudiants dans leur tas de sable et qu’ils ont fait un cvs commit, alors c’est leur version qui écrasera la version locale, avec l’indication U. ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs ~> cvs update Java2D cvs update: Updating Java2D cvs update: Updating Java2D/src U Java2D/src/Surface.java ? Java2D/src/cvs cvs update: Updating Java2D/src/demos cvs update: Updating Java2D/src/demos/Arcs_Curves ... Ici, c’est le fichier “Java2D/src/Surface.java” qui a été modifié par d’autres étudiants. • Visualisez le résultat de l’update sur la sortie de la commande et dans le répertoire. Réponse ⇒ La commande update précédente a affiché sur la voie d’erreur une trace des mises-à-jour effectuées. Si on veut voir les modifs effectuées, on peut regarder la date des fichiers mis à jour et les informations d’identifications, s’il y en a. ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs/Java2D/src ~> ident Surface.java Surface.java: {\sffamily Surface.java v1.2 27/01/2006 08:32 Exp } ~> ident Intro.java Intro.java: $Revision: 1.4 $ $Author: rr $ $Date: 2006/01/26 22:18:46 $ • Vérifiez les modifications en cherchant et en visualisant les modifications faites par les autres binômes. Réponse ⇒ Comme la version des autres étudiants est maintenant dans le tas de sable local, si on veut voir les modifications apportées, il faut demander à l’entrepôt de fournir la version d’origine. Cela peut être obtenbu avec la commande diff en précisant les versions. ~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs/Java2D/src ~> cvs diff -r1.1 Surface.java Index: Surface.java =================================================================== Séance de TP n◦ 01– Gestion de versions et de configurations 12 RCS file: /u/profs/collet/l3info/envtprog/TP1/cvsroot1/Java2D/src/Surface.java,v retrieving revision 1.1 retrieving revision 1.2 diff -r1.1 -r1.2 1,30c1 < /* < * @( # ) S u r f a c e . j a v a 1.41 00/06/19 < * < * Copyright (c) 1998, 1999 by Sun Microsystems, Inc. All Rights Reserved. ... < * the design, construction, operation or maintenance of any nuclear < * facility. Licensee represents and warrants that it will not use or < * redistribute the Software for such purposes. < */ < --> / / { \ s f f a m i l y « S u r f a c e . j a v a v1 . 2 » 2 7 / 0 1 / 2 0 0 6 0 8 : 3 2 Exp } Ceci montre que la nouvelle version a remplacé l’ancien commentaire d’entête par le commentaire $Id: ... qui est exploité par la commande ident vue précédemment. 6. Gestion des conflits • Editez tous (au moins deux binômes à la fois) le fichier « README » en ajoutant une ligne au début ou à la fin, avec votre nom. • Faites un commit... • Que se passe-t-il ? et que faire ? Réponse ⇒ On suppose que deux étudiants ont modifié le fichier “Java2D/src/Tools.java”. On suppose que l’étudiant ETU2 fait son commit avant l’étudiant ETU1. Le premier commit est enregistré comme d’habitude, mais le deuxième va produire une erreur d’incompatibilité. ~etu2> cvs commit -m "modif de l’étudiant ETU2" Java2D cvs commit: Examining Java2D cvs commit: Examining Java2D/src cvs commit: Examining Java2D/src/demos ... Checking in Java2D/src/Tools.java; /u/profs/collet/l3info/envtprog/TP1/cvsroot1/Java2D/src/Tools.java,v new revision: 1.2; previous revision: 1.1 done <-- ~etu1> cvs commit -m "modif de l’étudiant ETU1" Java2D cvs commit: Examining Java2D cvs commit: Examining Java2D/src cvs commit: Up-to-date check failed for Java2D/src/Tools.java’cvs commit: Java2D/src/demos...cvs [commit aborted]: correct above errors first! Tools.java Examining Face à cet échec, il faut que l’étudiant qui arrive en 2e position face une fusion de ses changements avec ceux de l’autre, puis enregistre le résultat avec commit. Par défaut, la fusion se fait avec la dernière version enregistrée. Sinon, on peut préciser une version de l’entrepôt avec l’option -j rev. etu1~> pwd /u/deptinfo/rr/l3i8/01.CVS/Q2cvs/Java2D/src etu1~> cvs update Tools.java RCS file: /u/profs/collet/l3info/envtprog/TP1/cvsroot1/Java2D/src/Tools.java,v retrieving revision 1.1.1.1 retrieving revision 1.2 Merging differences between 1.1.1.1 and 1.2 into Tools.java M Tools.java etu1~> more Tools.java # On v o i t # fichier b i e n que l e s m o d i f i c a t i o n s ont été e f f e c t u é e s . faites par les deux étudiants , au d é b u t et à la fin du Séance de TP n◦ 01– Gestion de versions et de configurations 13 Si les deux modifications portent sur la même partie du texte, la fusion ne peut pas être autotisée et il faut alors faire appel à un éditeur de texte. 7. Outil graphique pour CVS : Cervisia • Lancez l’application cervisia • Configurez la base CVS avec la syntaxe utilisée pour désigner la base CVS. • Ouvrez votre répertoire et vérifiez que l’état des fichiers s’affiche correctement (dépliez complètement la hiérarchie si nécessaire). • Utilisez le menu déroulant et la commande resolve pour visualiser le conflit et tentez de le résoudre. • Naviguez dans la hiérarchie et visualisez l’arbre de version des fichiers que vous avez modifiés (le premier et celui en conflit). • Refaites une modification simple comme dans les exercices 4 et 5, mais en effectuant les opération à l’aide de l’outil (modification, visualisation des différences, filtrage des fichiers modifiés, propagation, mise a jour). 8. Utilisation de bases CVS distantes • Allez sur le site “http://winmerge.sourceforge.net” • Sélectionnez l’onglet D̈eveloper", puis dans la section CVS client access, naviguez dans CVS et lisez les instructions. • Profitez-en pour naviguer dans l’arborescence CVS par le web (Browse CVS repository). • Créez un nouveau projet dans cervisia et connectez vous au serveur anonyme. • Récupérez une arborescence : il existe deux modules, CVSROOT pour l’administration, et WinMerge, qui contient tous les sources. Commencez par récupérer CVSROOT car la récupération est longue. S’il vous reste du temps, récuperez le module WinMerge et observez les fichiers sources (numéros de version, modifications effectuées, etc.).