SVNBOOK Chap3 Revision specifiers

De Framalang Wiki.

Cette section fait partie du livre Version control with subversion

Pseudo Code Rôle Statut
Hotshot92 Traduction Fait
SVF 1ère Relecture Fait
Validation

Sommaire

Revision Specifiers

Revision Specifiers

Identifiants de révision

As you saw in the section called “Revisions”, revision numbers in Subversion are pretty straightforward—integers that keep getting larger as you commit more changes to your versioned data. Still, it doesn't take long before you can no longer remember exactly what happened in each and every revision. Fortunately, the typical Subversion workflow doesn't often demand that you supply arbitrary revisions to the Subversion operations you perform. For operations that do require a revision specifier, you generally supply a revision number that you saw in a commit email, in the output of some other Subversion operation, or in some other context that would give meaning to that particular number.

But occasionally, you need to pinpoint a moment in time for which you don't already have a revision number memorized or handy. So besides the integer revision numbers, svn allows as input some additional forms of revision specifiers—revision keywords, and revision dates.

Comme vous avez pu le constater dans la section "Révisions", les numéros de révision dans Subversion sont d'une grande simplicité, formant une suite d'entiers incrémentés au fur et à mesure des changements propagés dans le dépôt. Néanmoins, il ne faudra pas longtemps avant que vous ne puissiez plus vous rappeler exactement quel changement correspond à quelle révision. Heureusement, le fonctionnement normal de Subversion ne requiert pas souvent que vous fournissiez explicitement un numéro de révision pour une opération. Pour les opérations qui nécessitent explicitement un numéro de révision, vous pouvez fournir un numéro de révision que vous avez vu soit dans un mail de propagation, soit dans la sortie d'une autre opération Subversion, soit dans un autre contexte qui donnait du sens à ce numéro particulier.

Occasionnellement, vous aurez besoin d'identifier un moment précis pour lequel vous n'avez pas de numéro de révision en tête ou sous la main. C'est pourquoi, en plus des numéros de révision, svn accepte également en entrée d'autres formats d'appellations pour les révisions : les "mots-clés de révision" et les "dates de révision".

NOTE

The various forms of Subversion revision specifiers can be mixed and matched when used to specify revision ranges. For example, you can use -r REV1:REV2 where REV1 is a revision keyword and REV2 is a revision number, or where REV1 is a date and REV2 is a revision keyword, and so on. The individual revision specifiers are independently evaluated, so you can put whatever you want on the opposite sides of that colon.
Les différentes formes d'appellations pour les révisions peuvent être mélangées et comparées pour définir des intervalles de révisions. Par exemple, vous pouvez spécifier -r REV1:REV2 où REV1 est un mot-clé de révision et REV2 est un numéro de révision. Comme chaque appellation de révision est évaluée indépendamment, vous pouvez placer n'importe quel type d'appellation de chaque côté du symbole deux-points.

Revision Keywords

Revision Keywords

Mots-clés de révision

The Subversion client understands a number of revision keywords. These keywords can be used instead of integer arguments to the --revision (-r) switch, and are resolved into specific revision numbers by Subversion:
Le client Subversion accepte toute une variété de mots-clés de révision. En tant qu'argument de l'option --revision (-r), ces mots-clés peuvent être utilisés en lieu et place des numéros et sont remplacés par les numéros correspondants par Subversion :
HEAD 
The latest (or “youngest”) revision in the repository.
HEAD 
La dernière (ou plus récente) révision présente dans le dépôt.
BASE 
The revision number of an item in a working copy. If the item has been locally modified, the “BASE version” refers to the way the item appears without those local modifications.
BASE 
Le numéro de révision d'un élément de la copie de travail. Si l'élément a été modifié localement, la "version BASE" fait référence à l'élément tel qu'il était sans ces modifications locales.
COMMITTED 
The most recent revision prior to, or equal to, BASE, in which an item changed.
COMMITTED 
La révision la plus récente avant (ou égale à) BASE, dans laquelle un élément a changé.
PREV 
The revision immediately before the last revision in which an item changed. Technically, this boils down to COMMITTED-1.
PREV 
La révision précédant immédiatement la dernière révision dans laquelle un élément a changé. Techniquement, cela revient à COMMITTED-1.

As can be derived from their descriptions, the PREV, BASE, and COMMITTED revision keywords are used only when referring to a working copy path—they don't apply to repository URLs. HEAD, on the other hand, can be used in conjunction with both of these path types.

Here are some examples of revision keywords in action:

  $ svn diff -r PREV:COMMITTED foo.c
  # shows the last change committed to foo.c
  
  $ svn log -r HEAD
  # shows log message for the latest repository commit
  
  $ svn diff -r HEAD
  # compares your working copy (with all of its local changes) to the
  # latest version of that tree in the repository
  
  $ svn diff -r BASE:HEAD foo.c
  # compares the unmodified version of foo.c with the latest version of
  # foo.c in the repository
  
  $ svn log -r BASE:HEAD
  # shows all commit logs for the current versioned directory since you
  # last updated
  
  $ svn update -r PREV foo.c
  # rewinds the last change on foo.c, decreasing foo.c's working revision
  
  $ svn diff -r BASE:14 foo.c
  # compares the unmodified version of foo.c with the way foo.c looked
  # in revision 14

Comme on peut le deviner d'après leur description, les mots-clés de révision PREV, BASE et COMMITTED ne sont utilisés que pour faire référence à un chemin dans la copie de travail ; ils ne s'appliquent pas à des URL du dépôt. En revanche, HEAD peut être utilisé avec les deux types de chemin (local ou URL du dépôt).

Vous trouverez ci-dessous des exemples de l'utilisation de ces mots-clés :

  $ svn diff -r PREV:COMMITTED machin.c
  # affiche le dernier changement propagé concernant machin.c 
  
  $ svn log -r HEAD
  # affiche le message associé à la dernière propagation dans le dépôt.
  
  $ svn diff -r HEAD
  # compare votre copie de travail (avec tous ses changements locaux) 
  # à la dernière version de l'arborescence correspondante du dépôt. 
  
  $ svn diff -r BASE:HEAD machin.c
  # compare la version non modifiée localement de machin.c avec la dernière 
  # version de machin.c dans le dépôt.
  
  $ svn log -r BASE:HEAD
  # affiche, pour le répertoire versionné courant, les messages de propagation depuis 
  # la dernière mise à jour (svn update)
  
  $ svn update -r PREV machin.c
  # revient une version en arrière pour le fichier machin.c 
  # Ceci diminue de un la révision de la version de travail du fichier machin.c
  
  $ svn diff -r BASE:14 machin.c
  # compare la version non modifiée localement de machin.c avec 
  # la version de ce fichier à la révision 14 

Revision Dates

Revision Dates

Dates de révision

Revision numbers reveal nothing about the world outside the version control system, but sometimes you need to correlate a moment in real time with a moment in version history. To facilitate this, the --revision (-r) option can also accept as input date specifiers wrapped in curly braces ({ and }). Subversion accepts the standard ISO-8601 date and time formats, plus a few others. Here are some examples. (Remember to use quotes around any date that contains spaces.)

  $ svn checkout -r {2006-02-17}
  $ svn checkout -r {15:30}
  $ svn checkout -r {15:30:00.200000}
  $ svn checkout -r {"2006-02-17 15:30"}
  $ svn checkout -r {"2006-02-17 15:30 +0230"}
  $ svn checkout -r {2006-02-17T15:30}
  $ svn checkout -r {2006-02-17T15:30Z}
  $ svn checkout -r {2006-02-17T15:30-04:00}
  $ svn checkout -r {20060217T1530}
  $ svn checkout -r {20060217T1530Z}
  $ svn checkout -r {20060217T1530-0500}
  …

When you specify a date, Subversion resolves that date to the most recent revision of the repository as of that date, and then continues to operate against that resolved revision number:

  $ svn log -r {2006-11-28}
  ------------------------------------------------------------------------
  r12 | ira | 2006-11-27 12:31:51 -0600 (Mon, 27 Nov 2006) | 6 lines
  …

Les numéros de révision n'ont aucune signification en dehors du système de gestion de versions. Cependant, parfois, vous aurez besoin d'associer une date réelle à un moment précis de l'historique des versions. Pour ça, l'option --revision (-r) accepte comme argument une date placée entre accolades ({ et }). Subversion accepte les dates et les heures aux formats définis dans le standard ISO-8601, et quelques autres formats. Voici quelques exemples (n'oubliez pas de mettre les dates qui contiennent des espaces entre guillemets) :

  $ svn checkout -r {2006-02-17}
  $ svn checkout -r {15:30}
  $ svn checkout -r {15:30:00.200000}
  $ svn checkout -r {"2006-02-17 15:30"}
  $ svn checkout -r {"2006-02-17 15:30 +0230"}
  $ svn checkout -r {2006-02-17T15:30}
  $ svn checkout -r {2006-02-17T15:30Z}
  $ svn checkout -r {2006-02-17T15:30-04:00}
  $ svn checkout -r {20060217T1530}
  $ svn checkout -r {20060217T1530Z}
  $ svn checkout -r {20060217T1530-0500}
  …

Quand vous spécifiez une date, Subversion convertit cette date vers le numéro de révision le plus récent du dépôt à la date spécifiée. Puis, il continue son travail avec ce numéro de révision :

  $ svn log -r {2006-11-28}
  ------------------------------------------------------------------------
  r12 | ira | 2006-11-27 12:31:51 -0600 (Mon, 27 Nov 2006) | 6 lines
  …

NOTE : Is Subversion a Day Early?

Is Subversion a Day Early?
Subversion retarde-t-il d'une journée ?
--Sub Versif 11 mars 2009 à 12:52 (CET): Un léger doute, c'est avance ou retarde le bon terme ?
--Hotshot92 11 mars 2009 à 17:20 (CET):Je pense que c'est retarde. En effet, si on lui demande la révision du 27 novembre, il donne celle du 26. NB : il reste à mettre les affichages et entrées en français.
If you specify a single date as a revision without specifying a time of day (for example 2006-11-27), you may think that Subversion should give you the last revision that took place on the 27th of November. Instead, you'll get back a revision from the 26th, or even earlier. Remember that Subversion will find the most recent revision of the repository as of the date you give. If you give a date without a timestamp, like 2006-11-27, Subversion assumes a time of 00:00:00, so looking for the most recent revision won't return anything on the day of the 27th.
If you want to include the 27th in your search, you can either specify the 27th with the time ({"2006-11-27 23:59"}), or just specify the next day ({2006-11-28}).
Si vous spécifiez une date de révision sans préciser l'heure (par exemple 2006-11-27), vous pourriez penser que Subversion vous donnera la dernière révision qui a eu lieu le 27 novembre. En fait, vous aurez une révision datant du 26, voire même avant. Souvenez-vous que Subversion renvoie la révision la plus récente du dépôt à la date spécifiée. Si vous spécifiez une date sans préciser l'heure, comme 2006-11-27, Subversion utilise alors 00h00 comme heure, et la recherche de la plus récente révision ne renverra donc pas de résultat correspondant au 27 novembre.
Si vous voulez inclure le 27 dans votre recherche, vous pouvez soit spécifier une heure ({"2006-11-27 23:59"}), soit simplement spécifier le jour suivant ({2006-11-28}).

You can also use a range of dates. Subversion will find all revisions between both dates, inclusive:

  $ svn log -r {2006-11-20}:{2006-11-29}
  …

Vous pouvez également utiliser des intervalles de dates. Subversion trouvera alors les révisions incluses entre ces deux dates :

  $ svn log -r {2006-11-20}:{2006-11-29}
  …

WARNING

Since the timestamp of a revision is stored as an unversioned, modifiable property of the revision (see the section called “Properties”, revision timestamps can be changed to represent complete falsifications of true chronology, or even removed altogether. Subversion's ability to correctly convert revision dates into real revision numbers depends on revision datestamps maintaining a sequential ordering—the younger the revision, the younger its timestamp. If this ordering isn't maintained, you will likely find that trying to use dates to specify revision ranges in your repository doesn't always return the data you might have expected.
Puisque l'horodatage d'une révision est stocké comme une propriété modifiable et non versionnée de la révision (reportez-vous à la section "Propriétés"), les horodatages peuvent être changés et ne pas refléter la chronologie réelle. Ils peuvent même être tous supprimés. Or la capacité de Subversion à convertir correctement les dates en numéros de révision dépend des horodatages de révisions et de leur ordonnancement correct dans le temps : à une révision antérieure correspond un horodatage antérieur. Si cet ordonnancement n'est pas maintenu, il y a de grandes chances que l'utilisation des dates pour spécifier des intervalles de révisions dans votre dépôt ne fournisse pas les résultats attendus.