Introduction à l`orienté objet - e
Transcription
Introduction à l`orienté objet - e
Systèmes de gestion de version Jean-Jacques LE COZ Introduction L'art de gérer les changements d'information Pour quoi faire ? Pour gérer les différentes versions d'un logiciel Pour permettre à plusieurs développeurs de travailler en collaboration Pour contrôler l'accès et les modifications apportées au logiciel Fonctionnalités Importation et exportation de projets Accès concurrentiels Suivi de l'historique Visualisation des différences Retour à des anciennes versions Création d'un nouveau projet à partir d'un ancien Systèmes existants (1) Contrôle par verrouillage des fichiers SCCS (Source Code Control System) RCS (Revision Control System) Systèmes existants (2) Evolutions avec les logiciels libres CVS (Concurrent Version system) Subversion Amélioration de CVS Gestion des répertoires Meta-CVS Très répandu (Sourceforge) Gestion des répertoires, sur-couche de CVS arch Gestion décentralisée Systèmes existants (3) Autres solutions Bitkeeper Choisi pour le développement du noyau Linux 2.5 Git Développé par la communauté Linux Choisi pour les développements du noyau Linux à partir de la version 2.6 Rational software Gérant de systèmes Systèmes capables de piloter les logiciels de contrôle de versions. Copies automatiques dans l'environnement de développement Reconstruction automatique des projets Personnalisation Exemple de logiciel CruiseControl cruisecontrol.sourceforge.net Plateformes de gestion de projets SourceForge Commercialise son architecture LibreSource Produit libre Basé sur Java/J2EE Fortement orienté services Travail collaboratif pour communautés distribuées Plateforme LibreSource Subversion Logiciel libre Licence compatible avec la Debian Free Software Guidelines «Open source», modifiable et redistribuable Hébergé par la communauté Tigris Au départ une communauté employée par la société CollabNet (début 2000) Disponible depuis août 2001 Subversion : fonctionnalités Prise en compte des répertoires Véritable gestion d'historique Commit atomique Méta-données Choix de la couche réseau Gestion de la cohérence Gestion efficace des branches Modifiable (librairies C avec API) Architecture de pilotage ligne de commande Système de fichier intégration dans un IDE Protocole réseau Subversion navigateur Web Protocole Webdav Repository Subversion : composants (1) svn svnversion Une commande de reporting svnlook La commande ligne Un outil d'inspection svnadmin Un outil d'administration Subversion : composants (2) svndumpfilter mod_dav_svn Un outil de filtrage des dump Un plugin pour le serveur HTTP apache svnserve Le serveur standalone de Subversion Commandes Commande sans objet Commande avec item Portée locale sur un item Commande avec URL Portée locale Portée repository Commande d'administration avec chemin Portée repository système de fichier Concept de révision Utiliser Subversion Création d'une repository Par défaut le système de gestion des données est Berkeley DB Stockage d'un projet svnadmin create chemin/repo svn import /chemin/racineprojet file:///chemin/repo -m ''mot clef'' svn import /chemin/racineprojet http://url/chemin/repo -m ''mot clef'' Récupération d'un projet svn checkout file:///chemin/repo svn checkout http://url/chemin/repo Utiliser Subversion Après modification d'une copie, pour voir les différences avec la repository Commit de la nouvelle version svn diff svn commit Synchroniser sa copie locale avec la repository svn update Utiliser Subversion Pour savoir ce qui a changé dans votre copie locale Pour défaire ce qui a été modifié dans votre copie locale svn revert Pour obtenir des informations sur l'historique d'un item svn log svn -uv status Utiliser Subversion Pour examiner le contenu d'une version précédente dans la copie locale svn cat Pour lister les fichiers directement dans la copie locale svn list Utiliser Subversion Connaitre la structure d'une repository svnlook tree /chemin/repository Aide des commandes svn help commande svnadmin help commande svnlook help commande etc Structure de la repository (1) Répertoire conf Répertoire dav Fichiers de configuration Pour l'intégration avec Apache Répertoire db Stockage des versions Structure de la repository (2) Fichier format Répertoire hooks Squelettes de scripts (trigger) Répertoire locks Version de la repository Pour gérer les verrous d'accès Fichier README.txt Structure de la copie locale Structure du projet Dépend de la profondeur du chemin indiqué à la commande checkout Répertoire .svn Répertoire local d'administration Copies des versions HEAD, BASE, COMMITTED, PREV Concept de copie locale Codification des rapports de changement code A C D M R X ? ! ~ I Signification Item ajouté Item en conflit Item supprimé Item modifié Item remplacé Item non versionné Item non pris en compte par Subversion Item incomplet Item de nature différente par rapport à la repository Item ignoré Gestion des conflits Gestion des conflits USE CASE (1) utilisateur A : $> svn checkout file:///home/dupont/subversion/repo A fichier.txt Checked out revision 1. $> ls repo fichier.txt Gestion des conflits USE CASE (2) utilisateur B : $> svn checkout file:///home/dupont/subversion/repo A fichier.txt Checked out revision 1. $> ls repo fichier.txt Gestion des conflits USE CASE (3) utilisateur A : $> cd repo $> date >> fichier.txt $> svn commit Log message unchanged or not specified a)bort, c)ontinue, e)dit c Sending fichier.txt Transmitting file data . Committed revision 2. Gestion des conflits USE CASE (4) utilisateur B : $> cd repo $> echo $HOSTNAME >> fichier.txt $> svn commit Log message unchanged or not specified a)bort, c)ontinue, e)dit c Sending fichier.txt svn: Commit failed (details follow): svn: Out of date: '/fichier.txt' in transaction '1e' Gestion des conflits USE CASE (5) utilisateur B : $> svn update C fichier Updated to revision 2. $> cat fichier.txt mer déc 12 15:04:28 CET 2003 >>>>>>> .r2 <<<<<<< .mine Linux Gestion des conflits USE CASE (6) utilisateur B : $> ls fichier.txt fichier.txt.mine fichier.txt.r1 fichier.txt.r2 $ svn resolved fichier.txt $> ls fichier.txt // édition et gestion des conflits à la main $ svn commit Branches avec Subversion Une branche est la scission d'un projet Une branche est une copie d'un projet La branche partage le même historique que le projet original Au cours de son cycle de vie, la branche diffère du projet original Branches Créer et utiliser les branches USE CASE (1) utilisateur dupont $> svnadmin create ~/subversion/repoA $> cd temp/copie-travail $> mkdir data $> date > data/fichier.txt $> svn import copie-travail/ file:///home/dupont/subversion/repoA/ $> svnlook tree ~/subversion/repoA / data/ fichier.txt Créer et utiliser les branches USE CASE (2) utilisateur martin $> checkout svn checkout file:///home/dupont/subversion/repoA A repoA/data A repoA/data/fichier.txt Checked out revision 1. $> ls repoA . .. data .svn Créer et utiliser les branches USE CASE (3) utilisateur martin $> svn mkdir branche1 $> ls branche1 data $> ls -a branche1 . .. .svn $> svn copy data/ branche1/data-branche $> ls -a branche1 . .. data-branche .svn $> svn commit Créer et utiliser les branches USE CASE (4) utilisateur martin $> svn copy file:///home/dupont/subversion/repoA \ file:///home/dupont/subversion/repoA/branche2 $> svnlook tree /home/dupont/subversion/repoA / branche1/ data-branche/ fichier.txt branche2/ fichier.txt data/ fichier.txt Créer et utiliser les branches USE CASE (5) utilisateur martin $> svn checkout file:///home/dupont/subversion/repoA/branche1 $> ls branche1 $> cd branche1 $> ls -a . .. data-branche .svn $> date +%A >> data-branche/fichier.txt $> svn commit $> svn -v log data-branche/fichier.txt Créer et utiliser les branches USE CASE (6) utilisateur dupont $> svn update $> svn cat data/fichier.txt // fichier inchangé $> svn -v log data/fichier.txt Voir l'historique d'une branche Commande Subversion svn log –verbose –stop-on-copy Retrace l'historique depuis la scission avec le projet initial Copier les changements entre branches Commande subversion svn merge options svn merge URL1 URL2 copieLocale svn merge -r revision1:revision2 URL copieLocale svn merge -r revision1:revision2 URL Identique à la commande svn diff Au lieu de lister les différences, elle les copie Copier toute une branche $> cd brancheInitiale $> svn log --verbose --stop-on-copy file:///chemin/brancheNouvelle $> svn update $> svn merge -r 200:250 file:///chemin/brancheNouvelle $> svn commit Défaire les changements Retrouver une version précédente svn merge -r revisionN:revisionN-1 URL Retrouver des fichiers supprimés svn copy -r revision (avant la suppression) Bibliographie Version Control with subversion – B. CollinsSussman, W. FitzpatrickC, M. Pilato