Mémorandum Subversion, révision 2

Version courte du mémorandum.Le système de contrôle de révisions SVN utilise HTTP et WebDAV, deux standards pré-existants, pour transmettre ses données

Structure du repository

/
/branches/
/tags/
/trunk/
  • branches = versions en développement.
  • tags = versions gelées (= releases).
  • trunk = branche principale de développement.

Opérations sur les fichiers

Ajouter un/des fichiers/répertoires.

svn add nouveau

Copier un fichier/répertoire.

svn copy depuis vers

Supprimer un/des fichiers/répertoires.

svn delete vieux

Déplacer un fichier/répertoire.

svn move depuis vers

Opérations sur le dépôt

Récupérer une version de travail.Les actions de base réalisables sur les fichiers (hors édition)

svn checkout url

Import initial.

svn import dossier

Créer un dossier.

svn mkdir dossier

Mise à jour de la version locale par rapport au dépôt.

svn update

Opérations sur les changements

Envoyer un ensemble de changements au dépôt.

svn commit

"Diff" entre deux fichiers ou deux révisions d'un fichier.

svn diff

Liste des changements (historique).

svn log

Fusion des changements entre deux versions, deux branches...

svn merge

Signaler la résolution d'un conflit.

svn resolved

Annuler les modifications sur un fichier/répertoire de la copie locale.

svn revert

Liste des changements entre la version locale et le dépôt.

svn status

Mémorandum Subversion

Création du repository

Pour créer un nouveau projet dans un repository existant, avec comme structure :

|
|- /
   |
   |- mon-appli/
      |
      |- trunk/
      |- branches/
      |- tags/

C'est l'arborescence typique d'un repository Subversion. S'il n'y a qu'une seule application dedans, les répertoires trunk/, branches/ et tags/ sont à la racine, soit :

|
|- /
   |
   |- trunk/
   |- branches/
   |- tags/

Le path vers le repository est donc de la forme : http://www.example.com/repository/mon-appli. La partie avant "mon-appli" est variable, et dépend du serveur (ce peut être un "serveur" local, donc avec une URL en file:///, ou bien un serveur WebDAV - HTTP, quoi -, avec une URL en http://, ou bien https:// si la connexion est encryptée en SSL). Voir avec le "fournisseur" du repository pour l'URL exacte.

On crée donc l'arborescence en local, mais pas son contenu. Le plus simple est de se placer dans un dossier vide, dont le nom et la position importe peu, qui représente la racine du repository. On a donc (dans le cas de la première arborescence présentée) :

|
|- /home/moi/
   |
   |- mon-appli/
      |
      |- trunk/
      |- branches/
      |- tags/

Dans le répertoire /home/moi/, on tape :

svn import . http://www.example.org/repository

NB: le . représente le répertoire local (comme d'hab', quoi).

Et voilà ! On efface ensuite l'arborescence (voilà pourquoi il ne fallait pas y mettre de fichiers ;) ), et on "check out" une "working copy" toute neuve là où on veut bosser dessus. Il est plus pratique de ne récupérer que le trunk/ (les autres répertoires servent rarement, et on peut de toutes façons "travailler" dessus comme on en a besoin par leurs seules URL).

Accès au repositoryURL

Pour faire un "check out" d'une "working copy" (récupération d'une copie de travail) :

svn checkout http://www.example.org/repository/mon-appli/trunk

Ensuite, si on a des répertoires dans son arborescence de projet (dans le trunk/, par exemple) :

|
|- trunk/
   |
   |- tata/
   |- toto/
   |- tutu.txt

On peut accéder à n'importe lequel de ces répertoires (et en obtenir une "working copy" - copie de travail) par l'URL (pour l'exemple de toto/) :

svn checkout http://www.example.org/repository/mon-appli/trunk/toto

Modifications sur les fichiers en local

Pour modifier le contenu d'un fichier : utiliser son éditeur de texte / graphique / nawak préféré.

Pour ajouter un fichier au repository (après l'avoir créé) :

svn add fichier

Pour supprimer un fichier (avant de le supprimer physiquement - en fait à la place, puisque Subversion s'en charge) :

svn delete fichier

Pour déplacer un fichier (mêmes conditions que pour supprimer) :

svn move depuis vers

Pour copier un fichier (mêmes conditions) :

svn copy depuis vers

Qu'est-ce que j'ai fait ?!

Pour savoir quelles modifications on a apportées à la "working copy" (avant de faire un commit) :

svn status

Cette commande renvoie une liste des fichiers modifiés dans le répertoire courant (ou dans le dossier spécifié à sa suite, ou bien encore un seul fichier si c'est le path d'un fichier qui a été donné), préfixés de signes plus ou moins cabalistiques :

  • A : à ajouter au repository.
  • C : en conflit (changement en local + changements en même temps sur le repository).
  • D : à supprimer du repository.
  • M : élément modifié.
  • ? : élément non géré par Subversion.
  • ! : élément absent (suppression d'un fichier sans svn delete, par exemple).
  • I : élément ignoré par Subversion.

Pour faire un "diff" (format standardisé pour visualiser les changements ligne à ligne entre deux fichiers texte) :

svn diff
svn diff fichier
svn diff --revision 1:2 fichier

Dans l'ordre :

  • Diff sur tout le répertoire.
  • Diff sur le seul fichier (on peut aussi spécifier un répertoire à la place).
  • Diff sur le seul fichier pour les révisions 1 et 2.

Pour annuler des changements, et revenir à la version du repository :

svn revert

On peut également passer un fichier ou un répertoire ou un numéro de version.

Mise à jour de la working copy

svn update

Attention ! svn update est différent de cvs update. La version CVS de la commande permet de voir quels sont les changements qui ont été apportés à la "working copy". Dans le monde de SVN, il faut utiliser svn status pour ça. svn update met à jour votre version locale par rapport au repository distant !

WarDriving

Je me suis amusé hier à faire du WarDriving entre chez moi et Saint-Vallier (Ardèche). Voici les résultats.

On peut noter :

  • le nombre important de nodes WiFi rencontrés en à peine 3 heures de temps et par autoroute principalement.
  • que Wanadoo couvre un certain nombre de grandes villes.
  • qu'il y a un nombre important de réseaux non-cryptés.
  • que Windows XP SP2 suxxe pour faire du WarDriving. Surtout le SP2.