SVNBOOK Chap4 Branching and Merging Basic Merging Mergeinfo and Previews
De Framalang Wiki.
Cette page fait partie du projet Version control with subversion.
| Pseudo | Code | Rôle | Statut |
|---|---|---|---|
| Sub Versif | SVF | Traduction | Terminé |
| Relecture | |||
| Validation |
Sommaire |
Titre
Mergeinfo and Previews
Mergeinfo et aperçus
Paragraphe 1
The basic mechanism Subversion uses to track changesets—that is, which changes have been merged to which branches—is by recording data in properties. Specifically, merge data is tracked in the svn:mergeinfo property attached to files and directories. (If you're not familiar with Subversion properties, now is the time to skim the section called “Properties”.)
Le mécanisme de base que Subversion utilise pour gérer les ensembles de modifications - c'est-à-dire quelles modifications ont été fusionnées dans quelles branches - est l'enregistrement de données dans les propriétés. Plus précisément, les informations de fusion sont conservées dans la propriété svn:mergeinfo qui est associée aux fichiers et aux dossiers (Si les propriétés de Subversion ne vous sont pas familières, c'est le moment de lire le paragraphe appelé "Propriétés").
Paragraphe 2
You can examine the property, just like any other:
Vous pouvez examiner cette propriété comme n'importe quelle autre :
Paragraphe 3
$ cd my-calc-branch $ svn propget svn:mergeinfo . /trunk:341-390
$ cd ma-branche-calc $ svn propget svn:mergeinfo . /trunk:341-390
Paragraphe 4
It is not recommended that you change the value of this property yourself, unless you really know what you're doing. This property is automatically maintained by Subversion whenever you run svn merge. Its value indicates which changes (at a given path) have been replicated into the directory in question. In this case, the path is /trunk and the directory which has received the specific changes is /branches/my-calc-branch.
Il est déconseillé de changer la valeur de cette propriété soi-même, à moins de savoir vraiment ce que vous faites. Cette propriété est gérée automatiquement par Subversion à chaque fois que vous lancez svn merge. Sa valeur indique quelles modifications (pour un chemin donné) ont été recopiées dans le dossier en question. Dans le cas présent, le chemin est /trunk et le dossier qui a reçu les modifications spécifiées est /branches/ma-branche-calc.
Paragraphe 5
There's also a subcommand, svn mergeinfo, which can be helpful in seeing not only which changesets a directory has absorbed, but also which changesets it's still eligible to receive. This gives a sort of preview of the next set of changes that svn merge will replicate to your branch.
Il existe également une sous-commande, svn mergeinfo, qui peut être utile pour voir non seulement quels ensembles de modifications un dossier a absorbé, mais aussi quels ensembles de modifications il est encore susceptible de recevoir. Ceci donne une sorte d'aperçu du prochain ensemble de modifications que svn merge recopiera vers votre branche.
Paragraphe 6
$ cd my-calc-branch # Which changes have already been merged from trunk to branch? $ svn mergeinfo http://svn.example.com/repos/calc/trunk r341 r342 r343 … r388 r389 r390 # Which changes are still eligible to merge from trunk to branch? $ svn mergeinfo http://svn.example.com/repos/calc/trunk --show-revs eligible r391 r392 r393 r394 r395
$ cd ma-branche-calc # Quelles modifications ont déjà été fusionnées du tronc vers la branche ? $ svn mergeinfo http://svn.exemple.com/depot/calc/trunk r341 r342 r343 … r388 r389 r390 # Quelles modifications sont encore susceptibles d'être fusionnées du tronc vers la branche? $ svn mergeinfo http://svn.exemple.com/depot/calc/trunk --show-revs eligible r391 r392 r393 r394 r395
Paragraphe 7
The svn mergeinfo command requires a “source” URL (where the changes would be coming from), and takes an optional “target” URL (where the changes would be merged to). If no target URL is given, it assumes that the current working directory is the target. In the prior example, because we're querying our branch working copy, the command assumes we're interested in receiving changes to /branches/mybranch from the specified trunk URL.
Coquille dans le texte source ? N'est-ce pas /branches/my-calc-branch plutôt que /branches/mybranch ?
La commande mergeinfo prend en paramètres une URL "source" (d'où les modifications viennent), et une URL "cible" optionnelle (vers laquelle les modifications seraient fusionnées). Si aucune URL cible n'est fournie, elle suppose que le dossier actuel est la cible. Dans l'exemple précédent, puisque nous interrogeons la copie de travail de notre branche, la commande suppose que ce qui nous intéresse est de recevoir les modifications de l'URL spécifiée du tronc vers /branches/ma-branche-calc.
Paragraphe 8
Another way to get a more precise preview of a merge operation is to use the --dry-run option:
Une autre manière d'obtenir un aperçu plus précis d'une opération de fusion est d'utiliser l'option --dry-run :
Paragraphe 9
$ svn merge http://svn.example.com/repos/calc/trunk --dry-run U integer.c $ svn status # nothing printed, working copy is still unchanged.
$ svn merge http://svn.exemple.com/depot/calc/trunk --dry-run U entier.c $ svn status # rien ne s'affiche, la copie de travail n'a pas changé.
Paragraphe 10
The --dry-run option doesn't actually apply any local changes to the working copy. It shows only status codes that would be printed in a real merge. It's useful for getting a “high-level” preview of the potential merge, for those times when running svn diff gives too much detail.
L'option --dry-run n'effectue en fait pas de modification locale sur la copie de travail. Elle ne fait qu'indiquer les codes d'état qui seraient affichés par une vraie fusion. Ceci permet d'obtenir un aperçu général d'une fusion potentielle, pour les fois où svn diff renvoie trop de détails.
Paragraphe 11
After performing a merge operation, but before committing the results of the merge, you can use svn diff --depth=empty /path/to/merge/target to see only the changes to the immediate target of your merge. If your merge target was a directory, only property differences will be displayed. This is a handy way to see the changes to the svn:mergeinfo property recorded by the merge operation, which will remind you about what you've just merged.
Après avoir effectué une opération de fusion, mais avant d'en avoir propagé les résultats, vous pouvez utiliser svn diff --depth=empty /chemin/vers/la/cible/de/la/fusion pour visualiser uniquement les modifications apportées à la cible immédiate de votre fusion. Si la cible de la fusion était un dossier, seules les différences de propriétés seraient alors affichées. C'est un moyen très pratique pour voir les modifications de la propriété svn:mergeinfo enregistrées par l'opération de fusion, ce qui vous rappellera ce que vous venez juste de fusionner.
Paragraphe 12
Of course, the best way to preview a merge operation is to just do it! Remember, running svn merge isn't an inherently risky thing (unless you've made local modifications to your working copy—but we've already stressed that you shouldn't be merging into such an environment). If you don't like the results of the merge, simply run svn revert . -R to revert the changes from your working copy and retry the command with different options. The merge isn't final until you actually svn commit the results.
Bien sûr, la meilleure façon d'avoir un aperçu d'une opération de fusion est tout simplement de la réaliser ! Souvenez-vous que lancer svn merge n'est pas une opération risquée en soi (à moins que vous ayez effectué des modifications locales à votre copie de travail - mais nous avons déjà souligné que vous ne devriez pas faire de fusion dans un tel environnement). Si les résultats de la fusion ne vous plaisent pas, lancez juste svn revert . -R pour ôter les modifications de votre copie de travail et réessayez la commande avec des options différentes. La fusion n'est définitive qu'une fois que vous avez propagé les résultats.
Paragraphe 13
While it's perfectly fine to experiment with merges by running svn merge and svn revert over and over, you may run into some annoying (but easily bypassed) roadblocks. For example, if the merge operation adds a new file (i.e., schedules it for addition), svn revert won't actually remove the file; it simply unschedules the addition. You're left with an unversioned file. If you then attempt to run the merge again, you may get conflicts due to the unversioned file “being in the way.” Solution? After performing a revert, be sure to clean up the working copy and remove unversioned files and directories. The output of svn status should be as clean as possible, ideally showing no output.
Bien qu'il soit parfaitement légitime de lancer svn merge et svn revert à plusieurs reprises pour préparer la fusion, vous risquez de rencontrer quelques obstacles (facilement surmontables). Par exemple, si l'opération de fusion ajoute un nouveau fichier (ou plus exactement programme son ajout), svn revert ne supprimera pas le fichier ; il va juste déprogrammer l'ajout. Vous vous retrouvez avec un fichier non-versionné. Si ensuite vous tentez à nouveau de lancer la fusion, il risque d'y avoir des conflits dus au fichier non-versionné resté "en travers du chemin". Solution ? Après avoir effectué un revert, pensez à nettoyez la copie de travail et supprimer les fichiers et dossiers non-versionnés. Il faut que le résultat de svn status soit le plus propre possible, et dans l'idéal vide.

