Nous allons voir ici quels sont les moyens d'obtenir encore plus d'informations.
Nous venons de voir, dans la première partie, que si nous voulions des informations sur l'état des éléments présents sur notre répertoire local par rapport au serveur, il fallait utiliser la commande
status. Mais il existe d'autres commandes pour obtenir d'autres informations. Voici de quoi vous en convaincre et obtenir une liste de toutes les commandes accessibles.
Code : Console
Code : Console | usage: svn <subcommand> [options] [args]
Subversion command-line client, version 1.4.4.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
or 'svn --version --quiet' to see just the version number.
Most subcommands take file and/or directory arguments, recursing
on the directories. If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.
Available subcommands:
add
blame (praise, annotate, ann)
cat
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mkdir
move (mv, rename, ren)
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
Subversion is a tool for version control.
For additional information, see http://subversion.tigris.org/ |
Dans cette liste, vous reconnaissez les commandes que l'on a déjà utilisées :
add, checkout, commit, copy, delete, export, help, mkdir, move, status, update.
Et celles que l'on n'a pas encore vues :
blame, cat, cleanup, diff, import, info, list, lock, log, merge, prop*, resolved, revert, switch, unlock.
Ici, nous allons voir
list, log, info et cat.
cat et list
Ces deux commandes sont très simples, elles font la même chose qu'en shell...
cat
cat permet d'afficher le contenu d'un fichier :
Code : Console | svn cat Fichier_ou_URL [-r revision] [--username login] [--password mdp] |
Pour l'afficher, il faut préciser un fichier ou bien une URL si le fichier ne se trouve pas sur notre répertoire local. Comme il faut accéder au serveur, il est possible (si on ne les a pas gardés dans le cache) de renseigner ses login et mot de passe. Il reste une nouvelle option que nous allons voir, la possibilité de préciser dans quelle version (révision) on souhaite voir le fichier. Cette version peut être demandée de diverses façons :
- par le numéro de la version si on le connaît (1, 2, 13, 40...) ;
- en utilisant {DATE} : la date entre accolades pour avoir la plus récente des versions disponibles de l'instant ;
- avec HEAD : la dernière version en date dans le repository (sur le serveur) ;
- grâce à BASE : la version du dernier update fait sur la Working Copy (BASE sera utile par la suite lorsqu'on voudra comparer deux versions) ;
- avec COMMITTED : la dernière version pour laquelle un commit a été effectué (mais inférieure ou égale à la version de la copie locale) ;
- enfin avec PREV, pour la version juste avant COMMITTED.
Il n'est pas possible d'utiliser les mots clefs BASE, COMMITTED ou PREV avec une URL étant donné qu'ils font référence à la version disponible sur la copie de travail (copie locale). On ne peut les utiliser que lorsque l'on donne un chemin vers le fichier dans une copie de travail.
svn cat affiche le fichier demandé dans la version voulue. Si vous avez fait des modifications locales et que vous faites svn cat, il vous affichera le fichier tel qu'il était lorsque vous l'avez récupéré, sans vos modifications.
list (ls)
list permet, comme en shell, de lister le contenu d'un répertoire. Et bien sûr, comme pour
cat, on a des options en plus :
Code : Console | svn list (ou ls) [dossier_à_lister] [-r Revision] [-v] [-R] [--username login] [--password mdp] |
Dans ces options, on retrouve :
- le dossier cible s'il est différent du dossier dans lequel on se trouve ;
- la révision si on veut un aperçu des fichiers à une autre version ;
- le login et le mot de passe pour l'accès au serveur ;
- le -v (pour verbose) que nous avons déjà rencontré avec status et qui permet d'afficher toutes les informations sur les éléments.
Il reste le
-R que je n'ai pas encore présenté. Il permet, tout simplement, de descendre récursivement l'arborescence à partir du dossier choisi (c'est la même option en shell ; pour vous en convaincre, essayez : '
man ls | grep -e -R'). Cette option est donc très utile si vous voulez obtenir la liste de tous les éléments disponibles dans une arborescence sans avoir à faire
svn ls sur tous les sous-dossiers.
Attention, svn ls ne liste que les fichiers versionnés. Si vous voulez aussi afficher les autres, faites ls !
Et pour Windows
Eh bien,
cat et
list n'ont pas vraiment lieu d'être étant donné que l'on utilise une interface graphique. Cependant, il est utile de pouvoir consulter l'état du
repository aux différentes versions. Pour ça, on trouve le "
Repository Browser".
Clic droit >>
TortoiseSVN >>
Repo-browser :

Cet outil permet de parcourir l'arborescence à la version demandée.
Si vous faites un clic droit sur un élément, vous trouverez plein d'actions disponibles...
info
La commande
info vous donne... des informations.

Nous allons donc voir les informations que l'on peut obtenir.
Comme vous devriez en prendre l'habitude, on tape :
Code : Console
Et on obtient le manuel d'utilisation de la commande. De ce manuel, on déduit que la commande se lance de la façon suivante :
Code : Console | svn info [Target ...] [-r Revision] [-R] [--targets Fichier_darguments] [--username login] [--password mdp] |
Eh oui, plus on avance, et plus je présente d'options !
Alors, dans toutes ces options vous connaissez déjà :
Target (fichier, dossier ou URL cible),
-r (révision),
-R (Récursif),
--username (login) et
--password (mot de passe).
Nous avons un petit nouveau qui s'invite :
--target. Cette option est un peu... bizarre, spéciale. Elle permet de spécifier un fichier qui contient des liens vers d'autres fichiers, fichiers que vous voulez ajouter en argument de la commande.
Pas très bien compris...

Un petit exemple et tout va rentrer dans l'ordre.
Je lance le code suivant :
Code : Console | svn info Dossier\ 1/ --targets argInfo |
Avec comme fichier
argInfo :
Code : Autre1
2
| /Users/mvandamme/Documents/Boulot/Tuto-SdZ/Tuto-SdZ/Fichier 1.txt
/Users/mvandamme/Documents/Boulot/Tuto-SdZ/Tuto-SdZ/Dossier 2/Fichier2.1.txt |
Et j'obtiens comme résultat :
Code : Console | Path: Dossier 1
URL: http://svn.assembla.com/svn/Tuto-SdZ/Dossier%201
Repository Root: http://svn.assembla.com/svn/Tuto-SdZ
Repository UUID: d7ba3245-3e7b-42d0-9cd4-356c8b94b330
Revision: 18
Node Kind: directory
Schedule: normal
Last Changed Author: SdZ-Guest
Last Changed Rev: 12
Last Changed Date: 2008-06-21 13:35:11 +0200 (Sam, 21 jui 2008)
Path: /Users/mvandamme/Documents/Boulot/Tuto-SdZ/Tuto-SdZ/Fichier 1.txt
Name: Fichier 1.txt
URL: http://svn.assembla.com/svn/Tuto-SdZ/Fichier%201.txt
Repository Root: http://svn.assembla.com/svn/Tuto-SdZ
Repository UUID: d7ba3245-3e7b-42d0-9cd4-356c8b94b330
Revision: 18
Node Kind: file
Schedule: normal
Last Changed Author: mvandamme
Last Changed Rev: 16
Last Changed Date: 2008-06-22 16:10:28 +0200 (Dim, 22 jui 2008)
Text Last Updated: 2008-06-22 21:44:57 +0200 (Dim, 22 jui 2008)
Checksum: dc9a920d91087fcc9032192a8fda9e9c
Path: /Users/mvandamme/Documents/Boulot/Tuto-SdZ/Tuto-SdZ/Dossier 2/Fichier2.1.txt
Name: Fichier2.1.txt
URL: http://svn.assembla.com/svn/Tuto-SdZ/Dossier%202/Fichier2.1.txt
Repository Root: http://svn.assembla.com/svn/Tuto-SdZ
Repository UUID: d7ba3245-3e7b-42d0-9cd4-356c8b94b330
Revision: 18
Node Kind: file
Schedule: normal
Last Changed Author: mvandamme
Last Changed Rev: 1
Last Changed Date: 2008-05-25 15:11:27 +0200 (Dim, 25 mai 2008)
Text Last Updated: 2008-05-31 12:31:44 +0200 (Sam, 31 mai 2008)
Checksum: d41d8cd98f00b204e9800998ecf8427e |
On remarque que les fichiers indiqués dans le fichier
target ont été pris en compte (voici donc l'utilité de cette option).
Si vous donnez un fichier contenant des lignes qui ne sont pas des chemins vers d'autres fichiers ou des dossiers versionnés, SVN les ignorera tout simplement et vous mettra en sortie (en plus du résultat de svn info) chaque "mauvaise" ligne suivie de (Not a versioned resource).
Intéressons-nous maintenant au contenu du résultat obtenu.
- Path : donne le chemin vers l'élément.
- Name : nom du fichier (uniquement pour les fichiers).
- URL : donne l'URL de l'élément sur le serveur.
- Repository Root : donne l'URL de la racine du repository.
- Repository UUID : IDentifiant Universellement Unique du repository (tout ce dont vous devez vous rappeler, c'est qu'il s'agit d'un identifiant unique, nous verrons son utilité dans l'utilisation avancée de SVN).
- Revision : version de l'élément.
- Node Kind : type de l'élément.
- Schedule : prévision pour l'élément (il est possible de donner des prévisions de ce que l'on va faire à l'élément).
- Last Changed Author : dernière personne à l'avoir modifié (commité).
- Last Changed Rev : dernière version dans laquelle l'élément a été modifié.
- Last Changed Date : dernière date à laquelle l'élément a été modifié.
- Text Last Updated : dernier update du fichier effectué (par notre working copy).
- Checksum : somme de contrôle pour vérifier la validité des données. Comprenez bien que le contrôle effectué par un checksum n'est pas une garantie de la validité des données (si vous voulez comprendre le fonctionnement d'une somme de contrôle : http://fr.wikipedia.org/wiki/Checksum et http://en.wikipedia.org/wiki/Checksum).
Je n'ai pas trouvé d'équivalent sous TortoiseSVN. Il est vrai que les informations obtenues sont très générales (Revision, URL, Path, etc.), elles se trouvent donc un peu dans toutes les autres fenêtres.
log
Voici la commande la plus importante de toutes (ou tout du moins celle que vous devriez utiliser le plus souvent).
log permet d'afficher les messages de log laissés.
Pour apprendre à utiliser la commande, comme cela devrait devenir une habitude, on regarde le manuel :
Code : Console
Le manuel nous informe que l'utilisation de la commande se fait comme suit :
Code : Console | svn log [Chemin] [-r Revision] [-v] [--targets Fichier] [--username login] [--password mdp] [--limit nb_dentré_max] |
Dans ces options, nous n'avons pas vu
--limit ni
-r Revision qui cette fois-ci ne s'utilisent pas de la même façon.
Commençons par
-r Revision. Cette fois, on ne demande pas une révision, mais un ensemble de révisions. À la place de faire
-r rev, il faut faire
-r Rev1:Rev2 avec
Rev1 la révision de laquelle on part, et
Rev2 la révision à laquelle on veut arriver.
Par défaut, si rien n'est précisé, les révisions affichées seront
BASE:1, ce qui signifie de la version actuellement sur la
Working Copy à la première version.
Que se passe-t-il quand on fait svn log -r 1:BASE ?
--limit nb_dentré_max, quant à lui, informe du nombre maximum de messages de log à afficher.
--limit 10 dit au SVN qu'on ne veut
au maximum que 10 messages de log affichés (s'il y en a moins, il en affichera moins).
Euh, mais elle ne sert à rien cette option... si on ne veut pas plus de 10 messages de log, ne suffit-il pas de ne demander les logs que pour les 10 dernières versions, tout simplement ?
Eh bien...
NON !
Bon, j'en fais peut-être un peu trop, là...
Mais pourquoi non ? Eh bien pour vous convaincre, prenons un exemple. Si je demande les messages de log d'un sous-dossier seulement et non plus du dossier racine, rien ne dit qu'à chaque fois que quelqu'un aura fait un
commit il aura modifié des choses dans ce dossier. Et justement, pour ces versions où rien n'aura été modifié dans le dossier, la commande
log ne va pas afficher le log. Il en découle que même si vous demandez les logs pour les versions allant de 1 à 100 d'un élément, il se peut très bien que SVN ne vous affiche que quelques logs.
Maintenant que nous savons comment nous en servir, utilisons-la (je suis dans le dossier racine) :
Code : Console | svn log --limit 5
------------------------------------------------------------------------
r18 | SdZ-Guest | 2008-06-22 16:12:56 +0200 (Dim, 22 jui 2008) | 1 line
------------------------------------------------------------------------
r17 | SdZ-Guest | 2008-06-22 16:11:11 +0200 (Dim, 22 jui 2008) | 1 line
test de fichier de itichi.
------------------------------------------------------------------------
r16 | mvandamme | 2008-06-22 16:10:28 +0200 (Dim, 22 jui 2008) | 1 line
ajout d'un ligne pour l'utilisation de cat
------------------------------------------------------------------------
r15 | mvandamme | 2008-06-22 13:04:27 +0200 (Dim, 22 jui 2008) | 1 line
Ajout de text pour tester le cat
------------------------------------------------------------------------
r14 | Sdz-Guest | 2008-06-21 15:32:02 +0200 (Sam, 21 jui 2008) | 1 line
------------------------------------------------------------------------ |
On trouve comme informations :
- le numéro de version ;
- l'auteur du commit ;
- la date du commit (notez comment les dates sont affichées, c'est le même format qu'il faut utiliser pour renseigner une date avec -r) ;
- le nombre de lignes du commentaire ;
- plus bas, le commentaire lui-même ;
- puis une ligne de '-' pour délimiter l'autre message de log.
On peut voir sur cet exemple de log que de nombreux zéros ne mettent pas de commentaires lorsqu'ils font des
commit. Honte sur eux !
Et félicitations à ceux qui en ont mis.
Voici un autre exemple de log :
Code : Console | svn log Dossier\ 1/ -v
------------------------------------------------------------------------
r12 | SdZ-Guest | 2008-06-21 13:35:11 +0200 (Sam, 21 jui 2008) | 1 line
Changed paths:
A /Dossier 1/helloWorld.cpp (from /helloWorld.cpp:10)
A /test
------------------------------------------------------------------------
r1 | mvandamme | 2008-05-25 15:11:27 +0200 (Dim, 25 mai 2008) | 1 line
Changed paths:
A /Dossier 1
A /Dossier 1/Fichier1.1.txt
A /Dossier 2
A /Dossier 2/Fichier2.1.txt
A /Fichier 1.txt
Ajout de fichiers et dossiers pour les tests
------------------------------------------------------------------------ |
On voit bien ici ce que je disais plus haut : bien que je demande d'afficher toutes les versions (
BASE:1), le
Dossier 2 n'a été modifié qu'aux 1
e et 12
e révisions. Seules ces deux versions sont affichées. On notera aussi que le
verbose (
-v) nous affiche en plus les informations sur les actions effectuées.
Et pour Windows
La fenêtre de log avec TortoiseSVN est accessible de diverses manières. La plus standard est :
clic droit >>
TortoiseSVN >>
Show log
La façon la plus utilisée est : suite à un
update, cliquez sur le bouton
Show log....
Quelle que soit la manière, on obtient la fenêtre suivante :
Cette fenêtre, amis zéros, est une véritable mine d'informations.
Regardons d'abord les boutons. On voit que l'on peut sélectionner les dates de départ et de fin pour l'affichage des logs (comme pour
-r {DATE} en fait), mais aussi que l'on peut tout afficher (
Show All), ou seulement les 100 logs suivants, ou encore uniquement un ensemble de révisions (
Show Range..., appuyez sur la petite flèche à droite de
Show All), et que l'on peut enfin rafraîchir la fenêtre. Notons la barre de recherche en haut à droite, très bien faite : elle permet d'effectuer une recherche sur le champ de votre choix (cliquez sur la loupe pour voir) et accepte les expressions régulières.
Enfin, le bouton
help donne accès à l'aide de TortoiseSVN pour le log (cette aide est
EXTRÊMEMENT bien faite, n'hésitez pas à la consulter) et le bouton
Statistics vous affichera des graphiques sur le nombre de
commit par login et par date.
On voit aussi trois "check boxes", tout ce que vous avez besoin de savoir est que
stop on copy/rename ne va afficher les logs de l'élément demandé que jusqu'à ce qu'il ait été copié ou renommé (mais ne va pas chercher les logs du fichier copié ou avant qu'il ait été renommé).
Maintenant passons au plus important. Les trois champs centraux :
- le premier affiche un résumé de tous les logs demandés ;
- le deuxième affiche le commentaire de la version sélectionnée dans le premier champ ;
- le troisième affiche les actions qui ont eu lieu lors de la version sélectionnée dans le premier champ.
Pas grand-chose à dire sur le deuxième et le troisième champ. En revanche, le premier champ offre un résumé assez complet et disponible en un rapide coup d'oeil. Analysons colonne par colonne.
- La première colonne donne le numéro de la version.
- La deuxième donne un aperçu des actions qui ont eu lieu.
Un fichier avec un '!' signifie qu'un fichier (au moins) a été modifié.
Un fichier avec un '+' signifie qu'un fichier (au moins) a été ajouté.
Un fichier avec un 'x' signifie qu'un fichier (au moins) a été supprimé.
En réalité, il y a une quatrième icône mais on ne va pas la voir maintenant. Si vous êtes curieux la doc est par là. ==>
- La troisième donne l'auteur du commit.
- La quatrième donne la date du commit.
- La cinquième enfin donne le commentaire du commit (mais sans afficher les retours chariot).
Vous voyez bien qu'avec ce premier tableau, vous obtenez déjà un très bon résumé des changements ayant eu lieu lors du
commit.