Formation à l`utilisation d`un client Subversion
Transcription
Formation à l`utilisation d`un client Subversion
Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Formation à l'utilisation d'un client Subversion Vincent Carpier et Florent Guilleux, Comité Réseau des Universités Document de la formation dispensée le 27 juin 2007 Version électronique téléchargeable sur http://www.cru.fr/_media/activites/formations_du_cru/formation_subversion_juin-2007.pdf Présentation PowerPoint de la formation http://www.cru.fr/_media/activites/formations_du_cru/formation_subversion_juin-2007.ppt Copyright Copyright © Comité Réseau des Universités Ce document peut être copié et distribué dans son intégralité, sans modification, retrait ou ajout. Tout usage commercial est interdit. L’utilisation de ce document dans un cadre de formation collective est soumise à l’approbation explicite et préalable de ses auteurs. Comité Réseau des Universités Page 1 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Sommaire 1 - Description de la formation.............................................................................................................4 1.1 - Informations générales............................................................................................................ 4 1.2 - Objectifs.................................................................................................................................. 4 1.3 - Pré requis................................................................................................................................. 4 1.4 - Références............................................................................................................................... 4 2 - Introduction..................................................................................................................................... 5 3 - Préparation du poste de travail........................................................................................................ 5 3.1 - Accès au poste de travail......................................................................................................... 5 3.2 - Installation du client Subversion............................................................................................. 5 3.3 - Création d'un projet fictif sur son poste de travail...................................................................5 3.4 - Utilisation d'un dépôt Subversion sur SourceSup................................................................... 5 3.5 - Voir le contenu de votre dépôt avec un navigateur web........................................................ 6 4 - Opérations de base.......................................................................................................................... 7 4.1 - Importer un projet existant dans un dépôt Subversion............................................................ 7 4.1.1 - Avec TortoiseSVN...........................................................................................................7 4.1.2 - Avec Subclipse................................................................................................................ 8 4.2 - Récupérer sur son poste de travail un projet contenu dans un dépôt Subversion....................9 4.2.1 - Avec TortoiseSVN.........................................................................................................10 4.2.2 - Avec Subclipse.............................................................................................................. 10 4.3 - Modifier le contenu de sa copie de travail et ensuite enregistrer ces modifications dans le dépôt...............................................................................................................................................11 4.3.1 - Avec TortoiseSVN.........................................................................................................11 4.3.2 - Avec Subclipse.............................................................................................................. 11 4.4 - Ne pas enregistrer certains fichiers et répertoires de sa copie de travail dans le dépôt.........13 4.4.1 - Avec TortoiseSVN.........................................................................................................13 4.4.2 - Avec Subclipse.............................................................................................................. 14 4.5 - Suivre les modifications apportées sur sa copie de travail depuis le moment où l'on a réalisé l'enregistrement précédent ou fait le checkout...............................................................................14 4.5.1 - Avec TortoiseSVN.........................................................................................................14 4.5.2 - Avec Subclipse.............................................................................................................. 15 4.6 - Annuler des modifications réalisées sur la copie de travail.................................................. 16 4.6.1 - Avec TortoiseSVN.........................................................................................................16 4.6.2 - Avec Subclipse.............................................................................................................. 16 4.7 - Consulter l'historique des modifications du dépôt................................................................ 16 4.7.1 - Avec TortoiseSVN.........................................................................................................16 4.7.2 - Avec Subclipse.............................................................................................................. 17 5 - Travailler à plusieurs sur un dépôt................................................................................................ 18 5.1 - Mettre à jour son dépôt..........................................................................................................18 5.2 - Gestion des conflits............................................................................................................... 19 5.2.1 - Optimistic locking dans le cas où des modifications concernent des lignes différentes d'un fichier.................................................................................................................................19 5.2.2 - Optimistic locking dans le cas où des modifications concernent les mêmes lignes d'un fichier........................................................................................................................................ 20 5.2.2.1 - La vue Synchronize with Repository d'Eclipse..................................................... 21 5.2.3 - Locking.......................................................................................................................... 22 Comité Réseau des Universités Page 2 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 5.2.4 - Cycle de travail typique avec Subversion......................................................................22 5.3 - Qui a changé quelle ligne ?................................................................................................... 23 5.3.1 - Avec TortoiseSVN.........................................................................................................23 5.3.2 - Avec Subclipse.............................................................................................................. 23 6 - Gérer le cycle de développement d'un logiciel............................................................................. 24 6.1 - Les étiquettes......................................................................................................................... 24 6.1.1 - Création du répertoire tags.............................................................................................24 6.1.1.1 - Avec TortoiseSVN.................................................................................................24 6.1.1.2 - Avec Subclipse.......................................................................................................24 6.1.2 - Créer une étiquette......................................................................................................... 25 6.1.2.1 - Avec TortoiseSVN.................................................................................................25 6.1.2.2 - Avec Subclipse.......................................................................................................25 6.1.3 - Faire une version diffusable de son logiciel à partir d'une étiquette..............................26 6.2 - Les branches.......................................................................................................................... 27 6.3 - Créer et appliquer des patchs.................................................................................................28 6.3.1 - Créer un patch................................................................................................................29 6.3.1.1 - Avec TortoiseSVN.................................................................................................29 6.3.1.2 - Avec Subclipse.......................................................................................................29 6.3.2 - Appliquer un patch........................................................................................................ 29 6.3.2.1 - Avec TortoiseSVN.................................................................................................29 6.3.2.2 - Avec Subclipse.......................................................................................................30 7 - Pour aller plus loin........................................................................................................................ 31 7.1 - Les propriétés........................................................................................................................ 31 7.2 - Intégrer d'autres dépôts dans sa copie de travail................................................................... 31 7.3 - Les hook scripts.....................................................................................................................32 7.4 - Toujours plus loin..................................................................................................................32 8 - Conclusion.....................................................................................................................................32 Comité Réseau des Universités Page 3 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 1 Description de la formation 1.1 Informations générales Public concerné : développeurs souhaitant apprendre ou améliorer leur utilisation de Subversion pour gérer le versioning du développement de logiciels. Durée : une journée Nombre de stagiaire : . 20 Les stagiaires sont réparties par binôme sur chaque poste. Intervenants : ● Vincent Carpier, Comité Réseau des Universités, adminstrateur de la plate-forme SourceSup, [email protected] ● Florent Guilleux, Comité Réseau des Universités, adminstrateur de la plate-forme SourceSup, [email protected] 1.2 Objectifs Les objectifs sont : ● comprendre les concepts de la gestion de version dans Subversion ; ● apprendre les commandes de base et avancées pour gérer le cycle de développement d'un logiciel avec Subversion ; ● maîtriser l'utilisation d'un client Subversion (TortoiseSVN ou Subclipse). 1.3 Pré requis Cette formation ne nécessite aucune connaissance particulière préalable. Dans ce cas de le cas de l'utilisation du client Subversion Subclipse d'Eclipse, il faut connaître Eclipse, car aucun aspect spécifique à Eclipse hors de l'utilisation de Subversion n'est abordé. 1.4 Références ● Manuel de référence de Subversion en ligne : http://svnbook.red-bean.com/ ● Documentation en ligne de Subclipse : http://svn.collab.net/subclipse/help/index.jsp?topic=/org.tigris.subversion.subclipse.doc/html /toc.html Comité Réseau des Universités Page 4 / 32 Formation "Utilisation d'un client Subversion" ● Documentation en ligne de TortoiseSVN : http://tortoisesvn.net/docs/release/TortoiseSVN_fr/index.html ● Autres ressources : http://www.cru.fr/faq/sourcesup/gestion_src Paris, 27 juin 2007 2 Introduction En début de formation sont présentées oralement les intérêts de la gestion de version, Subversion, ses concepts de base et sa terminologie. Cette présentation va faciliter le travail pratique de la suite de la formation, sous forme d'une suite d'exercices qui permettront d'acquérir les pratiques d'un développement avec Subversion. Au départ les exercices sont très détaillés, ensuite ils sont de moins en moins directifs. Toutes les possibilités de Subversion et des clients TortoiseSVN et Subclipse ne sont pas couvertes, mais cette formation vous permettra d'en savoir assez pour les utiliser avec efficacité. 3 Préparation du poste de travail 3.1 Accès au poste de travail Suivre les indications données au début de la formation. 3.2 Installation du client Subversion Les clients TortoiseSVN et Subclipse (pour Eclipse) sont installés sur les postes de la salle de formation. Vous pouvez utiliser celui qui vous convient. 3.3 Création d'un projet fictif sur son poste de travail Pour les besoins de la formation, créez sur le bureau Windows un répertoire (avec le nom que vous souhaitez, par exemple mon-projet) puis à l'intérieur créez un fichier texte (par exemple document.txt). Ce répertoire et son contenu représentent votre projet tel que vous l'avez développé sur votre poste jusqu'au jour où vous déciderez d'utiliser Subversion. 3.4 Utilisation d'un dépôt Subversion sur SourceSup Subversion est un système de gestion de version centralisé, il stocke donc le contenu d'un projet au niveau d'un serveur central, dans un dépôt (repository en Anglais). Avec un client Subversion, il n'est pas possible de créer depuis son poste un dépôt au niveau d'un serveur Subversion. Il faut donc que l'administrateur du serveur y crée initialement le dépôt d'un projet. Pour cette formation un dépôt a été créé pour chaque poste de travail sur le serveur Subversion de SourceSup. Le nom de chaque dépôt est projet-x, où x est le numéro du poste que vous utilisez dans la salle de formation ('01', '02', '03', etc.). L'URL d'accès au dépôt est http://subversion.cru.fr/projet-x. Toutes les opérations que nous effectuerons sur le dépôt Subversion transiteront via HTTP. Il existe d'autres protocoles d'accès à Subversion (HTTPS, SVN, SVN+SSH) mais toutes les commandes Comité Réseau des Universités Page 5 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 restent les mêmes, nous ne détaillons donc pas ces autres protocoles d'accès. L'accès à Subversion via HTTP[S] utilise HTTP et WebDAV. 3.5 Voir le contenu de votre dépôt avec un navigateur web Vous pouvez voir le contenu d'un dépôt Subversion avec un navigateur. Ouvrez un navigateur et allez sur l'URL http://subversion.cru.fr/projet-x. Utilisez l'identifiant test_user et le mot de passe test_user. Vous verrez apparaître une vue de l'arborescence du contenu actuel du dépôt de votre projet sur le serveur Subversion, avec le numéro de révision courant. Comme pour le moment il n'y a rien dans votre dépôt, la page qui apparaît est vide. Le numéro de révision affiché est zéro car aucune opération n'a encore été effectuée dans le dépôt. Quand vous travaillez avec Subversion, il est parfois très utilise d'utiliser cette vue du dépôt avec un navigateur web, pour vérifier quel est exactement l'état de son dépôt sur le serveur. Comité Réseau des Universités Page 6 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 4 Opérations de base Cette partie décrit les opérations de base de Subversion qu'utilise un développeur au quoditien. A l'issue de cette partie, vous saurez récupérer ou importer un projet dans un dépôt Subversion, y apporter des modifications, annuler certaines modifications, connaître l'historique des modifications apportées... L'ordre proposé suit dans la mesure du possible les besoins successifs d'un développeur au cours de son utilisation de Subversion. 4.1 Importer un projet existant dans un dépôt Subversion Vous avez un dépôt vide sur le serveur Subversion, et votre projet sur le bureau de votre poste de travail.Voyons maintenant comment importer le contenu actuel du projet dans le dépôt Subversion. Ce terme "importer" n'est pas très naturel si l'on se place du point de vue du développeur : on aurait tendance à penser qu'importer signifie récupérer quelque chose depuis le serveur vers son poste de travail. Mais dans le contexte Subversion il s'agit bien du contraire : envoyer depuis son poste de travail son projet vers le dépôt Subversion. Cette convention où l'on se place du point de vue du serveur est héritée de CVS (l'ancêtre de Subversion). Nous verrons plus loin pourquoi nous allons importé notre projet dans un répertoire trunk du dépôt Subversion, et non pas directement à la racine du dépôt. Retenez pour le moment que ce répertoire trunk est utilisé pour identifier l'axe de développement principal de notre projet. Cela le distingue d'autres répertoires qui seront utilisés pour gérer les étiquettes et les branches. Copie locale de travail Import Dépôt Subversion 4.1.1 Avec TortoiseSVN Depuis l'explorateur Windows, sélectionner le répertoire contenant votre copie de travail de travail, puis via le menu : 1. Fichier > Tortoise > Import 2. Choisir l'URL vers lequel vous allez copier votre projet : http://subversion.cru.fr/projetx/trunk (en remplaçant x par le numéro du poste de la salle de formation). Reste à ajouter votre commentaire (ex : import initial). Utilisez l'identifiant test_user et le mot de passe test_user si une fenêtre d'authentification s'affiche. Pour vérifier l'importation de votre projet local dans le dépôt du serveur Subversion, il suffit de consulter la page du dépôt http://subversion.cru.fr/projet-x. Le numéro de révision est 1 car le client a effectué une opération sur le dépôt. Comité Réseau des Universités Page 7 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Une autre vue du contenu du dépôt du serveur Subversion est disponible directement via TortoiseSVN : cliquez droit dans le répertoire du projet puis TortoiseSVN > Repo-browser. 4.1.2 Avec Subclipse Créez un projet Eclipse et puis associez-le avec le projet que vous avez créé sur le bureau Windows : 1. Lancez Eclipse en allant sur le bureau Windows dans le répertoire Eclipse puis doublecliquez sur l'icône Eclipse 2. File > New > Project... > General - Project > Next 3. saisissez projet-x comme dans 'Project name', décochez 'Use default location' et sélectionner le répertoire de votre projet que vous avez créé sur le bureau Windows 4. Finish Puis associez ce projet Eclipse avec votre dépôt Subversion : 1. dans la vue 'Package explorer' cliquez droit sur le répertoire mon-projet 2. Team > Share Project... > SVN > Next > Create a new repository location > Next 3. dans le champ URL saisissez http://subversion.cru.fr/projet-x (en remplaçant x par le numéro du poste de la salle de formation) ; si la fenêtre 'Accept Digital Certificate' apparaît, cliquez 'Accept Permanently' ; si une fenêtre d'authentification apparaît, utilisez l'identifiant test_user et le mot de passe test_user. 4. dans la fenêtre 'Enter Folder Name', cochez 'Use specified folder name' et saisissez trunk 5. Finish 6. une fenêtre 'Commit to...' apparaît ; vous pouvez modifier le message de commit ; cliquez sur OK. Utilisez l'identifiant test_user et le mot de passe test_user si une fenêtre d'authentification s'affiche. Pour vérifier que l'importation de votre projet local dans le dépôt du serveur Subversion est réussie vous pouvez vérifier : ● avec un navigateur que la page du dépôt http://subversion.cru.fr/projet-x affiche bien le contenu de votre projet ; le numéro de révision est 2 car le client Subclipse a en fait effectué deux opérations successives : 1. la création du répertoire trunk sur le dépôt, 2. l'importation des fichiers de votre projet dans le dépôt (le commit proprement dit) ● que la vue 'Console' d'Eclipse affiche les commandes Subversion effectué par le client Subclipse : vous pouvez voir les deux opérations réalisées par le client Subclipse Comité Réseau des Universités Page 8 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 mentionnées sur le point précédent ● Subclipse propose une vue directe du contenu du dépôt du serveur Subversion : Windows > Open Perspective > Other... > SVN Repository Exploring Pour une raison inexpliquée, les propriétés de versionning des données (author, revision, date) ne s'affichent pas systématiquement, à droite des fichiers et répertoires dans la vue navigateur. Pour y remédier, il est nécessaire de relancer eclipse. Cette imporation étant effectuée, vous pouvez supprimer entièrement votre projet en local car il est désormais enregistré dans le dépôt du serveur Subversion : ● avec TortoiseSVN : il suffit de sélectionner le répertoire de votre copie de travail et de le supprimer. ● avec Subclipe : dans la vue 'Package Explorer', cliquez droit sur le répertoire mon-projet puis Delete puis en choisissant 'Also delete contents under...'. 4.2 Récupérer sur son poste de travail un projet contenu dans un dépôt Subversion Plaçons-nous maintenant dans la situation où l'on souhaite récupérer un projet contenu dans un dépôt Subversion afin de travailler avec sur notre poste de travail. Dans la terminologie Subversion, cela s'appelle récupérer une copie de travail (en Anglais : checkout a working copy). Copie de travail Une copie de travail est le contenu d'un dépôt Subversion à une révision donnée. Au niveau du poste de travail, une copie de travail se présente dans le système de fichier comme un répertoire qui contient les fichiers et répertoires du projet, ainsi que des méta informations qui permettront notamment au client Subversion de reporter vers le dépôt du serveur Subversion les modifications que l'on apportera à la copie de travail. Nous allons réutiliser le projet que nous venons d'importer dans le serveur Subversion, en récupérant une copie de travail sur son poste de travail. Copie locale de travail Comité Réseau des Universités checkout Dépôt Subversion Page 9 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 4.2.1 Avec TortoiseSVN 1. Créer le répertoire dans lequel vous voulez enregistrer votre copie de travail 2. Cliquez droit sur ce répertoire puis SVN Checkout 3. Dans le champ URL, saisissez http://subversion.cru.fr/projet-x/trunk (changez le x avec le numéro de votre poste dans la salle de formation) ; si une fenêtre d'authentification apparaît, utilisez l'identifiant test_user et le mot de passe test_user. 4. Vérifier dans le contenu du répertoire que vous avez bien récupéré le contenu du dépôt. 4.2.2 Avec Subclipse Commencez par avoir une Perspective de votre dépôt Subversion dans Eclipse : 1. Windows > Open Perspective > Other... > SVN Repository Exploring > OK 2. Dans la vue 'SVN Repository' cliquez droit puis New > Repositoy Location... 3. Dans le champ URL, saisissez http://subversion.cru.fr/projet-x/trunk (changez le x avec le numéro de votre poste dans la salle de formation) ; si une fenêtre d'authentification apparaît, utilisez l'identifiant test_user et le mot de passe test_user Vous pouvez voir dans la vue 'SVN Repository' votre dépôt Subversion et son contenu. Notez que pour le moment rien n'a été téléchargé sur votre poste, il s'agit simplement d'une vue du contenu du dépôt sur le serveur Subversion. Pour en créer une copie de travail locale : 1. Dans la vue 'SVN Repository' cliquez droit sur l'URL de votre dépôt puis Checkout... 2. Chosissez 'Check out as a project in the workspace'. Notez que vous pouvez spécifier un numéro de Revision, en laissant coché 'Head Revision' vous récupérez la dernière révision disponible dans le dépôt. 3. Finish Subclipse récupère ainsi la dernière révision contenue dans le dépôt et créé une copie de travail dans votre workspare Subversion. Pour voir cette copie de travail Windows > Show View > Navigator. TortoiseSVN et Subclipse « comprennent » qu'une copie de travail est liée à un dépôt Subversion grâce à la présence d'un répertoire caché .svn dans le répertoire de la copie de travail. C'est ce répertoire .svn qui contient les méta données Subversion associées à la copie de travail. Chaque sous-répertoire de la copie de travail contient également un dossier caché .svn. A tout moment il est possible de vérifier de quel dépôt est issu une copie de travail : ● avec TortoiseSVN : cliquez droit sur le répertoire de votre copie de travail puis Propriétés, ouvrez le deuxième onglet « Subversion » Comité Réseau des Universités Page 10 / 32 Formation "Utilisation d'un client Subversion" ● Paris, 27 juin 2007 avec Subclipse : dans la vue "Navigator" ou "Project Explorer" cliquez droit sur le répertoire de la copie de travail, puis Properties > Subversion. Dans cet exercise, en spécifiant l'URL http://subversion.cru.fr/projet-x/trunk nous n'avons en fait récupéré que le répertoire trunk du dépôt http://subversion.cru.fr/projet-x. Notre copie de travail n'est associé qu'à un répertoire du dépôt. Notez qu'il est donc possible de ne faire une copie de travail que d'une partie d'un dépôt Subversion. C'est intéressant de le faire quand l'ensemble d'un dépôt est volumineux et que l'on n'a besoin de ne travailler que sur une partie. 4.3 Modifier le contenu de sa copie de travail et ensuite enregistrer ces modifications dans le dépôt L'application des modifications d'une copie de travail vers le dépôt se fait en deux temps. D'abord les modifications proprement dites dans la copie de travail, puis leur enregistrement dans le dépôt avec l'opération commit. C'est l'opération sans doute la plus courante dans l'utilisation de Subversion. Copie locale de travail commit Dépôt Subversion 4.3.1 Avec TortoiseSVN 1. Modifiez le fichier contenu dans votre copie de travail 2. Cliquez droit sur le répertoire trunk puis SVN Commit... 3. Dans le champ message vous pouvez saisir un message de log associé à cette opération puis OK 4. La fenêtre suivante vous indique les opérations effectuées, et se termine par l'état et le numéro de version. 4.3.2 Avec Subclipse Les modifications se réalisent comme si la copie de travail n'avait aucun lien avec Subversion. Par exemple pour éditer le fichier document.txt : 1. Dans la vue Navigator, cliquez droit sur le fichier document.txt puis Open 2. Ajouter une ou plusieurs lignes de texte à votre fichier Pour enregistrer ces modifications au dépôt Subversion, il faut réaliser une opération de commit. C'est l'une des commandes que l'on utilise le plus souvent avec Subversion : Comité Réseau des Universités Page 11 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 1. Dans la vue Navigator, cliquez droit sur le projet trunk, puis Team > Commit... 2. Dans la fenêtre 'Commit to', saisissez un commentaire et vérifier que le fichier que vous avez modifié est coché, puis cliquez sur OK Avec un navigateur web vous pouvez vérifier que le fichier dont vous venez d'enregistrer les modifications a bien été modifié dans le dépôt du serveur Subversion. Révisions et numéros de révision Notez également que le numéro de révision a augmenté. A chaque modification du dépôt, Subversion incrémente en effet d'une unité le numéro de révision du dépôt, quelque soit le nombre de fichiers concernés par la modification. Une révision identifie donc l'ensemble du dépôt dans un état donné au cours du temps. Le dépôt d'un Subversion contient l'ensemble des révisions d'un projet créées au cours du temps. Elles ne sont pas chacune stockées intégralement, mais pour la plupart sous la forme des différences avec la révision précédente. Faîtes de nouvelles modifications dans votre copie : édition, suppression, renommage d'un fichier ou d'un répertoire. Après chacune de ces opérations il faut effectuer un commit pour qu'elle soit enregistrée dans le dépôt. Vérifiez que vous pouvez appliquer un commit sur un seul fichier, sur un répertoire et toute sa sousarborescence, sur un groupe de fichiers et/ou répertoires, sur l'ensemble de la copie de travail. Attention, l'ajout d'un fichier ou d'un répertoire demande une étape supplémentaire : il faut en effet spécifier à ToirtoiseSVN et Subclipse que le fichier ou répertoire nouvellement créé à vocation à être enregistré dans le dépôt Subversion lors du prochain commit. Pour cela, après avoir créé le fichier dans la copie de travail : ● avec TortoiseSVN : cliquez droit sur le fichier puis TortoiseSVN > Add... puis OK ● avec Subclipse : cliquez sur le fichier puis Team > Add to Version Control Commit atomique Un intérêt de Subversion est que l'opération de commit est atomique. Cela signifie que soit l'opération réussit entièrement, et dans ce cas l'ensemble des enregistrements à effecuer dans le dépôt est réalisé, soit l'opération échoue (au début, au milieu ou en cours des modifications) et dans ce cas aucune modification n'est appliquée sur le dépôt. Grâce à cette propriété l'on est assuré que jamais le dépôt ne sera retrouvera dans un état intermédiaire non souhaité. À quel rythme faut-il effectuer des commit ? Les "bonnes pratiques" de développement invitent à effectuer ses commits souvent, et dans la Comité Réseau des Universités Page 12 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 mesure du possible en groupant dans un même commit les modifications qui correspondant à une même fonctionnalité. L'idéal est de tester et valider en local ses modifications avant d'appliquer l'enregistrement dans le dépôt avec le commit. Lorsqu'il y a plusieurs développeurs des commits réguliers simplifient la gestion des conflits et facilitent le suivi du travail des uns et des autres. Faut-il renseigner les messages de log lors d'un commit ? Oui c'est important pour les autres développeurs et pour vous plus tard lorsque vous consulterez l'historique des messages de log de votre dépôt. Un message de log ne doit pas décrire l'opération effectuée ("édition du fichier main.c") mais plutôt la raison de l'opération ("correction d'un bogue #245"). En fait il est possible avec Subversion de connaître quelle opération est associée à un message de log, et sur quels fichiers et/ou répertoires elle porte. Il est donc redondant d'écrire cette information dans le message de log. Voyez par exemple les instructions données aux développeurs de Subversion (le projet Subversion est géré lui-même dans un dépôt Subversion) : http://subversion.tigris.org/hacking.html#log-messages Avec TortoiseSVN il est possible d'empêcher un commit tant qu'un message de log est vide, voir http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-howto-minlogmsgsize.html#tsvn-howtominlogsize-projectproperties. 4.4 Ne pas enregistrer certains fichiers et répertoires de sa copie de travail dans le dépôt Lorsque l'on développe sur son poste de travail dans sa copie de travail, un certain nombre de fichiers et répertoires n'ont pas forcément vocation à être enregistrés dans le dépôt du serveur Subversion, par exemple des fichiers temporaires ou des données de test. Subversion offre un mécanisme pour empêche de se voir proposer l'ajout de ces fichiers à chaque opération de commit. 4.4.1 Avec TortoiseSVN 1. Créez un fichier file.tmp dans votre copie de travail 2. Cliquez droit sur ce fichier puis TortoiseSVN > Add to ignore list 3. TortoiseSVN vous propose de n'ignorer que ce fichier ou tous les fichiers ayant la même extension. 4. Editer un autre fichier puis effectuez un commit sur le réperoitre de votre copie de travail : le fichier file.tmp n'apparaîtra pas dans la liste des fichiers de la boîte de dialogue de commit Comité Réseau des Universités Page 13 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Vous pouvez effectuer l'opération inverse en cliquant droit sur le fichier puis TortoiseSVN > Remove from ignore list. 4.4.2 Avec Subclipse 1. Créez un fichier file.tmp dans votre copie de travail : dans la vue 'Navigator' cliquez droit sur le répertoire racine de votre projet puis New > File 2. Cliquez droit sur ce fichier puis Team > Add to svn:ignore 3. Subclipse vous propose alors de choisir de n'ignorer que ce fichier, tous les fichiers avec une certaine extension ou de définier un modèle de noms de fichiers à ignorer. Consultez la documentation pointée dans cette boître de dialogue si vous voulez en savoir plus sur ces différentes options. 4. Editer un autre fichier puis effectuez un commit, le fichier file.tmp n'apparaîtra pas dans la liste des fichiers de la boîte de dialogue de commit Que doit-on conserver dans le dépôt ? Une règle simple est de ne pas enregistrer ce qui peut être automatiquement généré, des fichiers compilés ou de la documentation Javadoc par exemple. Outre l'alourdissement inutile du dépôt et le fait que le reste du contenu permet de les reconstituer, il y a toujours des risques que ces fichiers ne soient pas à jour par rapport à leurs sources dans une révision si les développeurs ne prennent pas soin de systématiquement les régénérer avant chaque commit. Inversement on aura intérêt à enregistrer dans le dépôt tout ce qui susceptible de changer au cours du temps et qui ne peut être automatiquement généré à partir du reste : code, documentation, ce qui peut servir au déploiement de l'application (script d'installation par exemple). 4.5 Suivre les modifications apportées sur sa copie de travail depuis le moment où l'on a réalisé l'enregistrement précédent ou fait le checkout Lorsque l'on travaille sur sa copie de travail, les modifications que l'on apporte peuvent être importantes. Parfois, avant de réaliser leur enregistrement dans le dépôt via un commit, on peut vouloir vérifier quelles sont les modifications que l'on a effectuées depuis le moment où l'on a réalisé l'enregistrement précédent ou fait le checkout. 4.5.1 Avec TortoiseSVN Plusieurs moyens sont possibles : ● Après un rafraîchissement de l'affichage avec la touche F5, des icônes indiquent le statut de Comité Réseau des Universités Page 14 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 chaque fichier et répertoire de la copie de travail ayant changé. Consultez la page http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-dug-wcstatus.html#tsvn-dugwcstatus-1 pour connaître la signification de ces icônes. ● En cliquant droit sur le fichier ou répertoire puis Propriétés dans l'onglet Subversion vous pouvez voir son statut dans le champ Text Status. ● On peut aussi lancer la commande commit sans la valider, car elle affiche l'état des différents fichiers qui ont changé (créés, supprimés, modifiés, renommés). 4.5.2 Avec Subclipse Il existe plusieurs méthodes : ● Pour chaque fichier et répertoire Subclipse affiche dans les vues 'Navigator' et 'Project Explorer' des icônes différentes selon qu'un fichier ou un répertoire ait été modifié, supprimé, ajouté... depuis le moment où l'on a réalisé l'enregistrement précédent ou fait le checkout. Attention ces icônes ne sont pas systématiquement mis à jour, utilisez la fonction Refresh d'Eclipse pour avoir une vue à jour. ● De plus à droite du nom du fichier apparaissent plusieurs informations : le numéro de la dernière révision à laquelle le fichier a changé (édition, création, renommage...), la date et l'auteur de cette modification. ● Toutes les informations relatives à Subversion pour un fichier ou répertoire d'une copie de travail sont visibles en cliquant droit sur le fichier ou répertoire puis Properties > Subversion. ● On peut aussi lancer la commande commit sans la valider, car elle affiche l'état des différents fichiers qui ont changé (créés, supprimés, modifiés, renommés). Pour chaque fichier, on peut voir les différences, ligne à la ligne, entre la version actuelle et la version de l'enregistrement précédent ou du checkout. Pour cela, modifiez un fichier, puis : 1. avec TortoiseSVN :cliquez droit sur le fichier puis TortoiseSVN > Diff 2. avec Subclipse : cliquez droit sur le fichier puis Compare With > Base Revision Une vue des différences apparaît alors. Pristine copies Cette fonctionnalité de comparaison est possible car dans les méta données .svn d'une copie de travail sont contenues les versions originales de chaque fichier. C'est ce qu'on appelle les pristine copies. Leur numéro de révision est identifié par le mot-clé 'BASE'. C'est par rapport à ces pristine copies qu'est effectuée l'opération de comparaison. Leur existence dans les copies de travail Comité Réseau des Universités Page 15 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 permettent à un client Subversion d'effectuer plusieurs opérations sans avoir à contacter le serveur. 4.6 Annuler des modifications réalisées sur la copie de travail Grâce à ces pristine copies, il est possible d'annuler des modifications réalisées dans votre copie de travail depuis sa dernière mise à jour. Editez un ou plusieurs fichiers de votre copie de travail. Vous allez maintenant pouvoir annuler ces modifications grâce à la commande revert de votre client Subversion. 4.6.1 Avec TortoiseSVN Sélectionnez un fichier vu comme tel, puis : 1. Menu TortoiseSVN > Revert 2. Selectionnez les fichiers pour lesquels vous voulez annuler les modifications 4.6.2 Avec Subclipse Pour annuler les modifications sur lesquelles vous souhaitez revenir : 1. sélectionnez le ou les fichiers qui ont été modifiés 2. cliquez droit et choisissez Team > Revert... > OK Pour annuler toutes les modifications de la copie locale, il suffit dans l'étape 1 de sélectionner le répertoire racine du projet. 4.7 Consulter l'historique des modifications du dépôt Subversion enregistre toutes les opérations effectuées sur le dépôt. Pour chaque modification, son auteur associe un message de log. Il est possible de consulter l'historique des modificiations pour un dépôt dans son ensemble, pour un fichier ou un répertoire. 4.7.1 Avec TortoiseSVN 1. Cliquez droit sur l'élément dont vous voulez connaître l'historique (répertoire de la copie locale, sous-répertoire, fichier) puis TortoiseSVN > Show log. Une fenêtre présente un tableau des messages de log des opérations en relation avec l'élément sélectionné, avec dates, auteurs et messages de logs de ces modifications. Comité Réseau des Universités Page 16 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 4.7.2 Avec Subclipse 1. Dans les vues 'Navigator', 'Package Explorer' cliquer droit sur le projet, le fichier ou le répertoire dont vous voulez connaître l'historique des modifications, puis Team > Show History 2. La vue 'History' s'affiche en indiquant les numéros de révisions auxquelles l'élément a été modifié (ou créé, renommé...), avec les dates, auteurs et messages de logs de ces modifications. Comité Réseau des Universités Page 17 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 5 Travailler à plusieurs sur un dépôt Les opérations décrites dans le chapitre précédent permettent d'utiliser Subversion lorsque l'on travaille seul sur un dépôt. Cependant elles deviennent insuffisantes pour gérer l'utilisation d'un dépôt par plusieurs développeurs sur un même projet. L'objectif de ce chapitre est de vous fournir les commandes et bonnes pratiques qui simplifient le travail à plusieurs sur un dépôt Subversion. Vous verrez quel cycle de commande typique un développeur doit suivre pour minimiser les risques de conflit, gérer ces conflits quand ils surviennent, et comment retrouver l'auteur d'une modification précise. Vous allez simuler un travail entre deux développeurs sur votre projet en créant une seconde copie de travail sur votre poste de travail. Pour cela reprenez les instructions du chapitre "Récupérer sur son poste de travail un projet contenu dans un dépôt Subversion" en prenant soin de choisir un nom différent du répertoire (avec TortoiseSVN) ou projet (pour Eclipse "Project Name") de votre première copie de travail. Par exemple suffixez avec '2' le nom de votre seconde copie de travail.N'apportez pour le moment aucune modification à cette nouvelle copie de travail. Avec les clients TortoiseSVN et Subclipse une session utilisateur unique est partagée pour les accès des différentes copies de travail. Les modifications au dépôt apportées via vos deux copies de travail auront donc le même auteur, mais cela ne change en rien les mécanismes décrits par la suite. 5.1 Mettre à jour son dépôt Lorsque plusieurs développeurs travaillent sur un même dépôt, il est important que chacun s'assure que sa copie de travail soit la plus à jour possible avant qu'il ne commence à retravailler dessus. Pour cela, un développeur, quand il souhaite apporter de nouvelles modifications à son projet dans le dépôt, pourrait supprimer sa copie de travail et refaire une copie de travail en récupérant la dernière révision disponible avec un checkout. Subversion propose une façon de faire plus simple et rapide au travers de la commande update. Elle permet de mettre à jour une copie de travail existante : le client Subversion met à jour la copie de travail en interrogeant le dépôt Subversion pour récupérer la dernière révision disponible. Pour utiliser la commande update : ● avec TortoiseSVN : cliquez droit sur le répertoire de votre copie de travail puis SVN Update ● avec Subclipse : dans la vue 'Navigator' ou 'Package Explorer' cliquez droit sur le répertoire racine de votre copie de travail puis Team > Update Vérifiez l'intérêt de cette commande update au travers de l'exercice suivant : 1. faîtes un update sur chacune de vos deux copies de travail pour les positionner à la même révision. 2. apportez des modifications dans votre première copie de travail puis enregistrez-les dans le dépôt Comité Réseau des Universités Page 18 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 3. appliquez un update dans votre seconde copie de travail et vérifiez que les modifications effectuées dans votre première copie de travail ont été répercutées dans la seconde copie de travail Dans ce scénario, le développeur de la seconde copie de travail n'a rien modifié dans sa copie de sauvegarde entre le moment où il a fait son premier update (étape 1 ci-dessus) et celui où il refait un update qui ramène les modifications du premier développeur (étape 3). Bien sûr dans la "vraie vie" (si l'on peut dire ça en parlant d'informatique...) cela ne se passe pas toujours ainsi et des collisions peuvent avoir lieu. Nous allons voir maintenant comment gérer ces cas avec Subversion. 5.2 Gestion des conflits Dans la terminologie Subversion, un conflit désigne la situation où deux développeurs ont modifié en parallèle le même fichier dans leur copie de travail, et ensuite l'enregistrent l'un après l'autre dans le dépôt : les modifications du second enregistrement vont potentiellement détruire les modifications qui ont été enregistrées en premier. Subversion propose deux mécanismes pour gérer cette situtation : un fonctionnement par défaut, l'optimistic locking, et un système de verrouillage locking. L'optimistic locking sera expliqué en cours de journée dans la présentation PowerPoint. Prévenez les formateurs quand vous êtes rendus ici si cette partie n'a pas encore été exposée. L' optimistic locking et le locking sont présentés dans le manuel de référence, où l'optimistic locking est appelé "Copy-Modify-Merge Solution" et le locking "The Lock-Modify-Unlock Solution" : http://svnbook.red-bean.com/nightly/en/svn.basic.vsn-models.html Ce manuel rappelle également les trois sens différents du mot lock que l'on peut rencontrer dans Subversion : http://svnbook.red-bean.com/nightly/en/svn.advanced.locking.html#svn.advanced.locking.meanings 5.2.1 Optimistic locking dans le cas où des modifications concernent des lignes différentes d'un fichier Suivez le scénario suivant pour comprendre de l'optimistic locking de Subversion dans le cas où les modifications concernent des lignes différentes d'un même fichier : 1. faîtes un update sur chacun de vos copies de travail pour vous assurer qu'elles sont à jour 2. éditez dans chacune le même fichier, mais sur des lignes différentes (par exemple la première pour la première copie de travail, et la dernière pour la seconde copie de travail) 3. faîtes un commit pour appliquer les modifications de la première copie de travail dans le Comité Réseau des Universités Page 19 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 dépôt 4. faîtes un commit pour appliquer les modifications de la seconde copie de travail dans le dépôt : une erreur "Merge conflict during commit" s'affiche. Elle signifie que le fichier que vous essayer d'enregistrer dans le dépôt a changé dans le dépôt depuis la dernière fois que vous avez fait un update de votre copie de travail. 5. faîtes un update de votre seconde copie de travail, aucun message d'erreur ne doit s'afficher. Vous pouvez vérifier le contenu de votre fichier pour constater que votre client Subversion a fusionné les modifications du fichier issu du dépôt (qui incluait les modifications effectuées dans la première copie de travail) avec vos modifications locales. 6. vous pouvez ensuite effectuer un commit de votre seconde copie de travail pour enregistrer dans le dépôt le fichier incluant les deux modifications. La fusion réalisée par Subversion est uniquement syntaxique Subversion réalise la fusion de deux versions d'un fichier sans déclencher d'erreur quand ce sont des lignes différentes qui diffèrent. Cependant cette fusion automatique n'empêche pas bien sûr d'introduire potentiellement des bogues dans votre fichier, dans le cas où les modifications fusionnées sont contradictoires dans la conception de votre programme. 5.2.2 Optimistic locking dans le cas où des modifications concernent les mêmes lignes d'un fichier Suivez le scénario suivant pour comprendre de l'optimistic locking de Subversion dans le cas où les modifications concernent les mêmes lignes d'un même fichier : 1. faire un update sur chacun de vos copies de travail pour vous assurer qu'elles sont à jour 2. dans chaque copie de travail, éditer la même ligne du même fichier (par exemple la première) en y écrivant des choses différentes 3. faîtes un commit pour appliquer les modifications de la première copie de travail dans le dépôt 4. faîtes un commit pour appliquer les modifications de la seconde copie de travail dans le dépôt : une erreur ("Commit failed (details follow)" pour TortoiseSVN, "Merge conflict during commit" pour Subclipse) s'affiche. Elle signifie que le fichier que vous essayer d'enregistrer dans le dépôt a changé dans le dépôt depuis la dernière fois que vous avez fait un update de votre copie de travail. 5. faîtes un update de votre seconde copie de travail. Avec TortoiseSVN s'affiche le message "One or more files are in conflicted state", avec Subclipse aucun message d'erreur ne s'affiche. Dans les deux cas, votre fichier a été largement modifié : Subversion y a inclut des séquences particulières. D'autre part d'autres fichiers ont été créés, qui n'ont pas vocation à être enregistrés dans le dépôt, mais qui permettent de bien identifier les différentes versions Comité Réseau des Universités Page 20 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 du fichier : 1. un fichier .mine qui est la version que vous vous apprêtiez à commiter 2. un fichier suffixé par le numéro de révision du dernier update de votre copie de travail 3. un fichier suffixé par le numéro de révision de la dernière révision disponible dans le dépôt 6. Subversion a bien sûr été incapable de choisir laquelle des modifications d'une même ligne devait être retenu. C'est à l'équipe de développeur de se mettre d'accord sur le résultat à retenir. Pour notre exemple faîtes un choix arbitraire en nettoyant le fichier des lignes insérés par Subversion et en retenant celles que vous souhaitez. 7. Une fois ce choix appliqué dans la copie de travail, effectuez un commit de votre copie de travail pour enregistrer dans le dépôt le fichier. Avec TortoiseSVN l'erreur "Aborting commit" s'affiche, avec Subclipse l'erreur "A conflict in the working copy obstructs the current operation". Elle signifie qu'il faut indiquer explicitement au client Subversion que le fichier n'est désormais plus 'en conflit'. Pour cela : ● avec TortoiseSVN : cliquez droit sur le fichier puis TortoiseSVN > Resolved... ● avec Subclipse : cliquez droit sur le fichier puis Team > Mark Resolved 8. Une fois ceci fait vous pouvez appliquer votre commit pour enregistrer le fichier dans le dépôt. L'intérêt de l'optimistic locking Cette façon de procéder pour gérer les conflits potentiels peut paraître peu naturelle et peu fiable. Cependant en pratique elle fonctionne bien (au point donc que cela soit le mode de fonctionnement par défaut de Subversion) : un bon découpage des tâches entre développeurs dans un projet implique qu'il doit être rare que deux développeurs modifient simultanément les mêmes lignes d'un fichier. L'expérience d'un système de locking explicite de verrouillage de fichier (empêchant un autre développeur de travailler sur un même fichier) présente en pratique plus d'inconvénients que d'avantages, notamment à cause des oublis de déverouillage. 5.2.2.1 La vue Synchronize with Repository d'Eclipse Avec la vue Synchronize with Repositroy, Eclipse offre des outils performants pour simplifier la gestion des modifications concurrentes sur un dépôt Subversion. Voici un exemple d'utilisation en reprenant le scénario précédant : 1. réitérez les opérations 1, 2 et 3 du paragraphe 5.2.2 2. cliquez droit sur la racine de votre seconde copie de travail puis Team > Synchronize with Repository. En bas de la fenêtre Eclipse apparaissent trois flèches de différentes couleurs et un chiffre à côté de chaque. La troisième, en rouge, donne le nombre de fichiers en conflit Comité Réseau des Universités Page 21 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 entre la seconde copie de travail et le dépôt. 3. Dans la vue Synchronize double cliquez sur le fichier marqué d'une icône rouge. Il apparaît une vue où la version locale du fichier et celle du dépôt sont mises en vis-à-vis. Vous pouvez naviguer entre les différents parties qui divergent. Cela facilite grandement l'intégration ou la non intégration de modifications dans une copie de travail, quand ces modifications concernent des fichiers de grande taille. Modifier votre fichier pour retenir les modifications que vous souhaitez. 4. Cliquez droit sur le fichier puis Team > Mark as Merged 5. Dans la vue Navigator cliquez droit sur le fichier puis Team > Commit pour enregistrer votre fichier dans le dépôt. 5.2.3 Locking La nécessité du locking dans certaines situations Il existe parfois des situations où un système de verrouillage explicite est utile. Par exemple pour les fichiers binaires où il est impossible de réaliser une fusion ligne à ligne. Ou lorsque la notification d'un bogue de sécurité critique peut amener deux développeurs à vouloir simultanément corriger ce bogue. Dans ce cas il peut être utile pour le premier développeur qui intervient, de verrouiller le fichier afin de terminer sa correction sans avoir à gérer d'interaction avec d'autre développeur. Nous ne détaillons pas dans cette formation l'utilisation du locking dans Subversion mais vous pouvez consultez les documentations en ligne suivantes pour vous exercer sur le locking à l'aide de vos deux copies de travail : ● manuel de référence de Subversion : http://svnbook.red-bean.com/nightly/en/svn.advanced.locking.html ● documentation de TortoiseSVN : http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-dug-locking.html ● pour Subclipse : le locking est supporté dans Subclipse mais pas documenté. Vous pouvez essayer de suivre la documentation de TortoiseSVN en l'adaptant au contexte Subclipse. La commande Lock est accessible dans le menu contextuel Team. 5.2.4 Cycle de travail typique avec Subversion Tout ce que nous avons vu jusqu'à présent permet d'établir un cycle de travail typique avec Subversion. Il s'agit d'un enchaînement de commandes qu'il est recommandé de suivre pour minimiser les risques de conflits et de blocage. Il commence au moment où un développeur souhaite travailler sur sa copie de travail et s'achève au moment où il enregistre ses modifications dans le dépôt : Comité Réseau des Universités Page 22 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 1. mise à jour de sa copie de travail avec update pour être sûr d'avoir la dernière révision disponible dans le dépôt, incluant les éventuelles dernières modifications faîtes par d'autres développeurs. 2. travail sur sa copie de travail : édition/création/ajout/suppression/renommage de fichiers et répertoires 3. visualisations des modifications par rapport à l'état initial de sa copie de travail et éventuellement l'état actuel du dépôt 4. mise à jour de sa copie de travail via update pour détecter d'éventuels conflits, puis dans ce cas résolution des conflits 5. enregistrement des modifications avec commit 6. retour à l'étape 1 5.3 Qui a changé quelle ligne ? La commande blame de Subversion est très utile. En Anglais "blame" signfier accuser... Elle permet de savoir, pour un fichier donné, qui est l'auteur de la dernière modification de chaque ligne. Les joies du travail en équipe amènent en effet parfois à devoir investiguer jusqu'à ce niveau de détail. Dans notre situation simplifiée où le même utilisateur travaille sur les deux copies de travail, l'accusé est tout désigné et l'application de cette commande ne révélera pas grand chose. Voici quand même la façon d'utiliser cette commande. 5.3.1 Avec TortoiseSVN 1. Cliquez droit sur le fichier puis TortoiseSVN > Blame... 2. Cliquez OK dans la fenêtre qui apparaît. Elle permet de définir la fenêtre des révisions sur laquelle on veut connaître l'auteur des modifications. Le choix par défaut est tout l'historique du dépôt. 3. La fênetre qui s'affiche liste pour chaque ligne du fichier l'auteur de la dernière modification de la ligne et la révision à laquelle a eu lieu cette modification. Consultez la documentation http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-dug-blame.html pour connaître toutes les possibilités d'inspection offertes. 5.3.2 Avec Subclipse 1. Cliquez droit sur le fichier puis Team > Show Annotate 2. Dans la vue du fichier qui s'affiche, placez la souris à gauche d'une ligne pour voir apparaître le nom de l'auteur et la date de la dernière modification de cette ligne. Comité Réseau des Universités Page 23 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 6 Gérer le cycle de développement d'un logiciel Le développement d'un logiciel est ponctué par la diffusion de versions, l'ajout de nouvelles fonctionnalités, la correction de bogues... Les outils de gestion de version (tel Subversion) permettent l'utilisation d'étiquettes (tags en Anglais) et de branches pour faciliter la gestion de ces différentes opérations. Tout le reste... La problématique de la diffusion d'un logiciel dépasse largement la seule gestion des versions des sources. Le passage à un produit diffusable a été présenté lors du premier tutoJRES http://www.jres.org/doku.php?id=tuto/tuto1#comment_rendre_son_developpement_diffusable. Le document http://producingoss.com/html-chunk/index.html offre un panorama très complet sur la production d'un logiciel open source. Les étiquettes et les branches seront expliquées en cours de journée dans la présentation PowerPoint. Prévenez les formateurs quand vous êtes rendus ici et que cette partie n'a pas encore été exposée. 6.1 Les étiquettes 6.1.1 Création du répertoire tags Les étiquettes sont créées dans un répertoire tags situé à la racine du dépôt. Il s'agit d'une convention, les étiquettes pourraient être situées dans n'importe quel autre répertoire. Nous allons créer ce répertoire directement dans le dépôt, sans passer par une copie de travail local. 6.1.1.1 Avec TortoiseSVN 1. Depuis le bureau Windows cliquez droit puis TortoiseSVN > Repo-Browser 2. Cliquez droit puis TortoiseSVN > Import... 3. Dans le champ Url saisissez http://subversion.cru.fr/project-x/tags avec comme message de log 'Création du répertoire des étiquettes', puis OK 6.1.1.2 Avec Subclipse 1. Dans la vue 'SVN Repository' cliquez droit sur l'URL http://subversion.cru.fr/projet-x puis New > New remote folder de votre dépôt 2. Dans la fenêtre qui apparaît resélectionnez http://subversion.cru.fr/depot-x puis saisissez tags dans le champ 'Folder name' puis Next puis saisissez un commentaire (par exemple 'Création du répertoire des étiquettes'), puis Finish. Comité Réseau des Universités Page 24 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Vous pouvez voir avec un navigateur web à l'URL http://subversion.cru.fr/depot-x que le répertoire tags a bien été créé dans votre dépôt. Vous pouvez faire un update de votre copie de travail puis consultez son historique pour constater que le numéro de révision a été incrémenté d'une unité. C'est normal, car chaque opération qui modifie le dépôt créé une nouvelle révision. Effectuer des opérations directement sur le dépôt Cette opération montre qu'il est possible d'effectuer directement certaines opérations sur un dépôt, sans passer par une copie de travail : supprimer, renommer, déplacer des fichiers ou répertoies, créer des répertoires. Répétez la même opération pour créer à la racine du dépôt le répertoire branches qui sera utilisé plus tard. 6.1.2 Créer une étiquette La création d'un étiquette est une opération très simple. Nous prenons ici le cas où nous créons une étiquette de l'état actuel du dépôt dans le trunk. Nous nommerons cette étiquette REL-1.0 (pour Release 1.0). Faîtes d'abord un update sur votre copie locale pour la mettre à jour. 6.1.2.1 Avec TortoiseSVN 1. Cliquez droit sur le répertoire de votre copie de travail puis TortoiseSVN > Branch/tag... 2. Saisissez dans le champ 'To Url' l'adresse http://subversion.cru.fr/projet-x/tags/REL-1.0 3. Saisissez un message de log, par exemple "Création de l'étique pour la release 1.0' puis cliquez sur OK 4. Vérifiez avec un navigateur web dans http://subversion.cru.fr/projet-x/tags/ que l'étiquette a bien été créée 6.1.2.2 Avec Subclipse 1. Cliquez droit sur le répertoire de votre copie de travail puis Team > Branch/tag... 2. Saissiser dans le champ 'To Url' l'adresse http://subversion.cru.fr/projet-x/tags/REL-1.0 et cochez 'Working Copy' 3. Saisissez un message de log, par exemple "Création de l'étique pour la release 1.0' puis cliquez sur OK 4. Vérifiez avec un navigateur web dans http://subversion.cru.fr/projet-x/tags/ que l'étiquette a bien été créée Comité Réseau des Universités Page 25 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Quel nommage retenir pour les étiquettes (et les branches) ? Il n'y a pas de règles pré définies mais il est important au sein d'un projet de se mettre d'accord sur une convention de nommage des étiquettes et branches. Comment empêcher la modification d'une étiquette ? Le contenu d'une étiquette n'a pas vocation à priori à changer, puisqu'une étiquette sert à identifier le dépôt à un instant donné. Or les étiquettes n'étant que des copies de certaines révisions dans le répertoire tags, rien n'empêche à priori de les modifier. Il est possible de rendre les étiquettes du répertoire tags non modifiables en utilisant un hook script au niveau du serveur (les hook scripts sont abordés en fin de cette formation). En général les développeurs se contentent de se mettre d'accord pour ne pas modifier les étiquettes existantes. 6.1.3 Faire une version diffusable de son logiciel à partir d'une étiquette En général un logiciel est diffusé sous la forme d'un paquet ou d'une archive par exemple, les utilisateurs finaux ne vont pas dans un dépôt Subversion pour récupérer une étiquette. Pour préparer une version diffusable de son logiciel, il faut extraire du dépôt une étiquette. Pour cela la commande checkout n'est pas recommandée, car elle rapatrie les méta données Subversion qui sont inutiles hors du contexte de l'utilisation de Subversion. Il est préférable d'utiliser la commande export qui permet d'extraire depuis le dépôt une révision ou étiquette : ● avec TortoiseSVN : 1. Allez dans le vue Repository Browser : cliquez droit dans le répertoire du projet puis TortoiseSVN > Repo-browser 2. Cliquez droit sur le répertoire source de la version à diffuser (le trunk ou un sous répertoire de branches ou de tags) puis Export... 3. Spécifiez dans le répertoire local de destination dans le champ Export directory puis OK ● avec Subclipse : 1. Allez dans la vue SVN Repository Exploring : Windows > Open Perspective > Other... > SVN Repository Exploring 2. Cliquez droit sur le répertoire source de la version à diffuser (le trunk ou un sous répertoire de branches ou de tags) puis Export... 3. Spécifiez dans le répertoire local de destination dans le champ Export directory puis OK Comité Réseau des Universités Page 26 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 6.2 Les branches Les branches peuvent être vues comme une ligne de développement parallèle à la ligne de développement principale contenu dans le répertoire trunk du dépôt. Elles ont de multiples utilisations possibles mais leur emploi excessif peut engendrer de la confusion et des problèmes à terme (les instructions détaillées pour chaque client sont données par la suite). Voici un scénario pour découvrir l'utilisation des branches. Un bogue a été signalé aux développeurs et l'un d'entre d'eux se charge de le résoudre. Il semble complexe et long à corriger. Le faire directement dans la ligne de développement principal (le trunk) mettrait le code dans un état instable, empéchant sans doute les autres développeurs de continuer à travailler sur l'ajout de nouvelles fonctionnalités. Voici une méthode pour le développeur corrigeant le bogue qui lui permet de ne pas pertuber le travail dans le trunk (les instructions détaillées pour suivre le scénario sont données plus bas) : 1. le développeur crée une branche (du numéro du bogue tel qu'il est enregistré dans le gestionnaire de tickets du projet) 2. il créée une étiquette pour identifier le démarrage de la correction du bogue 3. il corrige le bogue dans la branche, en plusieurs itérations (commits) 4. il créée une étiquette pour identifier la fin de la correction du bogue 5. il utilise les deux tags pour fusionner la correction dans le trunk et éventuellement d'autres branches affectées par le bogue Suivez ces instructions pour mettre en application cette méthode : 1. Une branche se créée de la même façon qu'une étiquette. Reprenez les instructions du paragraphe "Créer une étiquette" en utilisant comme URL http://subversion.cru.fr/projetx/branches/BUG-214 pour créer une branche nommée BUG-214. 2. Récupérer dans une nouvelle copie de travail la branche que vous venez de créer. 3. A partir de cette copie de travail, créez une étiquette AVANT-214 pour identifier le démarrage de la correction du bogue. 4. Editez plusieurs fichiers dans la copie de travail de la branche en appliquant plusieurs commits successifs. Notez que les numéros de version restent globaux à l'ensemble du dépôt. 5. Créez une nouvelle étiquette APRES-214 pour identifier la fin de la correction du bogue. 6. Utilisez les deux étiquettes AVANT-214 et APRES-214 pour fusionner la correction dans le trunk en suivant les instructions suivantes : ● avec TortoiseSVN : cliquez droit sur votre copie de travail correspondant au trunk puis TortoiseSVN > Merge.... Dans la fenêtre spécifiez http://subversion.cru.fr/projet- Comité Réseau des Universités Page 27 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 x/tags/AVANT-214 dans le champ 'Start Url' et http://subversion.cru.fr/projetx/tags/APRES-214 dans le champ 'End Url' (pour cela décochez la case 'Use From Url') puis cliquez sur Merge. ● Avec Subclipse : cliquez droit sur votre copie de travail correspondant au trunk puis Team > Merge.... Dans la fenêtre spécifiez http://subversion.cru.fr/projetx/tags/AVANT-214 dans le champ 'Start Url' et http://subversion.cru.fr/projetx/tags/APRES-214 dans le champ 'End Url' (pour cela décochez la case 'Use From Url') puis cliquez sur Merge. 7. Vous pouvez vérifiez dans votre copie de travail correspondant au trunk que les modifications ont bien été appliquées. Si vous aviez d'autres branches dans lesquelles il faudrait reporter la correction du bogue, il suffirait d'y refaire l'opération de merge de la même manière. Dans ce scénario la création et l'utilisation des étiquettes AVANT et APRES n'est pas indispensable, on aurait pu utiliser à la place les numéros de révision de création de la branche et de fin d'édition dans la branche. Le risque est de se tromper de numéro de révision lors du merge. Nous vous conseillons la lecture du chapitre http://svnbook.redbean.com/nightly/en/svn.branchmerge.html du manuel de référence en ligne si vous souhaitez mieux comprendre l'utilisation des branches et des fusions. 6.3 Créer et appliquer des patchs En général un dépôt Subversion n'est accessible en écriture qu'à un certain nombre de développeurs. Il peut être ouvert en lecture seule à une population plus grande, voir à tout le monde. Ainsi certains utilisateurs peuvent récupérer des révisions depuis le dépôt pour corriger des bogues ou ajouter de nouvelles fonctionnalités au produit. Cependant ils n'ont pas les droits pour écrire leurs modifications dans le dépôt. Ils soumettent aux développeurs du produit leur modification sous forme de patch. Un patch regroupe les différences entre les fichiers modifiés par l'auteur de la modification et les fichiers tels qu'il les a récupés depuis le dépôt. Cette forme facilite la tâche d'un développeur du projet pour appliquer les modifications dans le dépôt. Pour comprendre comment créer un patch et l'appliquer nous allons suivre le scénario simplifié suivant : 1. considérer que la première copie de travail est celle d'un contributeur qui ne peut pas écrire dans le dépôt et que la seconde est celle d'un développeur pouvant écrire dans le dépôt 2. modifier la première copie de travail pour simuler la correction d'un bogue 3. créer un patch 4. appliquer ce patch dans la seconde copie de travail 5. enregistrer les modifications dans la seconde copie de travail Comité Réseau des Universités Page 28 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 Commencez par faire un update de vos deux copies de travail, puis modifiez au moins deux fichiers dans la première. Les deux premières étapes du scénario sont réalisées. 6.3.1 Créer un patch 6.3.1.1 Avec TortoiseSVN 1. Cliquez droit sur répertoire contenant votre première copie de travail puis TortoiseSVN > Create patch... 2. Cliquez OK pour inclure dans le patch les différences de tous les fichiers que vous avez modifiés 3. Enregistrez le patch dans un fichier, en dehors de votre copie de travail 6.3.1.2 Avec Subclipse 1. Dans la vue 'Navigator' cliquez droit sur la racine de votre copie locale puis Team > Create Patch... 2. Choisissez 'Save In File System' puis définissez un nom de fichier pour votre patch et un endroit où l'enregistrer puis cliquez sur Finish 3. La fênetre suivante vous invite à inclure d'éventuels fichiers que vous auriez créé pour votre patch, dans notre cas cliquez sur 'Deselect All' puis OK 4. Subclipse enregistre par erreur dans le fichier de patch le chemin d'accès complet des fichiers modifiés. Or il ne faut que le chemin relatif des fichiers modifiés par rapport à la racine de la copie locale. Il faut corriger ceci à la main : éditez le fichier de patch créé pour transformer tous les chemins d'accès complet des fichiers modifiés préfixés par "Index: " en chemin d'accès relatifs, par exemple "Index: C:/Documents and Settings/user/workspace/mon-projet/fichier.txt" en "Index: fichier.txt". 6.3.2 Appliquer un patch 6.3.2.1 Avec TortoiseSVN 1. Cliquez droit sur le répertoire de la seconde copie locale puis TortoiseSVN > Apply patch... puis sélectionnez votre fichier de patch 2. Deux fenêtres apparaissent pour vous permettre de consulter les modifications apportées sur chaque fichier modifié par le patch. Pour le moment ces modifications n'ont pas encore été appliqués à votre copie de travail. Comité Réseau des Universités Page 29 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 3. Dans la petite fenêtre double-cliquez sur le premier fichier listé. Vous voyez alors dans l'autre fenêtre les différences apparaîtrent ligne à ligne. Cliquez sur l'icône de sauvegarde pour les enregistrer dans votre copie de travail. Répétez l'opération pour chaque fichier listé. 4. Vous pouvez vérifiez dans votre copie de travail que les fichiers ont bien été modifié et ensuite faire un commit de votre copie de travail pour appliquer les modifications dans votre dépôt. 6.3.2.2 Avec Subclipse 1. Dans la vue 'Navigator' cliquez droit sur la racine de votre copie locale puis Team > Apply Patch... 2. Cliquez sur 'File' puis choisissez votre fichier de patch puis cliquez sur Finish 3. Vous pouvez vérifier dans votre copie de travail que les fichiers ont bien été modifié et ensuite faire un commit de votre copie de travail pour appliquer les modifications dans votre dépôt. Comité Réseau des Universités Page 30 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 7 Pour aller plus loin Ce chapitre présente quelques fonctionnalités avancées de Subversion. Nous ne détaillons pas d'exercices pour les mettre en pratique, mais les pointeurs donnés doivent vous permettre de vous exercer avec. 7.1 Les propriétés Les propriétés sont les mécanismes de Subversion qui permettent aux développeurs d'associer des méta données aux fichiers et répertoires dans un dépôt Subversion (ce ne sont pas les méta données .svn utilisées par Subversion pour ses propres besions). Une propriété a un nom et un contenu (chaîne de caractère, données binaires). Comme pour un fichier ou un répertoire, les propriétés peuvent être modifiées au cours du temps par différents utilisateurs. Ces propriétés sont mises à jour dans un copie de travail quand la commande update est utilisée et peuvent être elles aussi sujet à des fusions et conflits. Il est possible de définir n'importe quelle type de propriété. Voici quelques exemples : ● associer à ses fichiers sources une propriété nommée reviewer qui contient le nom de la dernière personne qui a relu et vérifié le fichier source. ● associer à des fichiers musicaux une propriété nommée sample contenant un extrait du morceau. C'est plus simple que de stocker dans le dépôt un fichier séparé contenant un extrait et s'assurer de la cohérence du morceau et son résumé au cours du temps. ● etc. Il existe aussi plusieurs propriétés spéciales, qui modifient le comportement de Subversion quand ce dernier rencontre des fichiers avec ces propriétés spéciales. Le nom de ces propriétés est préfixés par svn:. Elles sont listées dans le manuel de référence http://svnbook.redbean.com/en/1.2/svn.advanced.props.html#svn.advanced.props.special. Vous pouvez consulter le manuel de référence de Subversion pour plus de détails sur les propriétés http://svnbook.red-bean.com/nightly/en/svn.advanced.props.html et les documentations des clients Subversion : ● pour TortoiseSVN :http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dugpropertypage.html#tsvn-dug-propertypage-props ● pour Subclipse : http://svn.collab.net/subclipse/help/index.jsp?topic=/org.tigris.subversion.subclipse.doc/html /reference/svn-properties-view.html 7.2 Intégrer d'autres dépôts dans sa copie de travail La propriété spéciale svn:externals permet d'inclure le contenu d'autres dépôts dans sa copie de Comité Réseau des Universités Page 31 / 32 Formation "Utilisation d'un client Subversion" Paris, 27 juin 2007 travail. Il faut la définir sur un répertoire et spécifier une liste d'URL d'autres dépôts à inclure lorsque l'on récupère une copie de travail (checkout). Votre client Subversion ira automatiquement récupérer le contenu de ces autres dépôts pour les inclure dans votre copie de travail. Il est ainsi possible d'inclure dans la copie de travail d'un projet le dépôt d'une librairie partagée entre plusieurs projets. Ces dépôts extérieurs inclus peuvent être hébergés sur le même serveur Subversion ou être hébergé sur d'autres serveurs sur Internet. Consultez le manuel de référence de Subversion pour plus de détails sur ce mécanisme : http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html. 7.3 Les hook scripts Il s'agit de scripts déclenchés par un évènement qui a lieu sur un dépôt Subversion. Ces scripts sont installés dans le serveur Subversion, il faut donc être administrateur du serveur Subversion pour les installer et les configurer. On peut ainsi adapter et enrichir le comportement de Subversion pour les besoins spécifiques d'un projet, par exemple : ● empêcher les commits quand le message de log est vide ● à chaque commit, envoyer un mail à une liste de diffusion contenant l'auteur, la date, les modifications apportées au commit ● rendre impossible la modification d'une étiquette ● imposer un format précis pour les messages de log ● etc. Quelques exemples sont fournis sur la page : http://subversion.tigris.org/tools_contrib.html#hook_scripts. Si vous avez un dépôt hébergé sur le serveur Subversion de SourceSup, vous pouvez contactez [email protected] pour demander la mise en place d'un hook script pour votre projet. 7.4 Toujours plus loin... ...tellement loin que les formateurs ne peuvent plus rien pour vous ;) Consultez le manuel de référence en ligne pour connaître d'autres fonctionnalités avancées de Subversion : http://svnbook.red-bean.com/nightly/en/svn.advanced.html 8 Conclusion Une courte conclusion sera présentée à la fin de la journée de formation. Merci de compléter le formulaire d'évaluation. Comité Réseau des Universités Page 32 / 32