SVNBOOK Chap2 Basic Work Cycle Examine Your Changes

De Framalang Wiki.

Cette page fait partie du projet Version control with subversion.

Pseudo Code Rôle Statut
Hotshot92 Traduction terminé
SVF 1ère Relecture Fait
SVF Passage en version 1.5 Fait
Validation


Sommaire

Titre

Examine Your Changes

Examiner les changements apportés

Paragraphe 1

Once you've finished making changes, you need to commit them to the repository, but before you do so, it's usually a good idea to take a look at exactly what you've changed. By examining your changes before you commit, you can make a more accurate log message. You may also discover that you've inadvertently changed a file, and this gives you a chance to revert those changes before committing. Additionally, this is a good opportunity to review and scrutinize changes before publishing them. You can see an overview of the changes you've made by using svn status, and dig into the details of those changes by using svn diff.
Une fois vos modifications apportées, vous devez les intégrer au dépôt. Avant de le faire, il est souvent utile de jeter un coup d'oeil sur ces modifications pour savoir exactement ce que vous avez changé. En examinant les modifications avant de les intégrer au dépôt, le commentaire associé à la livraison sera souvent plus pertinent. Éventuellement, vous verrez que vous avez changé par inadvertance un fichier et cela vous donne une chance de revenir sur ces modifications avant de les livrer au dépôt. En outre, c'est une bonne occasion de passer en revue et d'examiner les modifications avant de les publier. Vous pouvez voir une vue globale des modifications que vous avez faites en utilisant svn status, et vous pouvez creuser les détails de ces changements en utilisant svn diff.

Paragraphe 2

Look Ma! No Network!
You can use the commands svn status, svn diff, and svn revert can be used without any network access even if your repository is across the network. This makes it easy to manage your changes-in-progress when you are somewhere without a network connection, such as traveling on an airplane, riding a commuter train, or hacking on the beach. [5]
Regardez ça : Pas besoin de réseau !
Vous pouvez utiliser les commandes svn status, svn diff, et svn revert sans aucun accès réseau même si votre dépôt est distant. C'est ainsi plus facile de gérer vos changements lorsque vous êtes isolé, dans un avion, dans un train de banlieue ou même sur la plage [5].
Subversion does this by keeping private caches of pristine versions of each versioned file inside the .svn administrative areas. This allows Subversion to report—and revert—local modifications to those files without network access. This cache (called the “text-base”) also allows Subversion to send the user's local modifications during a commit to the server as a compressed delta (or “difference”) against the pristine version. Having this cache is a tremendous benefit—even if you have a fast Internet connection, it's much faster to send only a file's changes rather than the whole file to the server.
En effet, Subversion garde en cache des copies privées des versions originales de chaque fichier versionné dans la zone administrative .svn. Cela lui permet d'afficher (et éventuellement d'annuler) les modifications faites localement à ces fichiers. Ce cache (appelé la "base texte") permet également à Subversion d'envoyer uniquement les modifications (compressées) faites par l'utilisateur au dépôt lors d'une livraison. Disposer d'un tel cache est un énorme avantage, même dans le cas d'une connexion Internet haut débit, car il est beaucoup plus rapide d'envoyer des différences sur un fichier plutôt que l'ensemble du fichier au serveur.

Paragraphe 3

Subversion has been optimized to help you with this task, and it is able to do many things without communicating with the repository. In particular, your working copy contains a hidden cached “pristine” copy of each version-controlled file within the .svn area. Because of this, Subversion can quickly show you how your working files have changed or even allow you to undo your changes without contacting the repository.

Subversion a été optimisé pour vous aider dans cette tâche, et il est capable de faire beaucoup de choses sans communiquer avec le dépôt. En particulier, votre copie de travail contient une copie de l'original de chaque fichier versionné dans le répertoire .svn. C'est pour ça que Subversion peut vous montrer rapidement en quoi vos fichiers ont changé ou même vous permettre d'annuler vos changements sans contacter le dépôt.

Paragraphe 4

See an overview of your changes
Avoir une vue globale des changements effectués
To get an overview of your changes, you'll use the svn status command. You'll probably use svn status more than any other Subversion command.

Pour avoir une vue globale des changements que vous avez effectués, utilisez la commande svn status. C'est certainement la commande que vous utiliserez le plus.

Paragraphe 5

CVS Users: Hold That Update!
Utilisateurs de CVS : Notez cette différence
You're probably used to using cvs update to see what changes you've made to your working copy. svn status will give you all the information you need regarding what has changed in your working copy—without accessing the repository or potentially incorporating new changes published by other users.
Vous avez certainement l'habitude d'utiliser cvs update pour visualiser les changements que vous avez effectués sur votre copie de travail. svn status vous donnera toutes les informations utiles à ce propos, sans accès au dépôt et sans incorporer les changements effectués par d'autres utilisateurs.
In Subversion, svn update does just that—it updates your working copy with any changes committed to the repository since the last time you updated your working copy. You may have to break the habit of using the update command to see what local modifications you've made.
Dans Subversion, svn update ne s'occupe que de la mise à jour : il met à jour votre copie de travail avec tous les changements propagés dans le dépôt depuis votre dernière mise à jour. Il faudra vous débarrasser de l'habitude d'utiliser la commande update pour visualiser les modifications que vous avez effectuées sur votre copie de travail locale.

Paragraphe 6

If you run svn status at the top of your working copy with no arguments, it will detect all file and tree changes you've made. Here are a few examples of the most common status codes that svn status can return. (Note that the text following # is not actually printed by svn status.)

?       scratch.c           # file is not under version control
A       stuff/loot/bloo.h   # file is scheduled for addition
C       stuff/loot/lump.c   # file has textual conflicts from an update
D       stuff/fish.c        # file is scheduled for deletion
M       bar.c               # the content in bar.c has local modifications

Si vous lancez svn status sans argument à la racine de votre copie de travail, Subversion va détecter toutes les modifications effectuées sur les fichiers et sur l'arborescence. Voici quelques exemples de codes que la commande svn status affiche. (Notez que le texte après # n'est pas affiché par svn status).

?       gribouillage.c         # le fichier n'est pas versionné
A       boulot/pognon/machin.h # le fichier sera Ajouté
C       boulot/pognon/tas.c    # le fichier entre en Conflit avec une mise à jour
D       boulot/poisson.c       # le fichier sera supprimé (Deletion en anglais)
M       truc.c                 # le contenu de truc.c a subi des Modifications
In this output format, svn status prints six columns of characters, followed by several whitespace characters, followed by a file or directory name. The first column tells the status of a file or directory and/or its contents. The codes we listed are:
Dans ce format de sortie, svn status affiche six colonnes de caractères, suivis par plusieurs espaces, suivis par un nom de fichier ou de répertoire. La première colonne indique le statut du fichier ou du répertoire et/ou son contenu. Les codes sont :
  • A item
The file, directory, or symbolic link item has been scheduled for addition into the repository.
  • A élément
Le fichier, répertoire ou lien symbolique "élément" est marqué pour ajout au dépôt.
  • C item
The file item is in a state of conflict. That is, changes received from the server during an update overlap with local changes that you have in your working copy (and weren't resolved during the update). You must resolve this conflict before committing your changes to the repository.
  • C élément
Le fichier "élément" est dans un état de conflit. C'est-à-dire que des modifications ont eu lieu sur le dépôt depuis votre dernière mise à jour et ces modifications interfèrent avec les modifications que vous avez effectuées sur votre copie de travail (et svn update n'a pas résolu ce conflit). Vous devez résoudre ce conflit avant de propager vos changements vers le dépôt.
  • D item
The file, directory, or symbolic link item has been scheduled for deletion from the repository.
  • D élément
Le fichier, répertoire ou lien symbolique "élément" est marqué pour suppression (Deletion en anglais).
  • M item
The contents of the file item have been modified.
  • M élément
Le contenu du fichier "élément" a été modifié.

Paragraphe 7

If you pass a specific path to svn status, you get information about that item alone:

$ svn status stuff/fish.c
D      stuff/fish.c

Si vous spécifiez un chemin à svn status, vous obtenez les informations relatives à ce chemin uniquement :

$ svn status boulot/poisson.c
D      boulot/poisson.c

Paragraphe 8

svn status also has a --verbose (-v) option, which will show you the status of every item in your working copy, even if it has not been changed:

$ svn status -v
M               44        23    sally     README
                44        30    sally     INSTALL
M               44        20    harry     bar.c
                44        18    ira       stuff
                44        35    harry     stuff/trout.c
D               44        19    ira       stuff/fish.c
                44        21    sally     stuff/things
A                0         ?     ?        stuff/things/bloo.h
                44        36    harry     stuff/things/gloo.c

svn status possède aussi une option --verbose (-v) pour le rendre plus verbeux : il affichera alors le statut de tous les éléments de votre copie de travail, même ceux qui n'ont pas subi de modification :

$ svn status -v
M               44        23    sally     LISEZMOI
                44        30    sally     INSTALL
M               44        20    harry     truc.c
                44        18    ira       boulot
                44        35    harry     boulot/truite.c
D               44        19    ira       boulot/poisson.c
                44        21    sally     boulot/divers
A                0         ?     ?        boulot/divers/machin.h
                44        36    harry     boulot/divers/bidule.c
This is the “long form” output of svn status. The letters in the first column mean the same as before, but the second column shows the working revision of the item. The third and fourth columns show the revision in which the item last changed, and who changed it.
C'est la "version longue" de l'affichage de svn status. Les lettres de la première colonne ont la même signification que précédemment, mais la deuxième colonne indique le numéro de révision de travail de l'élément. Les troisième et quatrième colonne indiquent le numéro de révision dans laquelle a eu lieu le changement le plus récent, et qui a effectué cette modification.

Paragraphe 9

None of the prior invocations to svn status contact the repository—instead, they compare the metadata in the .svn directory with the working copy. Finally, there is the --show-updates (-u) option, which contacts the repository and adds information about things that are out of date:

$ svn status -u -v
M      *        44        23    sally     README
M               44        20    harry     bar.c
       *        44        35    harry     stuff/trout.c
D               44        19    ira       stuff/fish.c
A                0         ?     ?        stuff/things/bloo.h
Status against revision:   46

Aucune des commandes citées ci-dessus n'induit de connexion vers le dépôt : elles comparent les métadonnées dans le répertoire .svn avec la copie de travail. Enfin, il y a l'option --show-updates (-u) qui effectue une connexion au dépôt et ajoute les informations sur les éléments périmés :

$ svn status -u -v
M      *        44        23    sally     LISEZMOI
M               44        20    harry     truc.c
       *        44        35    harry     boulot/truite.c
D               44        19    ira       boulot/poisson.c
A                0         ?     ?        boulot/divers/machin.h
État par rapport à la révision   46
Notice the two asterisks: if you were to run svn update at this point, you would receive changes to README and trout.c. This tells you some very useful information—you'll need to update and get the server changes on README before you commit, or the repository will reject your commit for being out of date (more on this subject later).

Notez les deux astérisques : si vous lanciez la commande svn update, vous recevriez les changements relatifs à LISEZMOI et truite.c. Cela vous procure des informations particulièrement intéressantes : vous devez faire une mise-à-jour et récupérer les changements effectués sur LISEZMOI avant de propager les vôtres, ou le dépôt rejettera votre propagation en la considérant comme périmée (le sujet sera approfondi plus tard).

svn status can display much more information about the files and directories in your working copy than we've shown here—for an exhaustive description of svn status and its output, see svn status.
svn status peut afficher beaucoup plus d'informations sur les fichiers et répertoires de votre copie de travail que ce que nous venons de voir ici. Pour obtenir une description exhaustive de svn status et de ses sorties, reportez-vous à svn status.

Paragraphe 10

Examine the details of your local modifications

Voir en détail les modifications que vous avez effectuées

Another way to examine your changes is with the svn diff command. You can find out exactly how you've modified things by running svn diff with no arguments, which prints out file changes in unified diff format:

La commande svn diff offre une autre façon d'examiner vos changements. Vous pouvez retrouver exactement ce que vous avez modifié en lançant la commande svn diff sans argument : elle affiche les changements au format "diff unifié".
$ svn diff
Index: bar.c
===================================================================
--- bar.c	(revision 3)
+++ bar.c	(working copy)
@@ -1,7 +1,12 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <stdio.h>
 int main(void) {
-  printf("Sixty-four slices of American Cheese...\n");
+  printf("Sixty-five slices of American Cheese...\n");
 return 0;
 }
Index: README
===================================================================
--- README	(revision 3)
+++ README	(working copy)
@@ -193,3 +193,4 @@
+Note to self:  pick up laundry.
Index: stuff/fish.c
===================================================================
--- stuff/fish.c	(revision 1)
+++ stuff/fish.c	(working copy)
-Welcome to the file known as 'fish'.
-Information on fish will be here soon.
Index: stuff/things/bloo.h
===================================================================
--- stuff/things/bloo.h	(revision 8)
+++ stuff/things/bloo.h	(working copy)
+Here is a new file to describe
+things about bloo.
$ svn diff
Index: truc.c
===================================================================
--- truc.c	(revision 3)
+++ truc.c	(working copy)
@@ -1,7 +1,12 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <stdio.h>
 int main(void) {
-  printf("Soixante quatre tranches de fromage...\n");
+  printf("Soixante cinq tranches de fromage...\n");
 return 0;
 }
Index: LISEZMOI
===================================================================
--- LISEZMOI	(revision 3)
+++ LISEZMOI	(working copy)
@@ -193,3 +193,4 @@
+Pense-bête : passer au pressing.
Index: boulot/poisson.c
===================================================================
--- boulot/poisson.c	(revision 1)
+++ boulot/poisson.c	(working copy)
-Bienvenue dans le fichier 'poisson'.
-Plus d'informations seront disponibles prochainement.
Index: boulot/divers/machin.h
==================================================================
--- boulot/divers/machin.h	(revision 8)
+++ boulot/divers/machin.h	(working copy)
+Voici un nouveau fichier pour 
+écrire sur les machins.

Paragraphe 11

The svn diff command produces this output by comparing your working files against the cached “pristine” copies within the .svn area. Files scheduled for addition are displayed as all added text, and files scheduled for deletion are displayed as all deleted text.
La commande svn diff produit ces lignes en comparant vos fichiers de travail aux copies originales en cache dans la zone .svn. Les fichiers marqués pour ajout sont affichés comme tout autre texte ajouté, et les fichiers marqués pour suppression sont affichés comme tout texte supprimé.

Output is displayed in unified diff format. That is, removed lines are prefaced with -, and added lines are prefaced with +. svn diff also prints filename and offset information useful to the patch program, so you can generate “patches” by redirecting the diff output to a file:

$ svn diff > patchfile

Le format d'affichage est conforme au "diff unifié". C'est-à-dire que les lignes supprimées commencent par le signe '-', et les lignes ajoutées commencent par le signe '+'. svn diff affiche également le nom du fichier et la localisation dans le fichier à l'intention du programme "patch". Vous pouvez ainsi créer des "patches" en redirigeant la sortie de svn diff vers un fichier :

$ svn diff > fichierpatch 

You could, for example, email the patch file to another developer for review or testing prior to a commit.

Vous pourriez, par exemple, envoyer par mail le fichier patch à un autre développeur pour relecture ou test avant de le propager vers le dépôt.

Paragraphe 12

Subversion uses its internal diff engine, which produces unified diff format, by default. If you want diff output in a different format, specify an external diff program using --diff-cmd and pass any flags you'd like to it using the --extensions (-x) option. For example, to see local differences in file foo.c in context output format while ignoring case differences, you might run svn diff --diff-cmd /usr/bin/diff --extensions '-i' foo.c.

Subversion utilise son propre moteur de diff, qui produit par défaut des sorties au format "diff unifié". Si vous désirez obtenir les différences dans un autre format, spécifiez un programme de comparaison externe en utilisant l'option --diff-cmd et en fournissant les paramètres que vous voulez à l'aide de l'option --extensions (-x). Par exemple, pour visualiser les différences entre votre version locale et l'original du fichier truc.c au format "contexte" et en ignorant la casse des caractères, vous pouvez lancer la commande svn diff --diff-cmd /usr/bin/diff --extensions '-i' truc.c.