[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Programmation
> Environnements de développement
> Gérez vos projets à l'aide du gestionnaire de versions Subversion > Les bases - Utilisations des clients > Premier pas !
> Lecture du tutoriel
Premier pas !
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Voilà, plutôt que de faire une introduction longue et chi..., passons tout de suite à la pratique.
Dans cette partie nous allons voir comment récupérer les fichiers du serveur, avec et sans contrôle de version, ainsi que mettre à jour ces fichiers et envoyer les modifications au serveur.
Avant de pouvoir récupérer des données, encore faut-il avoir un serveur avec des données. C'est pour cela que, rassurez-vous, j'ai préparé un petit serveur rien que pour les Zéros avec des fichiers dedans.
J'y ai mis quelques données pour le principe (qui ne servent à rien, vous allez le voir).
Et est-ce que l'on peut faire des trucs sur l'espace ?
Il n'y a pas de problème, vous pouvez tout chambouler, vous verrez qu'il n'y a rien d'important dedans. Sinon je vous aurais laissé en lecture seule.
Voilà, donc on a notre espace de données.
Maintenant, allons-y pas à pas.
Vous pouvez, dès à présent, créer un dossier sur votre ordinateur, où seront stockés les répertoires (repository) SVN. Pour Windows ce n'est pas pareil que pour UNIX.
Sous Windows
Créez un dossier dans lequel vous allez recevoir toutes les données du
repository (répertoire SVN sur le serveur).
Pour UNIX, le dossier sera créé automatiquement !
Pour Windows, une fois que vous avez créé votre dossier, il vous suffit de faire un clic-droit dessus et de cliquer sur
Checkout dans le menu.
Une fois sur la fenêtre de
Checkout, entrez l'URL suivante à l'endroit indiqué :
http://svn.assembla.com/svn/Tuto-SdZ
Et là, quand vous validez, il va vous demander un login et un mot de passe :
login = SdZ-Guest
mdp = MySdZsvn
Avant de commencer à faire des bêtises sur le SVN, sachez que l'espace est limité à 500 Mo, et que toutes les versions sont sauvegardées. Certes, elles sont compressées sur le serveur, mais ça ne fait pas beaucoup quand même. Donc je vous fais confiance pour ne pas faire transiter des énormes fichiers (programmes, images, vidéos ou autre) via le SVN. S'il y en a trop, je le fermerai, mais je ne vois pas pourquoi ça arriverait.
Une fois le login et le mot de passe renseignés, vous verrez la fenêtre de téléchargement vous mettre tous les fichiers dans votre répertoire local. Ensuite, vous pourrez aller voir les fichiers que vous venez de récupérer (on verra après comment faire pour les modifications).
Sous UNIX maintenant
Placez-vous dans le répertoire où vous voulez ajouter le
repository à l'aide du terminal.
Rappel pour utiliser le terminal : "cd" permet de changer de dossier et "ls" de consulter les fichiers et dossiers présents dans le dossier courant.
Une fois dans le bon répertoire, vous lancez la commande suivante :
Code : Bash1 | svn checkout --username "SdZ-Guest" --password "MySdZsvn" "http://svn.assembla.com/svn/Tuto-SdZ"
|
sachant que l'on peut remplacer "checkout" par le raccourci "co" (c'est plus rapide). Ce qui donne :
Code : Bash1 | svn co --username "SdZ-Guest" --password "MySdZsvn" "http://svn.assembla.com/svn/Tuto-SdZ"
|
Comprenons ce qui se passe
Lors d'un
checkout, que l'on peut assimiler au terme "to check it out" (vérifier), on récupère les données pour les vérifier. Il signifie également "passer à la caisse", en gros, il représente la récupération/extraction des données.
Dans le langage informatique et celui du contrôle de version, on obtient les définitions suivantes :
repository :
Dépôt de logiciels : un répertoire dans lequel Subversion stocke les informations nécessaires au contrôle des versions d'une série de projets.
Checkout :
Opération d'extraction d'une version d'un projet du repository vers un répertoire de travail local.
On demande donc ici au serveur de nous envoyer tous les documents sous contrôle de version, dans la dernière version qu'il possède (serveur et
repository sont renseignés dans l'URL). Comme l'accès est restreint, on précise le login et le mot de passe d'un compte ayant les droits.
Il est possible de renseigner d'autres options comme on peut le voir sur l'IHM de TortoiseSVN. Nous verrons ces options plus tard. De même il est possible de ne pas renseigner les identifiants de connexion directement dans la ligne de commande. S'ils ne sont pas renseignés, ils seront demandés par la suite avant de télécharger les fichiers.
Pour ceux qui aiment comprendre comment fonctionne un outil !
Maintenant que nous avons téléchargé ce qui se trouve dans le repository, regardons ce que l'on peut trouver dans ces dossiers.
Bien sûr, on va trouver les données que l'on voulait télécharger. Mais si on regarde un peu plus loin (en activant l'affichage des fichiers et dossiers cachés pour Windows, ou que l'on fait des ls -a, a pour all, sous le terminal avec UNIX), on constate qu'en plus de tous les fichiers standards, on peut trouver dans chaque dossier du repository un autre dossier caché ".svn". Ce dossier sert à Subversion pour justement effectuer le contrôle de version sur les fichiers et dossiers. Il y aura sûrement une annexe sur le fonctionnement de SVN. Mais pour l'instant (et même après), on ne touche pas à ce dossier.
Maintenant, pour les utilisateurs de Windows (parfois aussi pour Mac et Linux, si vous avez certains clients installés), si vous regardez vos dossiers et fichiers en mode graphique (pas via le terminal), vous constatez OH MIRACLE, que de superbes symboles (icônes superposées) se sont rajoutés sur tous vos fichiers et dossiers sous contrôle de version.
L'icône superposée verte signifie que vous n'avez pas modifié le fichier depuis que vous l'avez récupéré sur le serveur (ce qui ne veut pas dire qu'il n'y a pas une version plus à jour sur le serveur). Sur un dossier, elle veut dire qu'aucun fichier dans le dossier n'a été modifié depuis la récupération sur le serveur.

(J'ai mis un screenshot des icônes sur mon Mac pour montrer qu'elles existent aussi.)
Si l'on regarde les screenshots que j'ai faits, on voit qu'il y a d'autres icônes. Si l'on va sur le site de TortoiseSVN, on trouve la signification de toutes ces icônes.

(Cette fois-ci c'est la version TortoiseSVN pour Windows.)
Je préciserai la signification de chaque icône au moment voulu dans la suite du tuto.
Comme on vient de le voir, le contrôle de version ajoute des dossiers/données dans le répertoire local. Seulement, quand on a fini un projet, on ne veut pas forcément que ces petites icônes superposées restent sur les dossiers, ni que les dossiers cachés restent. Pour cela, il existe la fonction d'export, qui, contrairement au checkout, ne va faire que récupérer les données sans appliquer le contrôle de version.
Comme je disais, une fonction d'export, qui s'appelle brillamment... export.
Eh oui c'est sacrément compliqué SVN, pas vrai ?
Puisque je parle du nom de la commande, montrons tout de suite comment la lancer sous UNIX :
Code : Bash1 | svn export --username "SdZ-Guest" --password "MySdZsvn" "http://svn.assembla.com/svn/Tuto-SdZ"
|
Bien sûr, je montre l'exemple précis pour l'espace SdZ que j'ai créé, à partir de maintenant, je montrerai les commandes de manière générique :
Code : Bash1 | svn export --username "login" --password "mot_de_passe" "URL_du_Repository"
|
On retrouve les mêmes options que pour le checkout, ce n'est pas étonnant étant donné que l'on demande la même chose (enfin presque) au serveur.
C'est pareil pour Windows, en dehors du fait que l'on doit cliquer sur export et non checkout, la fenêtre de dialogue reste la même que celle du checkout.
Vous pouvez maintenant vérifier dans les dossiers exportés, vous ne trouverez pas de dossiers ni de fichiers en plus des fichiers de données.
Bien sûr, s'il y a plusieurs personnes à utiliser le même serveur (travailler sur le même projet), il semble évident qu'il faut un moyen pour récupérer les données qui auraient été modifiées par certaines personnes. Avant de commencer à travailler sur un fichier, il faut
systématiquement mettre à jour le fichier sur lequel on veut travailler, juste avant de travailler dessus (pour être sûr de ne pas commencer sur une version obsolète). Or une mise à jour, en anglais, on appelle ça un update. Nous avons donc notre nouvelle commande : UPDATE.
Ce n'est pas parce que l'on a une très belle icône superposée verte qui indique que les fichiers sont "normaux" que les fichiers sont à jour. Ça veut seulement dire que vous ne les avez pas modifiés depuis que vous les avez récupérés sur le serveur !
Pour UNIX
Il faut se placer dans le dossier que l'on veut updater (mettre à jour), pour updater tout le projet se mettre sur le dossier racine, et on lance la commande suivante :
Code : Bash1 | svn update [dossier_à_updater]
|
HOULA c'est compliqué !
Ceci dit, il se peut que vous rencontriez certains problèmes. S'il n'est pas nécessaire de renseigner le login/mdp, contrairement au checkout, c'est tout simplement que le login/mot de passe est retenu lors du checkout. Il est possible de ne pas le faire mémoriser à l'aide d'une option, mais on verra toutes les options des différentes commandes plus tard (déjà apprendre la base). Bref, si jamais vous avez besoin de renseigner votre login/mdp, il vous le fera savoir et vous demandera de les écrire avant de télécharger les fichiers à jour. Sinon vous pouvez utiliser les mêmes options que pour le checkout (--username et --password).
Si vous ne renseignez pas le dossier_à_updater, il prendra par défaut le dossier courant (comme pour chaque commande agissant sur un dossier).
Voilà, il n'y a pas besoin d'en savoir plus pour l'instant.
Pour Windows
Là non plus, ça ne va pas être compliqué. Il suffit de faire un clic-droit sur le dossier que l'on veut updater et de cliquer sur SVN update. Ni plus ni moins.
Je ne vous fais pas un screenshot, c'est vraiment trop facile.
Une fois que l'on a récupéré les données avec le contrôle de version (à l'aide d'un checkout), on veut pouvoir les modifier et renvoyer les fichiers au serveur. Pour cette action, on parle de commit (vous me verrez ensuite souvent parler de commiter pour dire que je vais faire un commit).
Si l'on va chercher la définition de commit, on obtient (entre autres) : "To put into a place to be kept safe or to be disposed of" et "To consign for future use or reference or for preservation"
En gros, mettre dans un espace pour le garder en sécurité et le mettre à disposition pour une utilisation future.
Donc, pour nous, ça va vouloir dire :
commit permet d'envoyer au serveur la nouvelle version des fichiers que l'on a modifiés depuis leur dernière récupération sur le serveur.
Pour tester, rien de plus simple.
Vous venez de récupérer les fichiers à l'aide d'un checkout, a priori vous avez donc la dernière version (si vous avez fait le checkout il y a longtemps, utilisez la commande update pour mettre vos fichiers à jour).
Vous prenez un fichier au hasard (enfin qui fasse quand même partie des fichiers sous contrôle de version

) et vous le modifiez (ajoutez une phrase au début, comme ça vous vous repèrerez facilement). Ensuite, vous sauvegardez et revenez sur l'explorateur de documents.
On constate que l'icône superposée est maintenant un "!" rouge :
Cette icône veut dire que le fichier a été modifié et que vous possédez une version du fichier que le serveur n'a pas. Mais si l'on revient au dossier parent (contenant le fichier modifié), on constate qu'il possède cette icône rouge aussi, ça veut dire que le contenu du dossier (au moins un fichier), n'est pas le même que celui sur le serveur.
Il faut donc lui envoyer les modifications que l'on a apportées.
Pour Windows
Clic-droit sur le fichier ou n'importe quel dossier parent (faisant partie des dossiers sous contrôle de version) du fichier.
Dans mon cas, j'ai cliqué sur le dossier racine. On voit dans la fenêtre que je peux laisser un message, et que le fichier modifié apparaît dans une liste où l'on peut le décocher.
Les commentaires pourront ensuite être lus par les autres membres du groupe de travail lorsqu'ils récupèreront les fichiers du serveur.
Les commentaires
Ces commentaires sont très utiles, et je vous encourage très vivement à en laisser un pour que le suivant qui récupère les données, d'un simple coup d'oeil sur les commentaires laissés, puisse savoir ce qui a été fait sur les fichiers.
Exemple de commentaire utile :
Correction orthographique du compte rendu final.
Exemple de commentaire débile :
J'ai modifié le compte rendu final.
Pourquoi dire quels fichiers ont été modifiés n'est pas utile ?
Tout simplement parce que lors du téléchargement des fichiers sur le serveur, on sait quels fichiers ont été modifiés/créés/supprimés. Lorsque l'on va sur la fenêtre des logs, le nom de la personne, le numéro de version lors de son commit ainsi que les fichiers qu'il a créés/modifiés/supprimés sont affichés automatiquement, le commentaire est là pour ajouter une information en plus sur ce que l'on a fait à ces fichiers.
Il est donc de l'inutile le plus complet d'ajouter dans son commentaire ce que la personne peut lire plus clairement et plus rapidement sur la fenêtre.
La liste des fichiers modifiés
Lorsque l'on clique sur un dossier pour faire un commit, la fenêtre propose de commiter tous les fichiers contenus dans ce dossier et qui ont été modifiés. Si l'on ne veut pas envoyer un de ces fichiers au serveur, il suffit de le décocher.
Si vous avez ajouté manuellement des fichiers (non versionnés) dans le dossier (versionné) la fenêtre affichera ces fichiers non versionnés, mais décochés par défaut pour ne pas les envoyer au serveur. Si vous les cochez, il les enverra au serveur comme nouveau fichier à prendre en compte dans le contrôle de version. Le prochain chapitre expliquera les différentes façons d'ajouter un fichier.
Si l'on clique sur un fichier, la fenêtre ne proposera que d'envoyer le fichier en question (s'il a été modifié). Pour être sûr d'envoyer toutes les modifications d'un seul coup, il suffit de faire un commit sur le dossier racine, au moins il prendra toutes les modifications en compte.
Pour UNIX
Eh bien pour vous c'est pareil. Il faut se mettre dans le dossier voulu (celui où il y a quelque chose à commiter ou un parent). Idéalement le dossier racine, et ensuite on lance la commande suivante :
Code : Bash1 | svn commit fichier_ou_dossier_à_commiter -m "mon_commentaire"
|
On peut remplacer commit par "ci", ce qui nous donne :
Code : Bash1 | svn ci fichier_ou_dossier_à_commiter -m "mon commentaire"
|
-m indique que l'argument suivant est le Message à mettre dans le log (journal).
Le -m "mon_commentaire" n'est, normalement, pas obligatoire. Il arrive parfois que le commit échoue parce que vous n'avez pas mis de commentaire. Vous obtiendrez un message d'erreur comme quoi SVN ne trouve pas d'éditeur externe pour obtenir le message de log. Si c'est le cas, pour passer à travers cette erreure, même si vous ne mettez pas de commentaire, mettez -m "".
On retrouve les mêmes options que pour Windows à quelques petits détails près. Les fichiers ajoutés manuellement dans le dossier à commiter et qui ne sont pas sous contrôle de version NE seront PAS envoyés au serveur.
L'argument fichier_ou_dossier_à_commiter n'est pas obligatoire. Si l'on ne met rien, il prendra par défaut le dossier courant. En revanche on peut aussi donner un nom de fichier pour ne commiter que le fichier.
Voilà, maintenant vous avez encore un peu mieux compris comment ça marche. Au prochain chapitre, on accélère le mouvement.