Consulter l'Historique

Comme mentionné plus tôt, le dépôt est comme une machine à voyager dans le temps. Il garde une trace de tous les changements propagés, et vous permet d'explorer cet historique en examinant des versions précédentes des fichiers et répertoires ainsi que les métadonnés qui les accompagnent. Avec une simple commande Subversion, vous pouvez faire une extraction du dépôt (ou restaurer une copie de travail) exactement comme il était à n'importe quelle date ou numéro de révision du passé. Cependant, parfois vous voudrez seulement pouvoir jeter un coup d'oeil sur le passé plutôt que retourner dans le passé.

Plusieurs commandes vous fournissent des informations à propos de l'historique du dépôt :

svn log

Fournit un grand nombre d'informations : commentaires d'historique avec les dates et les auteurs attachés aux révisions ainsi que les éléments qui ont été modifiés à chaque révision.

svn diff

Affiche des détails spécifiques sur la manière dont un fichier a changé au fil du temps.

svn cat

Permet de retrouver tout fichier tel qu'il existait à un numéro de révision particulier et de l'afficher sur votre écran.

svn list

Affiche les fichiers d'un répertoire pour n'importe quelle révision donnée.

svn log

Pour chercher des informations sur l'historique d'un fichier ou d'un répertoire, utilisez la commande svn log. svn log vous permettra de savoir qui a fait des modifications sur un fichier ou un répertoire, à quelle révision il a changé, l'heure et la date de cette révision et, s'il a été fourni, le commentaire d'historique qui a accompagné la propagation du ou des changements.

$ svn log
------------------------------------------------------------------------
r3 | sally | Mon, 15 Jul 2002 18:03:46 -0500 | 1 line

Added include lines and corrected # of cheese slices.
------------------------------------------------------------------------
r2 | harry | Mon, 15 Jul 2002 17:47:57 -0500 | 1 line

Added main() methods.
------------------------------------------------------------------------
r1 | sally | Mon, 15 Jul 2002 17:40:08 -0500 | 1 line

Initial import
------------------------------------------------------------------------

Notez que les commentaires de journal apparaîssent par défaut dans l'ordre chronologique inversée. Si vous souhaitez voir un intervalle de révisions différent dans un ordre particulier, ou juste une seule révision, passez un argument à l'option --revision (-r) :

$ svn log --revision 5:19    # affiche l'historique de la révision 5 à 19 dans
                             # l'ordre chronologique

$ svn log -r 19:5            # affiche l'historique de la révision 5 à 19 dans
                             # l'ordre inversée

$ svn log -r 8               # Affiche l'entrée de l'historique pour la
                             # révision 8

Vous pouvez aussi consulter l'historique d'un seul fichier ou répertoire. Par exemple :

$ svn log foo.c
…
$ svn log http://foo.com/svn/trunk/code/foo.c
…

Vous ne verrez alors s'afficher que les commentaires des révisions dans lesquelles le fichier de travail (ou URL) a changé.

Si jamais vous souhaitez obtenir plus d'informations sur un fichier ou répertoire, svn log accepte aussi l'option --verbose (-v). Parce que Subversion vous permet de déplacer et copier des fichiers et des répertoires, il est important de pouvoir retrouver les changements de chemin dans le système de fichiers, donc en mode “verbeux”, svn log inclura la liste des chemins modifiés lors d'une révision :

$ svn log -r 8 -v
------------------------------------------------------------------------
r8 | sally | 2002-07-14 08:15:29 -0500 | 1 line
Changed paths:
M /trunk/code/foo.c
M /trunk/code/bar.h
A /trunk/code/doc/README

Frozzled the sub-space winch.

------------------------------------------------------------------------

svn log accepte aussi l'option --quiet (-q), qui supprime l'affichage du commentaire dans l'historique. Combinée avec --verbose, la commande fournit seulement les noms des fichiers modifiés.

svn diff

Nous avons déjà évoqué svn diff plus tôt — Cette commande affiche les différences de fichiers au format “unified diff”; elle a été utilisée pour montrer les modifications locales effectuées dans notre copie de travail avant une propagation dans le dépôt.

En fait, il se trouve qu'il existe trois utilisations distinctes de svn diff :

  • Consultez les modifications locales

  • Comparez votre copie de travail avec le dépôt

  • Comparez le dépôt avec le dépôt

Consulter les Modifications Locales

Comme nous l'avons vu, exécuter svn diff sans aucune option comparera vos fichiers de travail avec les “copies originales” mises en cache dans le répertoire .svn :

$ svn diff
Index: rules.txt
===================================================================
--- rules.txt	(revision 3)
+++ rules.txt	(working copy)
@@ -1,4 +1,5 @@
 Be kind to others
 Freedom = Responsibility
 Everything in moderation
-Chew with your mouth open
+Chew with your mouth closed
+Listen when others are speaking
$

Comparer la Copie de Travail avec le Dépôt

Si un seul nombre est passé à --revision (-r), alors votre copie de travail est comparée à la révision spécifiée dans le dépôt.

$ svn diff --revision 3 rules.txt 
Index: rules.txt
===================================================================
--- rules.txt	(revision 3)
+++ rules.txt	(working copy)
@@ -1,4 +1,5 @@
 Be kind to others
 Freedom = Responsibility
 Everything in moderation
-Chew with your mouth open
+Chew with your mouth closed
+Listen when others are speaking
$

Comparer le Dépôt avec le Dépôt

Si deux numéros de révision, séparés par deux points, sont indiquées via l'option --revision (-r), alors deux révisions sont directement comparées.

$ svn diff --revision 2:3 rules.txt 
Index: rules.txt
===================================================================
--- rules.txt	(revision 2)
+++ rules.txt	(revision 3)
@@ -1,4 +1,4 @@
 Be kind to others
-Freedom = Chocolate Ice Cream
+Freedom = Responsibility
 Everything in moderation
 Chew with your mouth open
$

Non seulement vous pouvez utiliser svn diff pour comparer des fichiers de votre copie de travail avec le dépôt, mais si vous passez une URL en argument, vous pouvez consulter les différences entre des éléments du dépôt sans même avoir une copie de travail. Ceci est particulièrement utile lorsque vous souhaitez regarder les modifications subies par un fichier lorsque vous n'avez pas de copie de travail sur votre machine locale :

$ svn diff --revision 4:5 http://svn.red-bean.com/repos/example/trunk/text/rules.txt
…
$

svn cat

Si vous souhaitez consulter un fichier dans une version plus ancienne et pas nécessairement les différences entre deux fichiers, vous pouvez utiliser svn cat:

$ svn cat --revision 2 rules.txt 
Be kind to others
Freedom = Chocolate Ice Cream
Everything in moderation
Chew with your mouth open
$

Vous pouvez aussi rediriger le flux de sortie directement dans un fichier :

$ svn cat --revision 2 rules.txt > rules.txt.v2
$

Vous vous demandez surement pourquoi ne pas se contenter d'utiliser svn update --revision pour mettre à jour le fichier dans une version plus ancienne. Il existe plusieurs raisons pour lesquelles nous pouvons préférer utiliser svn cat.

Tout d'abord, vous pouvez vouloir visualiser les différences entre deux révisions d'un fichier en utilisant un logiciel de comparaison de fichier externe (peut-être un logiciel graphique ou peut-être votre fichier est dans un format pour lequel la visualisation en mode “unified” manque de sens). Dans un tel cas, vous devez effectuer une copie de l'ancienne révision par redirection dans un fichier et fournir ce fichier ainsi que celui de votre copie de travail à votre logiciel de comparaison externe.

Parfois il est plus facile de parcourir l'ancienne version d'un fichier dans son intégralité plutôt que de ne voir que les différences entre ce dernier et une autre révision.

svn list

La commande svn list affiche les fichiers contenus par un répertoire du dépôt sans avoir à télécharger les fichiers sur votre machine locale :

$ svn list http://svn.collab.net/repos/svn
README
branches/
clients/
tags/
trunk/

Si vous souhaitez un listing plus détaillé, utilisez l'option --verbose (-v) pour obtenir des informations plus détaillées comme dans cet exemple :

$ svn list --verbose http://svn.collab.net/repos/svn
   2755 harry          1331 Jul 28 02:07 README
   2773 sally               Jul 29 15:07 branches/
   2769 sally               Jul 29 12:07 clients/
   2698 harry               Jul 24 18:07 tags/
   2785 sally               Jul 29 19:07 trunk/

Les colonnes vous indiquent la révision durant laquelle le répertoire ou le fichier a été modifié pour la dernière fois, l'utilisateur qui l'a modifié, la taille s'il s'agit d'un fichier, la date de dernière modification et le nom de l'élément.

Un Dernier Mot à propos de l'Historique

En complément de toutes les commandes ci-dessus, vous pouvez utiliser svn update et svn checkout avec l'option --revision pour obtenir une copie de travail complète “à l'image du passé[14]:

$ svn checkout --revision 1729 # Extrait une nouvelle copie de travail de la
                               # r1729
…
$ svn update --revision 1729 # Actualise une copie de travail existante avec la
                             # r1729
…


[14] Vous voyez ? Nous vous avions dit que Subversion était une machine à explorer le temps.