Tutorial d`utilisation de la forge MAGE

Transcription

Tutorial d`utilisation de la forge MAGE
Tutorial d’utilisation de la
forge MAGE
Tutorial
Référence
:
T
Version
:
1.1
Date
:
02/02/2010
Auteur(s)
:
Laurence Estrabaut
TABLE DES MATIERES
1
PRESENTATION GENERALE DE LA FORGE ..............................................3
1.1
PAGE D’ACCUEIL ..................................................................................................3
1.2
CREATION DE PROJET ..........................................................................................4
1.3
L’ESPACE PROJET .................................................................................................6
2
SUBVERSION......................................................................................................12
2.1
PRINCIPE GENERAL ............................................................................................12
2.2
ILLUSTRATION VIA NETBEANS ...........................................................................13
2.2.1
L’IMPORT D’UN PROJET SOUS SUBVERSION ...............................................13
2.2.2
RECUPERER UN PROJET DEJA VERSIONNE ..................................................17
2.3
LA GESTION DE CONFLIT ....................................................................................22
2.3.1
LE CONFLIT SIMPLE : RESOLUTION PAR FUSION .........................................23
2.3.2
LE CONFLIT COMPLEXE : INTERVENTION DE L’UTILISATEUR .....................26
2.3.3
LE « TAGUAGE » DE VERSION ...................................................................28
-2-
1 PRESENTATION GENERALE DE LA FORGE
Une forge est un système de gestion de développement collaboratif de projets
informatiques. L’outil central d’un tel système est le système d’archivage des sources du
projet. Dans la forge retenue, il s’agit de Subversion, successeur de CVS.
Un panel d’outils divers destinés à l’animation de la communauté crée autour du
projet est également disponible. Il s’agit d’outils de communication (chat, blog, forum,
…) et de diffusion (zone de téléchargement).
L’équipe MAGE s’est dotée d’un tel système, accessible via Internet et disponible
à l’adresse suivante : http://forge-mage.g2elab.grenoble-inp.fr
1.1
PAGE D’ACCUEIL
Voici ci-dessous une impression écran de la page d’accueil de la forge de l’équipe
MAGE.
1
2
3
4
Fig. 1 : Page d’accueil de la forge Mage.
1 : Cartouche d’identification : permet à l’utilisateur de s’identifier en entrant sur la
forge. Permet également à l’utilisateur de modifier son profil et d’accéder à son espace
personnel de stockage de documents : le porte-documents.
-3-
2 : Les onglets de navigation : permet de naviguer au sein de la forge. Le premier
onglet ramène à la page d’accueil. Le second permet d’accéder à l’explorateur de projets.
Le troisième (inactif pour le moment) amène au salon de discussion en ligne. Le
quatrième est le bloc-notes. Le bloc-notes est commun à l’ensemble de la forge. Il permet
de laisser des messages à l’ensemble de la communauté.
3 : Recherche et ajout de projets : au même niveau se trouve la recherche sur mots-clés
et l’ajout de projet.
4 : la zone d’activité : cette zone découpée en plusieurs parties présente les derniers
« mouvements » autour des projets : actualités récentes, téléchargements, créations, …
1.2
CREATION DE PROJET
Un click sur le lien « Ajouter un projet » amène l’utilisateur à la page de création
d’un projet. L’écran suivant présente cette page et les différents champs à remplir. Les
champs marqués d’une étoile rouge sont obligatoires.
Fig.2 : Pane d’ajout d’un projet
Nous allons créer un projet nommé « mon_projet » qui nous servira d’exemple
tout au long de ce tutorial. Après avoir renseigné son nom et le nom utilisé pour l’url du
projet (nom qui sera également celui du repository attaché à ce projet), n’oubliez pas
d’indiquer également la catégorie d’appartenance du projet.
-4-
Les dernières informations à fournir concernent, les langages utilisés, les
traductions disponibles et la licence d’utilisation. Ces informations sont modifiables à
tout moment par édition du projet.
Fig.3 : N’oubliez pas d’indiquer la catégorie de votre projet
Après sa création, le projet doit être validé par un administrateur. Une fois fait, le
projet est accessible via la page d’accueil ou l’onglet des projets.
-5-
1.3
L’ESPACE PROJET
Chaque projet dispose d’un espace web qui lui est propre et pour lequel on
retrouve les outils évoqués précédemment.
Comme pour la page d’accueil, une série d’onglets permet de naviguer au sein du
projet et d’accéder aux différentes fonctionnalités disponibles.
1
2
3
4
5
6
7
8
9
Fig. 4 : La page d’accueil du projet permet d’accéder, au travers d’onglets de navigation à touts ses fonctionnalités et
outils.
1 : Projet : cet onglet ramène l’utilisateur à la page d’accueil du projet. Sur cette
page figure les informations saisies lors de la création et les fonctionnalités
d’administration du projet. L’administrateur du projet nommé chef de projet peut en
effet créer une version du projet et/ou rajouter des collaborateurs au projet. Seuls les
collaborateurs auront le droit de faire des modifications sur les sources. Pour le moment,
la forge ne propose pas plusieurs type de contributeurs. C’est une évolution attendue et
prévue.
-6-
Fig.5 : Les panels sur fond couleur saumon sont des panels d’administration. Selon leur niveau de droits, les
utilisateurs peuvent les voir ou non. Celui-ci permet de créer une version du projet et d’ajouter un contributeur au
projet.
2 : Journal : cette section est alimentée automatiquement par les actions menées
sur le projet.
3 : Téléchargement : c’est dans cette zone que le chef de projet peut organiser
les téléchargements des différentes versions du projet. Le principe est d’associer un ou
plusieurs fichiers à un numéro de version préalablement crée sur la page d’accueil du
projet.
Fig. 6 : L’ajout de fichier en téléchargement se fait par rapport à une version du projet. Vous devez donc créer une version
avant de pouvoir uploader des fichiers.
-7-
Fig. 7 : La forge permet l’upload d’exécutables, de fichiers .pdfs ou autre. Elle permet également l’ajout de fichiers de
grande taille.
4 : Code : permet d’accéder à l’explorateur du code source déposé sur la forge via
le système de versionnement Subversion. Cependant, cette fonctionnalité peut-être
désactivée pour maintenir la confidentialité des sources déposées.
5 : Gestionnaire : permet de signaler un bug ou une anomalie mais également de
faire la demande de nouvelles fonctionnalités. Une fois une anomalie signalée ou une
demande de fonctionnalité émise par un utilisateur, il revient au chef de projet de la
« confirmer » puis d’éventuellement lui affecter un collaborateur. Il est possible d’ajouter
un fichier à la fiche de signalement et de la commenter.
-8-
Fig. 8 : le rapport d’anomalies ou « bug tracker » est un excellent outil pour faire évoluer ses projets
et rester à l’écoute de ses utilisateurs.
-9-
6 : Documentation : la documentation est sous forme d’une feuille de type wiki
que vous pouvez modifier à loisir.
Fig. 9 : Une page Wiki a sa syntaxe propre. Mais l’éditeur WYSIWYG permet d’avoir une rédaction simplifiée. Seul la
création des liens entre les différentes pages demande une syntaxe particulière.
Un wiki permet également de créer une arborescence de pages liées entre elles
comme un mini-site web éditable en ligne. Pour créer une nouvelle page wiki,
commencer par créer un lien vers cette nouvelle page simplement en insérant son nom
dans la page en cours d’édition. Pour signifier au système que ce nom pointe vers une
page wiki vous devez respectez la contrainte suivante : le nom de la page doit être
composé de plusieurs mots accolés. Exemple : MaPageWiki.
Pour avoir un rendu plus lisible vous pouvez associer le nom de cette page à un
titre plus fonctionnel de la sorte :
[wiki=NomDeLaPage nom du lien]
Sauvegardez la page en cours en cliquant sur « Editer » et suivez le lien ainsi crée
pour accéder à la nouvelle page et la modifier.
- 10 -
7 : Actualités : les actualités sont les derniers événements marquants. A l’inverse
du journal, vous devez explicitement créer vos news. Ce peut-être la création du projet, la
sortie d’une nouvelle version ou d’un patch …
8 : Forum : Le forum de discussion se découpe en 4 sous-forums :
•
aide
•
développement
•
commentaires d’utilisateurs
•
général
9 : Salon de discussion : inactif pour le moment, il permettra à terme le dialogue
en ligne.
Fig.10 : Il est essentiel de faire vivre la communauté d’auteurs et/ou d’utilisateurs autour de votre projet en communiquant les derniers événements
importants.
- 11 -
2 SUBVERSION
2.1
PRINCIPE GENERAL
L’emploi d’un système d’archivage comme Subversion est indépendant de
l’utilisation d’une forge. La forge n’est pas une application cliente de Subversion. C’est
une couche logicielle supplémentaire qui apporte un plus-produit au simple
versionnement du projet. NetBeans, Tortoise sont des applications clientes de
Subversion. Dans la suite de ce tutorial nous illustrerons les principes énoncés dans ce
chapitre avec NeatBeans 6.5.1 (version anglaise).
Le principe de l’archivage sous subversion, appelé également versionnement est
relativement simple. Les données (textuel, binaire, …) sont conservées sur le serveur qui
contient l’historique de chaque fichier archivé. Par version, on entend le numéro associé
à chaque fichier qui indique son évolution depuis sa création. Le principe de ce
numérotage est le suivant : ce numéro est composé de chiffres séparé par un point. Le
premier chiffre correspond à la version du document, le second à une modification, le
troisième à une correction.
Par exemple : un fichier en version 1.2.0 va passer en version 1.2.1 suite à la
correction d’un bug mineur, en version 1.3.0 suite à la modification d’une procédure de
parsing et en version 2.0.0 suite à l’ajout de nouvelles fonctionnalités. Le changement de
chiffre reste assez subjectif.
Il peut arriver qu’un client Subversion ne prenne en charge que les deux premiers
niveaux de versionnement.
L’espace disque du serveur dédié à l’archivage du projet est nommé repository.
La copie des sources d’un projet sur le serveur Subversion porte le nom d’export.
Cette opération n’est effectuée qu’une seule fois.
L’opération consistant à récupérer les sources d’un projet du repository est
appelée checkout. Cette opération n’est effectuée également qu’une seule fois.
Subversion crée une copie locale des dernières sources archivées sur le serveur.
Une fois récupérées, les données peuvent être modifiées localement. Ensuite,
quand les modifications sont terminées, elles sont répercutées sur le serveur. Cette
opération porte le nom de commit. Comme un fichier peut être utilisé et donc modifié
par plusieurs personnes simultanément, il se peut que la version locale (avant
modifications) ne corresponde plus à la version archivée sur le serveur (un autre
développeur ayant fait et répercuté des modifications). Il y a alors conflit entre les
versions. Subversion demande alors de mettre à jour la copie locale en faisant un update
avant de répercuter les modifications avec un commit. Le plus souvent, le conflit porte
sur des parties différentes du code et une simple fusion des deux fichiers suffit. Dans les
cas plus complexes, Subversion permet de faire un différentiel des deux fichiers afin de
déterminer les portions de code à conserver (voir 3.4.2).
- 12 -
2.2
ILLUSTRATION VIA NETBEANS
Subversion présente quelques différences avec son célèbre parent CVS. La
première est dans la structuration des projets. Subversion conseille, pour chaque projet à
versionner de créer la structure suivante :
Fig.11 : Description du système de fichier propre à Subversion
Le répertoire trunk est celui qui héberge le développement en cours. Le
répertoire tags va abriter les différentes versions tagués du projet. Taguer un projet c’est
réaliser une photographie du projet et lui donner un numéro de version (1.0 pour une
version stable par exemple). C’est dans le répertoire tags que seront stockées ces photos.
Le répertoire branches contiendra quant à lui les développements parallèles au
développement principal.
Cette façon d’organiser les projets est juste une recommandation de Subversion,
en aucun cas une obligation. Sachez que NetBeans rend transparente cette structuration.
2.2.1 L’import d’un projet sous Subversion
Admettons que le projet mon_projet, correctement structuré, contiennent des
sources à archiver.
Assurez-vous de sélectionner le projet à versionner puis dans le menu
« Versioning », choisir le sous-menu « Subersion » puis « Import into Repository ». La
fenêtre suivante apparaît.
- 13 -
Le menu-déroulant de la zone 1, éditable, permet de renseigner l’adresse du
repository du projet. Pour tous les projets, et indépendamment de leur catégorisation au
sein de la forge, l’adresse du repository est de la forme :
http://svn-mage.g2elab.grenoble-inp.fr/nom_du_projet
Dans la zone 2, il vous ai demandé votre identifiant et mot de passe. Ce sont ceux
de votre compte forge. Si vous ne les renseignez pas à cette étape, ils vous seront
redemandés ultérieurement.
1
2
Fig.12 : Panel d’import vers un repository distant de Subversion
Sur la fenêtre suivante, il vous est demandé le répertoire à versionner. Par défaut,
il s’agit du développement en cours c'est-à-dire trunk.
Le message accompagnant l’import est obligatoire.
- 14 -
Fig.13 : Choix du répertoire distant et saisie du message d’import
NetBeans liste ensuite les fichiers à archiver. Finaliser l’import par un click sur le bouton
« Finish ».
- 15 -
Fig. 14 : NetBeans liste l’ensemble des fichiers à important. Il est encore possible d’en exclure en cliquant dans la colonne
« Commit Action ».
La forge permet de visualiser le code soumis dans l’onglet « Code ».
Fig. 15 : Visualisation du code archivé par le système de browser de la forge.
- 16 -
2.2.2 Récupérer un projet déjà versionné
L’opération consistant à récupérer les sources d’un projet déjà sous gestion SVN
s’appelle le checkout.
Fig.14 : Option check-out du menu Subversion
Choisir dans le menu « Versionning » de NetBeans le menu « Subversion »
puis « Checkout.
- 17 -
En théorie, la plupart des projets ne nécessite pas d’identification préalable au
checkout. Vous pouvez donc récupérer un projet sans renseigner votre nom d’utilisateur
et votre mot de passe. Si ce n’était pas le cas, NetBeans signalera ne pas avoir
l’autorisation d’accéder au repository. Indiquer à ce moment là, votre login et mot de
passe.
L’url du repository du projet est construit sur la forme :
http://svn-mage.g2elab.grenoble-inp.fr/nom_du_repository _du_projet
Pour rappel, le nom du repository du projet est le nom du projet écrit tout en
minuscule et tous les mots le composant accolés. C’est le nom figurant dans la barre
d’adresse quand vous êtes sur la page d’accueil du projet.
Fig. 15 : choisir le projet à récupérer et indiquer au besoin ses identifiants de connexion
L’écran suivant vous permet de paramétrer le checkout.
- 18 -
Fig.16 : Panel de sélection des sources à réccupérer.
Sélectionner le répertoire à récupérer en clickant sur « Browse ». Vous accéder à
un panel d’exploration du repository du projet.
Fig.16 : choix des soruces
Si vous êtes intéressé par le développement en cours, sélectionner trunk. Si vous
souhaitez prendre une version stable, parcourez tags (s’il existe).
- 19 -
De retour au panel précédent, vous devez indiquer le répertoire local où déposer
le répertoire choisi. Attention, pensez à créer le répertoire mon_projet car le checkout ne
le créera pas. Vous pouvez laisser les autres options par défaut.
Fig.17 : sélection du répertoire de travail local.
Si le projet est convenablement récupéré (et a été convenablement archivé, c'està-dire en laissant avec les sources, les fichiers propres à NetBeans) NetBeans proposera
de l’ouvrir immédiatement. Vous pourrez alors constater qu’il rend transparent la
structuration propre à Subversion.
- 20 -
Fig.18: Le projet a été correctement checké. NetBeans le reconnaît et propose de l’ouvrir immédiatement.
- 21 -
2.3
LA GESTION DE CONFLIT
Pour illustrer le cas d’un conflit, nous allons supposé que mon_projet contienne
un fichier java nommé ConsoleJPanel.java et que deux utilisateurs travaillent sur ce même
fichier.
Bien qu’ils aient utilisé la version 1.4 du fichier pour travailler, l’utilisateur
Delinchant, travaillant plus vite, a fait et sauvegarder des modifications sur le serveur. La
version locale de « ConsoleJPanel » utilisée par Estrabaut n’est plus synchronisée avec la
version nouvellement archivée par Delinchant. Cette situation est génératrice de conflit
qui selon sa complexité requérra l’intervention de l’utilisateur.
CDICVS
SVN
1.4
CDICVS
SVN
Incrémentation
du numéro
de version
1.5
CadesHelper.java
ConsoleJPanel.java
ConsoleJPanel.java
CadesHelper.java
Commit
1.5
Commited
Numéro de version différent :
conflit
Même numéro
de version :
mise à jour possible
1.4
Delinchant CadesHelper.java
ConsoleJPanel.java
1.4
« Locally Modified »
1.5
CadesHelper.java
ConsoleJPanel.java
CadesHelper.java
ConsoleJPanel.java
1.4
1.4
Error
« Locally Modified »
Estrabaut CadesHelper.java
ConsoleJPanel.java
T = 0 : Les deux utilisateurs
travaillent sur la copie locale
du même fichier
Commit
CadesHelper.java
ConsoleJPanel.java
T =1 : L’utilisateur Delinchant procède
à des modifications et fait un commit
sur le serveur
Fig.19 : Illustration du principe du conflit
- 22 -
T = 2 : L’utilisateur Estrabaut souhaite effectuer
un commit de ses propres modifications.
Il ya conflit
2.3.1 Le conflit simple : résolution par fusion
Le problème du conflit émerge lorsque l’utilisateur Estrabaut souhaite faire un
« Commit » de ses propres modifications. Le « Commit » est refusé par le serveur
Subversion.
Fig.20 : L’utilisateur delinchant et estrabaut ont modifié la même version du fichier. L’utilisateur delinchant a
commuté ses modifications en premier.
- 23 -
Fig.21 : Le commit est refusé par le serveur. Le fichier doit être mis à jour au préalable.
Dans les cas de conflit, il faut effectuer un « Update » du fichier afin que le client
Subversion puisse effectuer une comparaison des versions. Le Menu « Update » se trouve
dans le menu contextuel du fichier (Click-droit puis Subversion et enfin Update).
- 24 Fig.22 : Avant de pouvoir commiter le fichier modifié, il faut le mettre à jour.
Fig.23 : Le fichier une fois mise à jour, contient bien les modifications apportés par les deux utilisateurs.
Dans le cas de version non antinomiques, Subversion effectue seul la fusion
nécessaire. Il copie dans la version locale les éléments additionnels de la version sauvée
sur le serveur.
Un « Commit » est ensuite nécessaire pour valider la fusion des deux fichiers.
L’édition du fichier fusionné permet de constater l’ajout des différentes modifications
faites par les deux utilisateurs.
- 25 -
2.3.2 Le conflit complexe : intervention de l’utilisateur
La gestion des conflits peut s’avérer plus complexe quand les modifications
effectuées par les deux utilisateurs portent sur la même portion de code. Subversion n’est
pas alors compétent pour décider quelles modifications il convient de garder. C’est à
l’utilisateur de trancher.
Admettons que nos deux utilisateurs ont chacun une copie à jour du de la version
1.6 du fichier ConsoleJPanel. Ils modifient chacun de leur côté la même partie du fichier.
Ainsi, une simple fusion ne peut résoudre le conflit.
Fig.24. La même partie du code est modifiée : il y a conflit.
L’utilisateur Delinchant modifie le constructeur d’une classe et archive en premier
ses modifications sur le serveur.
L’utilisateur Estrabaut modifie également le constructeur et souhaite à son tour
sauver ses modifications sur le serveur.
- 26 -
Lors de la demande de « Commit » effectuée par l’utilisateur Estrabaut, celle-ci est
rejetée car CVS rencontre un conflit complexe entre les deux versions. Une fusion de
deux documents ne peut être envisagée pour résoudre le conflit. L’utilisateur qui
rencontre le conflit doit le résoudre lui-même.
Fig.25: NetBeans rend compte du conflit existant en entourant le code conflictuel par des chevrons
NetBeans rend compte du conflit en encadrant par un jeu de chevrons (<<<<<
>>>>>) le passage conflictuel et les portions de code antagonistes.
Une fois le fichier modifié, il suffit d’effectuer un « Commit » pour archiver la
version sur le serveur.
- 27 -
2.3.3 Le « taguage » de version
Admettons maintenant que notre développement arrive à son terme pour ce
projet et que nous considérons avoir atteint une version stable. Nous désirons taguer le
projet en version 1.0 c'est-à-dire faire une photographie du projet à l’instant t et lui
donner comme numéro de version 1.0 et bien sûr archiver le tour sur le serveur.
Dans le menu contextuel cliquez sur « Subversion » puis « Copy to ». Là où CVS
permettait de tagguer fichier par fichier, Subversion propose de faire une copy du projet
dans le répertoire tags contenant les différents versionnement.
Fig. 26 : Taguer un projet revient en fait à en faire une copie dans un répertoire adéquat.
- 28 -
Le panel suivant permet de préciser quelques options importantes à la fonction
de copy.
1
2
3
Fig.27 : Panel de taguage via NetBeans
1 Source : vous avez la possibilité de choisir quelle version taguer : soit une version
archivée sur le serveur soit celle présente dans votre repository local (votre copie de
travail). Soyez vigilants dans votre choix !
2 Option de copie : vous permes de ne pas recopier le répertoire « trunk » mais
seulement son contenu.
3 Destination : assez naturellement, le répertoire de destination est le répertoire « tags »
qui contient donc toutes les versions tagués. Nommer le répertoire final de destination
du nom de la version.
Une fois la copie validée, vous pouvez retrouver les sources archivées via
Subversion dans l’explorateur de code de la forge.
- 29 -