Certaines personnes ont du mal à assimiler une nouvelle technologie par une approche “descendante”[7] telle que celle exposée par ce livre. Cette section est une très courte introduction à Subversion, et est destinée à donner une chance aux personnes qui assimilent mieux avec une approche d'apprentissage “montante[8]”. Si vous êtes de ceux qui préfèrent apprendre par expérimentation, la démonstration qui va suivre vous mettra le pied à l'étrier. Au fur et à mesure, nous vous renverrons aux chapitres pertinents de ce livre.
Si le concept de contrôle de version ou si le modèle “copier-modifier-fusionner” utilisé par CVS et Subversion est complètement nouveau à vos yeux, vous devriez lire le Chapter 2, Concepts de base avant d'aller plus loin.
Dans l'exemple qui suit, nous supposerons que vous avez installé avec succès svn, le client Subversion en ligne de commande, et l'outil d'administration svnadmin. Nous supposerons aussi que vous utilisez une version de Subversion égale ou supérieure à la version 1.2 (exécutez svn --version pour vérifier.)
Subversion conserve toutes les données soumises au contrôle de version dans un dépôt central. Pour commencer, créons un nouveau dépôt :
$ svnadmin create /chemin/vers/depot $ ls /chemin/vers/depot conf/ dav/ db/ format hooks/ locks/ README.txt
Cette commande crée un nouveau répertoire
/chemin/vers/depot qui contient un dépôt
Subversion. Ce nouveau répertoire contient (entre autres) une
collection de fichiers qui constitue une base de données. Vous ne trouverez
pas vos fichiers si vous y jetez un coup d'oeil. Pour plus d'informations
à propos de la création et de la maintenance d'un dépôt, voir
Chapter 5, Administration du dépôt.
Subversion n'a aucune notion du concept de “projet”. Le dépôt n'est qu'un système de fichiers virtuel soumis au contrôle de version, un grand arbre qui peut contenir tout ce que vous souhaitez. Certains administrateurs préfèrent ne stocker q'un seul projet par dépôt, d'autres préfèrent stocker plusieurs projets dans un seul dépôt en les plaçant chacun dans un répertoire séparé. Les avantages et inconvénients de chaque approche sont discutés dans the section called “Choosing a Repository Layout”. Dans les deux cas, le dépôt ne gère que des fichiers et des répertoires, aussi il incombe aux utilisateurs de considérer que des répertoires particuliers représentent des “projets”. C'est pourquoi, même si vous trouverez des références à des notions de projet à travers ce livre, gardez bien à l'esprit que nous serons toujours en train de parler de répertoires (ou de collections de répertoires) dans le dépôt.
Dans cette exemple, nous partons de l'hypothèse que vous avez déjà
une sorte de projet (une collection de fichiers et de répertoires) que vous
souhaitez importer dans votre dépôt Subversion nouvellement créé.
Commencez par les organiser sous la forme d'un seul répertoire
nommé monprojet (ou tout autre nom de votre choix).
Pour des raisons qui seront abordées plus tard (voir
Chapter 4, Branching and Merging), la structure arborescente de votre projet
devrait contenir trois répertoires de haut niveau
nommés branches,
tags, et
trunk. Le répertoire trunk
devrait contenir toutes vos données,
tandis que les répertoires branches
et tags sont vides :
/tmp/monprojet/branches/
/tmp/monprojet/tags/
/tmp/monprojet/trunk/
foo.c
bar.c
Makefile
…
Une fois votre arborescence de données prête, importez la dans le dépôt avec la commande svn import (voir the section called “svn import”) :
$ svn import /tmp/monprojet file:///chemin/vers/depot/monprojet -m "import initial"
Adding /tmp/myproject/branches
Adding /tmp/myproject/tags
Adding /tmp/myproject/trunk
Adding /tmp/myproject/trunk/foo.c
Adding /tmp/myproject/trunk/bar.c
Adding /tmp/myproject/trunk/Makefile
…
Committed revision 1.
$
À présent le dépôt contient cette arborescence. Comme signalé
plus tôt, vous ne verrez pas vos fichiers en inspectant directement le contenu
du dépôt; ils sont tous stockés dans une base de données. Mais le
système de fichiers imaginaire du dépôt contient à présent un répertoire
de haut niveau nommé monprojet, qui, lui,
contient vos données.
Remarquez que le répertoire original /tmp/monprojet
est inchangé; Subversion n'a aucune connaissance de ce dernier. (En fait,
vous pouvez même le supprimer si vous le voulez.) Afin de
commencer à manipuler les données du dépôt, vous devez créer une nouvelle
“copie de travail” de vos données, une sorte d'espace
de travail privé. Demandez à Subversion d'“extraire” une copie
de travail du répertoire monproject/trunk situé dans
le dépôt :
$ svn checkout file:///chemin/vers/depot/monprojet/trunk monprojet A monprojet/foo.c A monprojet/bar.c A monprojet/Makefile … Checked out revision 1.
Vous disposez maintenant d'une copie personnelle d'une partie du dépôt
dans un nouveau répertoire nommé monprojet. Vous pouvez
modifier les fichiers de votre copie de travail puis propager ces changements
vers le dépôt.
Entrez dans votre copie de travail et éditez le contenu des fichiers.
Exécutez svn diff pour afficher vos changements au format “unified diff”.
Exécutez svn commit pour propager la nouvelle version de votre fichier vers le dépôt.
Exécutez svn update pour obtenir une copie de travail “synchronisée” avec le contenu du dépôt.
Pour une description exhaustive de toutes les choses que vous pouvez faire avec votre copie de travail, lisez le Chapter 3, Visite Guidée.
Dès maintenant, vous avez la possibilité de mettre votre dépôt à la disposition d'autres personnes à travers un réseau. Voir le Chapter 6, Server Configuration pour en apprendre plus sur les différents types de serveur disponibles et sur la manière de les configurer.