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 :
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.
Affiche des détails spécifiques sur la manière dont un fichier a changé au fil du temps.
Permet de retrouver tout fichier tel qu'il existait à un numéro de révision particulier et de l'afficher sur votre écran.
Affiche les fichiers d'un répertoire pour n'importe quelle révision donnée.
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.
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
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 $
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 $
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 … $
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.
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.
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
…