Aller au menu - Aller au contenu

Icône Communiquez avec le SVN

L'auteur de ce cours cherche un repreneur pour continuer son travail
Parfois, certains auteurs de cours n'ont plus le temps de rédiger et de mettre à jour leur travail. Ils recherchent alors un nouvel auteur pour "reprendre" leur tutoriel (voir la liste des tutoriels en attente de repreneur).
Contactez l'auteur si vous aimeriez continuer la rédaction !

Avatar
Mise à jour : 02/05/2009
1 845 visites depuis 7 jours, dont 136 sur ce chapitre classé 74/786
Ce chapitre est un peu particulier : il ne va pas vous apprendre à faire plus de choses sur le SVN mais au contraire, il va vous apprendre à l'écouter (c'est mignon :honte: ).
Comprendre ce qu'il se passe est primordial ; or, il faut communiquer au maximum pour suivre ce qui se produit. Comment voulez-vous continuer à travailler sur un fichier qui a déjà été modifié par d'autres personnes sans que vous ne vous en rendiez compte ?

Ce tuto est donc là pour vous apprendre à comprendre les informations que vous envoie le SVN, mais plus encore, à aller y chercher ces informations.
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Comprendre ce que SVN nous dit

Eh oui, il faut d'abord comprendre tous les messages que nous envoie SVN avant d'agir !

Des informations qui viennent à nous



Dans quels cas obtient-on un retour sur information ?

Presque tout le temps, en fait. Vous l'avez déjà remarqué, quand vous faites un Checkout, un Update, un Commit ou un Export : à chaque fois, que ce soit sous UNIX ou sous Windows, SVN vous donne des informations sur l'action en cours. Nous allons maintenant étudier ces informations.

Code : Console
A    Tuto-SdZ/Fichier 1.txt
A    Tuto-SdZ/Dossier 1
A    Tuto-SdZ/Dossier 1/Fichier1.1.txt
A    Tuto-SdZ/Dossier 2
A    Tuto-SdZ/Dossier 2/Fichier2.1.txt
Checked out revision 5.


Checkout information
Voici les informations que l'on trouve lors d'un Checkout sur le repository.


Le message est beaucoup plus compréhensible sur la fenêtre tortoiseSVN, on comprend bien que l'on est à la cinquième révision (version) et que cinq fichiers et dossiers ont été ajoutés.
On comprend donc également qu'en ligne de commande, un 'A' dans la première colonne signifie Added (Ajouté).

Comme dit précédemment, on retrouve ces fenêtres lors d'une action de modification sur le serveur (commit, update, add ou autre). Bien sûr, il y a un code complet (eh oui, on ne fait pas qu'ajouter des éléments ;) ).

Aller chercher ces informations



Pour comprendre tout ce que l'on va pouvoir trouver, on va utiliser la commande status.
Cette commande permet, étrangement, d'obtenir le statut des fichiers et dossiers.

Pour utiliser la commande, vous allez donc taper :
Code : Console
svn status [fichier_ou_dossier_a_statuer]  # vous pouvez utiliser st ou stat à la place de status.

Et là, si vous n'avez rien touché depuis votre dernier update, vous devriez ne trouver... RIEN. :( Déception...

Il faut en fait ajouter quelques options :
-u pour comparer son Working Copy (sa copie locale) avec le repository ;
-v pour afficher tous les éléments (même ceux qui n'ont pas été modifiés).
Il faut comprendre que status vous fait un bilan des modifications qu'ont subi vos éléments, il va seulement vous afficher les éléments qu'il est utile de montrer. Par défaut, il ne va donc pas montrer les éléments qui n'ont pas été modifiés.

Reprenons la commande avec les options -uv :
Code : Console
svn st -uv
                5        2 mvandamme    Fichier 1.txt
                5        1 mvandamme    Dossier 1/Fichier1.1.txt
                5        1 mvandamme    Dossier 1
                5        1 mvandamme    Dossier 2/Fichier2.1.txt
                5        1 mvandamme    Dossier 2
                5        5 mvandamme    .

On obtient ici, grâce au -v (pour verbose), le détail de tous les dossiers et fichiers dans l'arborescence à partir du dossier choisi.
Le premier chiffre que l'on voit est celui de la version globale de l'élément (du dernier update fait sur l'élément), le deuxième est la version de l'élément (combien de fois il a été modifié). "Fichier 1.txt" a donc été modifié deux fois depuis le début, mais il a déjà "traversé" cinq versions (où d'autres fichiers ont été commités).

On voit un grand espace libre avant le premier chiffre, mais qu'est-ce donc ?


Bien comprendre les informations



Cet espace libre est là pour les informations en cas de modification. Allons donc voir la documentation (ça doit devenir un réflexe).
Code : Console
svn --help status

Secret (cliquez pour afficher)
Code : Console
prompt$ svn --help status
status (stat, st): Print the status of working copy files and directories.
usage: status [PATH...]

  With no args, print only locally modified items (no network access).
  With -u, add working revision and server out-of-date information.
  With -v, print full revision information on every item.

  The first six columns in the output are each one character wide:
    First column: Says if item was added, deleted, or otherwise changed
      ' ' no modifications
      'A' Added
      'C' Conflicted
      'D' Deleted
      'I' Ignored
      'M' Modified
      'R' Replaced
      'X' item is unversioned, but is used by an externals definition
      '?' item is not under version control
      '!' item is missing (removed by non-svn command) or incomplete
      '~' versioned item obstructed by some item of a different kind
    Second column: Modifications of a file's or directory's properties
      ' ' no modifications
      'C' Conflicted
      'M' Modified
    Third column: Whether the working copy directory is locked
      ' ' not locked
      'L' locked
    Fourth column: Scheduled commit will contain addition-with-history
      ' ' no history scheduled with commit
      '+' history scheduled with commit
    Fifth column: Whether the item is switched relative to its parent
      ' ' normal
      'S' switched
    Sixth column: Repository lock token
      (without -u)
      ' ' no lock token
      'K' lock token present
      (with -u)
      ' ' not locked in repository, no lock token
      'K' locked in repository, lock toKen present
      'O' locked in repository, lock token in some Other working copy
      'T' locked in repository, lock token present but sTolen
      'B' not locked in repository, lock token present but Broken

  The out-of-date information appears in the eighth column (with -u):
      '*' a newer revision exists on the server
      ' ' the working copy is up to date

  Remaining fields are variable width and delimited by spaces:
    The working revision (with -u or -v)
    The last committed revision and last committed author (with -v)
    The working copy path is always the final field, so it can
      include spaces.

  Example output:
    svn status wc
     M     wc/bar.c
    A  +   wc/qax.c

    svn status -u wc
     M           965    wc/bar.c
           *     965    wc/foo.c
    A  +         965    wc/qax.c
    Status against revision:   981

    svn status --show-updates --verbose wc
     M           965       938 kfogel       wc/bar.c
           *     965       922 sussman      wc/foo.c
    A  +         965       687 joe          wc/qax.c
                 965       687 joe          wc/zig.c
    Status against revision:   981

Valid options:
  -u [--show-updates]      : display update information
  -v [--verbose]           : print extra information
  -N [--non-recursive]     : operate on single directory only
  -q [--quiet]             : print as little as possible
  --no-ignore              : disregard default and svn:ignore property ignores
  --incremental            : give output suitable for concatenation
  --xml                    : output in XML
  --username arg           : specify a username ARG
  --password arg           : specify a password ARG
  --no-auth-cache          : do not cache authentication tokens
  --non-interactive        : do no interactive prompting
  --config-dir arg         : read user configuration files from directory ARG
  --ignore-externals       : ignore externals definitions


Que faut-il comprendre de ce manuel ? Il y a énormément d'informations, je ne vais donc en traiter qu'une partie (rassurez-vous, ce sera déjà amplement suffisant).

Premièrement, on voit la différence entre l'appel sans argument, avec -u et / ou avec -v :
  • sans argument : il ne montre que les éléments modifiés depuis le dernier update ;
  • -u : il compare les éléments avec ceux sur le serveur (connexion avec le serveur nécessaire, SVN n'est pas devin) ;
  • -v : il affiche toutes les informations, même pour les éléments non modifiés.


Ensuite sont présentées les valeurs que peuvent prendre chacune des huit premières colonnes. Nous n'allons nous intéresser qu'à trois d'entre elles : la première, la septième et la huitième.
Commençons par la plus simple : la septième est toujours vide, c'est juste une espace. :p

Continuons un peu plus sérieusement. La première colonne présente les modifications apportées localement aux éléments :
  • ' ' : aucune modification ;
  • A : ajouté ;
  • D : supprimé ;
  • C : en conflit ;
  • I : ignoré ;
  • M : modifié ;
  • R : remplacé ;
  • ? : non-versionné ;
  • ! : manquant.

Je ne présente ni ~ ni X pour le moment, on les verra sûrement plus tard. Normalement vous ne devriez pas tomber dessus. Si ça vous arrive... lisez la doc ! :D


La huitième colonne, quant à elle, présente l'état de l'élément sur le serveur par rapport à notre version (cette colonne n'apparaît que si on active -u) :
  • ' ' : aucune nouvelle version sur le serveur (votre fichier est à jour) ;
  • * : une nouvelle version est disponible sur le serveur.


On comprend donc vite d'après ces définitions qu'obtenir la ligne suivante n'est pas très bon signe :
Code : Console
prompt$ svn st -u
M      *        5   Fichier 1.txt

On est ici dans le cas d'un éventuel futur conflit. Étant donné que l'on a modifié le fichier depuis sa récupération, mais qu'une autre version a été envoyée au serveur, si on envoie notre version, le serveur devra supprimer celle qui a auparavant été commitée, et les modifications apportées par l'autre personne ne seront plus. Ceci ne peut bien sûr pas être un comportement par défaut. Le serveur va refuser votre commit. Il va donc falloir résoudre le problème localement avant de commiter la solution.

Nous n'allons pas apprendre à résoudre ces problèmes dans ce chapitre, mais dans le prochain.

On retrouve la première colonne lors des informations suite à un commit, à un update, à un checkout et à un export. Tout ce que nous venons de voir sur la première colonne est, bien sûr, également valable dans ces autres cas, la convention reste la même.


Et pour Windows...



Eh bien pour Windows, c'est pareil, mais en plus lisible. En effet toutes ces informations sont récupérables via l'interface graphique.
Clic droit >> TortoiseSVN >> Check for Modifications.
On obtient un tableau, sauf que tout est écrit entièrement (et non pas par abréviation), donc beaucoup plus simple.

Check for modificationsFenêtre de status avec TortoiseSVN.

On retrouve ici les champs que l'on pouvait trouver dans les huit colonnes sous UNIX. Comme on peut le voir, tout est écrit. Petit luxe, on a même un résumé du nombre de fichiers dans chaque catégorie ainsi que le numéro des versions maximum et minimum.

Eh, mais comment ça se fait qu'un fichier est à la 6e révision alors que le dossier racine n'est qu'à la 5e ?

Tout simplement parce que, lors du commit, je n'ai pas commité le dossier racine (Tuto SdZ) mais seulement le fichier. SVN a donc modifié les propriétés du fichier (sa version), mais pas celle du reste (du dossier racine, par exemple). Cela fonctionne de la même façon sous UNIX. N'hésitez donc pas à faire régulièrement des update sur la racine.

Enfin, on ne le voit pas bien sur mon exemple, mais il y a un code de couleurs pour les éléments.
  • Bleu : élement modifié localement.
  • Violet : élément ajouté.
  • Rouge foncé : élément manquant.
  • Vert : élément modifié localement et sur le serveur. Ils seront mergés lors d'un update, ou bien génèreront un conflit.
  • Rouge clair : élément modifié localement et supprimé sur le serveur, ou inversement. Il y aura forcément un conflit lors de l'update.
  • Noir : aucun changement, ou fichier non versionné.

Toujours plus d'informations

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
svn help

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.

Je viens de vous présenter l'option -r (pour révision). Cette option s'applique en fait à beaucoup de commandes. Parmi celles que nous avons vues, -r s'applique aussi aux commandes : checkout, export, Code : Console
update
, copy et move.


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 :

TortoiseSVN Repository 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. :waw:
Nous allons donc voir les informations que l'on peut obtenir.
Comme vous devriez en prendre l'habitude, on tape :
Code : Console
svn help info

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 : Autre
1
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).


Il est possible que certaines de ces informations ne soient pas affichées, ou qu'au contraire il y en ait en plus. Tout dépend de l'élément sur lequel vous faites le svn info. Si besoin, consultez la doc ! (Je sais, je me répète, mais c'est pour votre bien. :p )


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
svn help log

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 ! :diable:
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 1e et 12e 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 :

TortoiseSVN Show log


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.
Et voilà : avec ces commandes, rien ne peut plus vous échapper (ou presque) sur le SVN. N'oubliez pas que consulter régulièrement les logs ainsi que les autres informations permet de bien se tenir à jour, mais surtout d'éviter au maximum les conflits.

Prochain chapitre : "Gérer les conflits".
Chapitre précédent Sommaire Chapitre suivant

Partager

8 commentaires pour "Communiquez avec le SVN"
Note moyenne : 3.46 / 4 (26 votes)
Pseudo Commentaire
Hors ligne Dalshim # Posté le 11/11/2008 à 17:48:02
Avatar

Ville : Paris
Pays : France métropolitaine
Études : INSA Lyon

Bon d'accord, j'y penserai, c'est juste que je n'aime pas le blanc sur noir :D !

Promis, je change à la prochaine mise à jour.
 
Hors ligne ced478 # Posté le 15/03/2010 à 01:25:17
Avatar

Ville : St denis le gast
Pays : France métropolitaine

Très bons tuto. Mais et t-il possible de synchronisée un dossier local par la suite

Si votre sujet est résolu, pensez à nous le faire savoir grâce au bouton Image utilisateur en bas de la page, merci.
 
Hors ligne Dalshim # Posté le 15/03/2010 à 23:10:25
Avatar

Ville : Paris
Pays : France métropolitaine
Études : INSA Lyon

C'est à dire ? Avoir un dossier rempli et le synchroniser sur avec ke serveur après coup ? Avec ce que j'ai dis dans le tuto, tu devrais être capable de répondre / tester toi même. Sinon, les forums sont tes amis.
 
Hors ligne piep14 # Posté le 12/06/2010 à 17:22:21

Très bon tuto, j'ai essayé avec ton URL de test et cela fonctionne très bien.
Maintenant, je voudrais faire la même chose avec mon site et j'ai une erreur en retour:
OPTIONS of 'http://www.....com': 200 OK (http://www.....com)

Auriez vous une idée ?
Merci
Hors ligne Dalshim # Posté le 12/06/2010 à 22:13:15
Avatar

Ville : Paris
Pays : France métropolitaine
Études : INSA Lyon

Normal, il faut configurer le serveur apache avec le protocole WebDav si l'on veut utiliser svn à travers http. Pour plus de réponse, adresse toi sur le forum.
Sinon, tu peux plus simplement utiliser le protocole svn:// ou file:// si tu es sur le réseau.
 

Voir tous les commentaires
Ce tutoriel a été corrigé par les zCorrecteurs.