.. _SVN: SVN === Introduction à SVN ****************** SVN est un logiciel de gestion de version basé sur une architecture clients-serveur. .. image:: archiSVN.png :align: center Le serveur: * Stocke et met à disposition des données. * Garde un historique de toutes les modifications effectuées sur les données stockées (on parle de **versionning**), cela permet de : * Revenir en arrière (annuler des modifications, retrouver des versions antérieures du projet) * Suivre les modifications (qui à fait quoi et quand) * Comparer les différences entre 2 versions * Facilite le travail collaboratif * Limite les problèmes lorsque plusieurs personnes éditent la même base de code. Ce guide donne les bases de SVN et de son utilisation à travers l'interface graphique TortoiseSVN. Principe ^^^^^^^^ Le serveur stocke des **dépôts** (ou **référentiel**, ou **repository**). Un dépôt correspond généralement à un projet. Lorsqu’un utilisateur récupère un dépôt il obtient une **copie de travail**, on dit qu'il fait un **checkout**. Normalement cette opération n'est réalisée qu'une seule fois par poste de travail. La copie de travail **n'est pas** synchronisée automatiquement avec le dépôt. Lorsque l'utilisateur a modifié sa copie locale et veut enregistrer ses modifications sur le serveur il doit faire une **commit**. Le **numéro de version** (ou **révision**) du dépôt est alors incrémenté de 1. A l'inverse pour mettre à jour la copie de travail avec les dernières données stockées sur le serveur, l'utilisateur fait un **update**. Checkout ^^^^^^^^ Afin de récupérer un copie de travail depuis le dépôt, on va réaliser un **checkout** : 1. Dans l’explorateur de fichier: faites un clique droit sur le dossier où placer la copie de travail et cliquer sur *SVN Checkout*. .. image:: menuCheckout.png :align: center 2. Renseignez l'adresse du dépôt dans le champ *URL of repository* et cliquez sur OK. .. image:: checkoutFenetre.png :align: center Etat de la copie locale ^^^^^^^^^^^^^^^^^^^^^^^ TortoiseSVN modifie les icones de l’explorateur de fichiers dans les copies locales. .. image:: explorateurDepot.png :align: center .. |nonmodifie| image:: nonmodifie.png :height: 20 :width: 20 .. |modifie| image:: modifie.png :height: 20 :width: 20 * Le symbole |nonmodifie| indique que le fichier *projet2011.pdf* **fait parti du dépôt** et **n'a pas été modifié** localement. * **Attention, une version plus récente peut nénamoins se trouver sur le serveur** * Le symbole |modifie| indique que le fichier *projet.tex* **fait parti du dépôt** et **a été modifié** localement. * **Attention, il faudra réaliser un commit pour enregistrer les modifications sur le serveur** * L'absence de symbole indique que les fichiers *projet.aux*, *projet.bbl*... n'ai actuellement pas géré par SVN. * **Ce n'est pas parce qu'un fichier est présent dans la copie de travail qu'il fait parti du dépôt.** Par exemple, les résultats de compilations et fichiers temporaires ne font normalement pas parti des dépôts. Il n'y a aucun intérêt à sauvegarder ces fichiers sur le serveur mais ils sont présents dans le répertoire de la copie locale. Commit ^^^^^^ Pour sauvegarder les modifications de la copie locale sur le serveur, on fait un **commit** : 1. Cliquez droit sur le dossier de la copie locale et choisissez *SVN Commit* .. image:: commitMenu.png :align: center #. Renseignez une description des modifications réalisées dans le champs *Message* .. image:: commitFenetre.png :align: center #. Vérifiez la liste des fichiers modifiés dans la section *Changes made*, cliquez sur *OK*. * **Les fichiers qui ne sont pas sélectionnés ne seront pas mis sur le serveur !** #. Vérifiez le log: .. image:: commitLog.png :align: center Update ^^^^^^ Pour récupérer la dernier version d'un dépôt sur la copie locale, on fait un **update**: 1. Cliquez droit sur le dossier de la copie locale et choisissez *SVN Update*. #. Le log donne la liste des fichiers supprimés, déplacés, ajoutés et modifiés : .. image:: updateLog.png :align: center Règles d'usage ^^^^^^^^^^^^^^ Comme il peut exister plusieurs copies locales d’un même dépôt, des conflits d’édition peuvent survenir si plusieurs personnes modifient simultanément le même fichier. Cette situation doit être évitée: * En s’accordant à l’avance sur la répartition du travail * En utilisant des mécanismes de verrouillage SVN met en place des règles d’utilisation qui assure la cohérence des données sur le dépôt (mais pas sur les copies locales) Ces règles sont résumés dans les tableaux ci-dessous: .. figure:: reglesCommit.png :align: center On ne peut pas effectuer de commit si l'on ne possède pas la dernière version du dépôt : il faut alors faire un update avant de pouvoir réaliser le commit. .. figure:: reglesUpdate.png :align: center Si vous avez modifié un fichier et que quelqu'un d'autre à mis un nouvelle version de ce fichier sur le serveur, il y a un conflict d'édition. SVN va alors essayer de fusionner les 2 versions ou vous demander de réaliser la fusion vous même. Vous ne pourrez plus rien faire tant que le conflict d'édition en sera pas résolu. Serveur SVN ESIEE ***************** ESIEE Paris héberge un serveur SVN privé pour les projets étudiants accessible à l'adresse `https://svnedu.esiee.fr `_ . Créer un dépôt ^^^^^^^^^^^^^^ Pour créer un nouveau dépôt vous devez utiliser l'url fournie par le responsable du module d'enseignement (ou le nom du module) : pour le projet Space Invaders utilisez le lien `https://svnedu.esiee.fr/index.php?module=3I_PR3 `_ . Vous obtenez la fenêtre suivante .. image:: login.png :align: center Entrez votre login et mot de passe ESIEE. Vous arrivez sur la page : .. image:: creerdepot.png :align: center Si vous êtes plusieurs à devoir utiliser ce dépôt, chaque utilisateur doit rentrer son login et son mot de passe ESIEE. La personne qui vient de se loguer à l’étape précédente n’a pas besoin de ré-rentrer ses informations. Seuls les utilisateurs qui ont indiqués leur login et mot de passe pourront accéder au dépôt par la suite. Cliquez sur Créer. En cas de succès, un message s’affiche en haut à droite de la fenêtre : .. image:: succes.png :align: center Retrouver ses dépôts ^^^^^^^^^^^^^^^^^^^^ Rendez-vous sur le site `https://svnedu.esiee.fr `_ et connectez-vous avec votre login/mot de passe ESIEE. Vous arrivez sur la page: .. image:: listedepots.png :align: center Les dépôts auxquels vous avez accès apparaissent dans la liste sous le titre Mes dépôts. Cliquez sur le nom d'un dépôt dans cette liste. Vous obtenez les informations sur ce dépôt à droite : .. image:: infodepot.png :align: center Exercice ******** Afin de vous familiariser avec SVN, effectuez les manipulations suivantes: 1. Créez un nouveau dossier appelé *svn1* sur le bureau #. Réalisez un checkout de votre dépôt dans ce dossier #. A la racine de votre copie locale, créez un fichier *truc.txt* #. Ajoutez ce fichier et ce dossier à votre dêpot #. Réalisez un commit de *svn1* #. Accédez à l'adresse de votre dépôt SVN à partir de votre navigateur Web : vérifiez que le fichier *truc.txt* est bien présent. #. Créez un nouveau dossier appelé *svn2* sur le bureau #. Réalisez un checkout de votre dépôt dans ce dossier #. Dans la copie *svn1*: ajoutez le texte *machin* dans le fichier *truc.txt* #. Effectuez un commit de *svn1* #. Vérifiez le contenu du fichier *truc.txt* dans *svn2* #. Effectuez un update sur *svn2* et re-vérifiez le contenu du fichier *truc.txt* #. Supprimez le fichier *truc.txt* dans *svn1* #. Effectuez un update de *svn1* que se passe-t-il ? #. Re-supprimez le fichier *truc.txt* dans *svn1* en utilisant la commande *delete* de TortoiseSVN. #. Effectuez un commit de *svn1*