hgbook

changeset 953:e77ede0fdef8

Two third of tour-merge.tex done
author Romain PELISSE <belaran@gmail.com>
date Wed Feb 18 18:02:29 2009 +0100 (2009-02-18)
parents f2cd9743c473
children 2cd5d582c956 61f7bf2e562d
files fr/tour-merge.tex
line diff
     1.1 --- a/fr/tour-merge.tex	Tue Feb 17 23:10:44 2009 +0100
     1.2 +++ b/fr/tour-merge.tex	Wed Feb 18 18:02:29 2009 +0100
     1.3 @@ -1,98 +1,111 @@
     1.4 -\chapter{A tour of Mercurial: merging work}
     1.5 +\chapter{Un rapide tour de Mercurial: fusionner les travaux}
     1.6  \label{chap:tour-merge}
     1.7  
     1.8 -We've now covered cloning a repository, making changes in a
     1.9 -repository, and pulling or pushing changes from one repository into
    1.10 -another.  Our next step is \emph{merging} changes from separate
    1.11 -repositories.
    1.12 -
    1.13 -\section{Merging streams of work}
    1.14 -
    1.15 -Merging is a fundamental part of working with a distributed revision
    1.16 -control tool.
    1.17 +Nous avons maintenons étudié comment clôner un dépôt, effectuer
    1.18 +des changements dedans, et récupérer ou transférer depuis un 
    1.19 +autre dépôt. La prochaine étape est donc de \emph{fusionner} les
    1.20 +modifications de différents dépôts.
    1.21 +
    1.22 +\section{Fusionner différents travaux} %%%TODO: better translation
    1.23 +				       %%% for 'Merging streams of work' ?
    1.24 +La fusion\footnote{NdT: Je garde fusion mais le jargon professionnel 
    1.25 +employera généralement le terme \textit{merge}.} est un aspect 
    1.26 +fondamental lorsqu'on travail avec un gestionnaire de source 
    1.27 +distribé.
    1.28  \begin{itemize}
    1.29 -\item Alice and Bob each have a personal copy of a repository for a
    1.30 -  project they're collaborating on.  Alice fixes a bug in her
    1.31 -  repository; Bob adds a new feature in his.  They want the shared
    1.32 -  repository to contain both the bug fix and the new feature.
    1.33 -\item I frequently work on several different tasks for a single
    1.34 -  project at once, each safely isolated in its own repository.
    1.35 -  Working this way means that I often need to merge one piece of my
    1.36 -  own work with another.
    1.37 +\item Alice et Bob ont chacun une copie personnelle du dépôt d'un
    1.38 +  projet sur lequel ils collaborent. Alice corrige un \textit{bug} 
    1.39 +  dans son dépôt, et Bob ajoute une nouvelle fonctionnalité dans le
    1.40 +  sien. Ils veulent un dépôt partagé avec à la fois le correctif du
    1.41 +  \textit{bug} et la nouvelle fonctionnalité.
    1.42 +\item Je travaille régulièrement sur plusieurs tâches différentes sur
    1.43 +  un seul projet en même temps, chacun isolée dans son propre dépôt.
    1.44 +  Travailler ainsi signifie que je dois régulièrement fusionner une 
    1.45 +  partie de mon code avec celui des autres.
    1.46  \end{itemize}
    1.47  
    1.48 -Because merging is such a common thing to need to do, Mercurial makes
    1.49 -it easy.  Let's walk through the process.  We'll begin by cloning yet
    1.50 -another repository (see how often they spring up?) and making a change
    1.51 -in it.
    1.52 +Parce que la fusion est une opération si commune que je dois réaliser,
    1.53 +Mercurial la rend facile. Etudions ensemble le déroulement des opérations.
    1.54 +Nous commencerons par faire un clone d'encore un autre dépôt (vous voyez
    1.55 +comment on fait ça tout le temps ?) puis nous ferons quelques modifications
    1.56 +dessus.
    1.57  \interaction{tour.merge.clone}
    1.58 -We should now have two copies of \filename{hello.c} with different
    1.59 -contents.  The histories of the two repositories have also diverged,
    1.60 -as illustrated in figure~\ref{fig:tour-merge:sep-repos}.
    1.61 +Nous devrions avoir maintenant deux copies de \filename{hello.c} avec 
    1.62 +des contenus différents. Les historiques de ces deux dépôts ont aussi 
    1.63 +divergés, comme illustré dans la figure~\ref{fig:tour-merge:sep-repos}.
    1.64 +
    1.65  \interaction{tour.merge.cat}
    1.66  
    1.67  \begin{figure}[ht]
    1.68    \centering
    1.69    \grafix{tour-merge-sep-repos}
    1.70 -  \caption{Divergent recent histories of the \dirname{my-hello} and
    1.71 -    \dirname{my-new-hello} repositories}
    1.72 +  \caption{Historiques récent divergents des dépôts \dirname{my-hello} 
    1.73 +  et \dirname{my-new-hello}}
    1.74    \label{fig:tour-merge:sep-repos}
    1.75  \end{figure}
    1.76  
    1.77 -We already know that pulling changes from our \dirname{my-hello}
    1.78 -repository will have no effect on the working directory.
    1.79 +Nous savons déjà que récupérer les modifications depuis notre dépôt 
    1.80 +\dirname{my-hello} n'aura aucun effet sur l'espace de travail.
    1.81 +
    1.82  \interaction{tour.merge.pull}
    1.83 -However, the \hgcmd{pull} command says something about ``heads''.  
    1.84 -
    1.85 -\subsection{Head changesets}
    1.86 -
    1.87 -A head is a change that has no descendants, or children, as they're
    1.88 -also known.  The tip revision is thus a head, because the newest
    1.89 -revision in a repository doesn't have any children, but a repository
    1.90 -can contain more than one head.
    1.91 +
    1.92 +Néanmoins, la commande \hgcmd{pull} nous indique quelquechose au 
    1.93 +sujet des ``heads''.
    1.94 +
    1.95 +\subsection{\textit{Head changesets}} %%%TODO: Hard (too?) to translate
    1.96 +
    1.97 +Une \textit{head}\footnote{NdT: Je garde \textit{head} que j'accorde 
    1.98 +au féminin comme la coutume oral l'a imposée.} est un \textit{changeset} 
    1.99 +sans descendants, ou enfants, comme on les désigne parfois. La révision 
   1.100 +\textit{tip} est une \textit{head}, car la dernière révision dans un dépôt 
   1.101 +n'a aucun enfant, mais il est important de noter qu'un dépôt peut contenir 
   1.102 +plus d'une \textit{head}.
   1.103  
   1.104  \begin{figure}[ht]
   1.105    \centering
   1.106    \grafix{tour-merge-pull}
   1.107 -  \caption{Repository contents after pulling from \dirname{my-hello} into
   1.108 -    \dirname{my-new-hello}}
   1.109 +  \caption{Contenu d'un dépôt après avoir transférer le contenu du dépôt 
   1.110 +    \dirname{my-hello} dans le dépôt \dirname{my-new-hello}}
   1.111    \label{fig:tour-merge:pull}
   1.112  \end{figure}
   1.113  
   1.114 -In figure~\ref{fig:tour-merge:pull}, you can see the effect of the
   1.115 -pull from \dirname{my-hello} into \dirname{my-new-hello}.  The history
   1.116 -that was already present in \dirname{my-new-hello} is untouched, but a
   1.117 -new revision has been added.  By referring to
   1.118 -figure~\ref{fig:tour-merge:sep-repos}, we can see that the
   1.119 -\emph{changeset ID} remains the same in the new repository, but the
   1.120 -\emph{revision number} has changed.  (This, incidentally, is a fine
   1.121 -example of why it's not safe to use revision numbers when discussing
   1.122 -changesets.)  We can view the heads in a repository using the
   1.123 -\hgcmd{heads} command.
   1.124 +Dans la figure~\ref{fig:tour-merge:pull}, vous pouvez constater l'effet
   1.125 +d'un \textit{pull} depuis le dépôt \dirname{my-hello} dans le dépôt 
   1.126 +\dirname{my-new-hello}. L'historique qui était déjà présent dans le dépôt
   1.127 +\dirname{my-new-hello} reste intact, mais une nouvelle révision a été 
   1.128 +ajoutée. En vous reportant à la figure~\ref{fig:tour-merge:sep-repos},
   1.129 +vous pouvez voir que le \textit{\emph{changeset ID}} reste le même dans
   1.130 +le nouveau dépôt, mais que le \emph{numéro de révision} reste le même.
   1.131 +(Ceci est un parfait exemple de pourquoi il n'est fiable d'utiliser les
   1.132 +numéro de révision lorsque l'on discute d'un \textit{changeset}.) Vous
   1.133 +pouvez voir les \texit{heads} présente dans le dépôt en utilisant la 
   1.134 +commande \hgcmd{heads}.
   1.135  \interaction{tour.merge.heads}
   1.136  
   1.137 -\subsection{Performing the merge}
   1.138 -
   1.139 -What happens if we try to use the normal \hgcmd{update} command to
   1.140 -update to the new tip?
   1.141 +\subsection{Effectuer la fusion}
   1.142 +
   1.143 +Que se passe-t-il quand vous essayez d'utiliser la commande \hgcmd{update} 
   1.144 +pour mettre à jour votre espace de travail au nouveau \textit{tip}.
   1.145  \interaction{tour.merge.update}
   1.146 -Mercurial is telling us that the \hgcmd{update} command won't do a
   1.147 -merge; it won't update the working directory when it thinks we might
   1.148 -be wanting to do a merge, unless we force it to do so.  Instead, we
   1.149 -use the \hgcmd{merge} command to merge the two heads.
   1.150 +Mercurial nous prévient que la commande \hgcmd{update} n'effectuera pas
   1.151 +la fusion, il ne veut pas mettre à jour l'espace de travail quand il 
   1.152 +estime que nous pourrions avoir besoin d'une fusion, à moins de lui
   1.153 +forcer la main. À la place, il faut utiliser la commande \hgcmd{merge}
   1.154 +pour fusionner les deux \textit{heads}.
   1.155  \interaction{tour.merge.merge}
   1.156  
   1.157  \begin{figure}[ht]
   1.158    \centering
   1.159    \grafix{tour-merge-merge}
   1.160 -  \caption{Working directory and repository during merge, and
   1.161 -    following commit}
   1.162 +  \caption{Espace de travail et dépôt lors d'une fusion, et dans le
   1.163 +    \textit{commit} qui suit.}
   1.164    \label{fig:tour-merge:merge}
   1.165  \end{figure}
   1.166  
   1.167 -This updates the working directory so that it contains changes from
   1.168 -\emph{both} heads, which is reflected in both the output of
   1.169 -\hgcmd{parents} and the contents of \filename{hello.c}.
   1.170 +Ceci met à jour de l'espace de travail de manière à ce qu'il contienne
   1.171 +les modifications des \emph{deux} \textit{heads}, ce qui apparait dans
   1.172 +les sorties de la commande \hgcmd{parents} et le contenu de 
   1.173 +\filename{hello.c}. 
   1.174  \interaction{tour.merge.parents}
   1.175  
   1.176  \subsection{Committing the results of the merge}
   1.177 @@ -100,95 +113,102 @@
   1.178  Whenever we've done a merge, \hgcmd{parents} will display two parents
   1.179  until we \hgcmd{commit} the results of the merge.
   1.180  \interaction{tour.merge.commit}
   1.181 -We now have a new tip revision; notice that it has \emph{both} of
   1.182 -our former heads as its parents.  These are the same revisions that
   1.183 -were previously displayed by \hgcmd{parents}.
   1.184 +Nous avons maintenant un nouveau \textit{tip}, remarquer qu'il contient
   1.185 +\emph{à la fois} nos anciennes \textit{heads} et leurs parents. Ce sont
   1.186 +les mêmes révisions que nous avions affichés avec la commande 
   1.187 +\hgcmd{parents}.
   1.188 +
   1.189  \interaction{tour.merge.tip}
   1.190 -In figure~\ref{fig:tour-merge:merge}, you can see a representation of
   1.191 -what happens to the working directory during the merge, and how this
   1.192 -affects the repository when the commit happens.  During the merge, the
   1.193 -working directory has two parent changesets, and these become the
   1.194 -parents of the new changeset.
   1.195 -
   1.196 -\section{Merging conflicting changes}
   1.197 -
   1.198 -Most merges are simple affairs, but sometimes you'll find yourself
   1.199 -merging changes where each modifies the same portions of the same
   1.200 -files.  Unless both modifications are identical, this results in a
   1.201 -\emph{conflict}, where you have to decide how to reconcile the
   1.202 -different changes into something coherent.
   1.203 +Dans la figure~\ref{fig:tour-merge:merge}, vous pouvez voir une représentation
   1.204 +de ce qui se passe dans l'espace de travail pendant la fusion, et comment ceci
   1.205 +affecte le dépôt lors du \textit{commit}. Pendant la fusion, l'espace de travail,
   1.206 +qui a deux \texit{changesets} comme parents, voit ces derniers devenir le parent
   1.207 +d'un nouveau \textit{changeset}.
   1.208 +
   1.209 +\section{Fusionner les modifications en conflit}
   1.210 +
   1.211 +La plupart des fusions sont assez simple à réaliser, mais parfois 
   1.212 +vous vous trouverez à fusioner des fichiers où la modification touche
   1.213 +la même portion de code, au sein d'un même fichier. À moins que ces
   1.214 +modification ne soient identiques, ceci aboutira à un \emph{conflit},
   1.215 +et vous devrez décider comment réconcillier les différentes modifications
   1.216 +dans un tout cohérent. 
   1.217  
   1.218  \begin{figure}[ht]
   1.219    \centering
   1.220    \grafix{tour-merge-conflict}
   1.221 -  \caption{Conflicting changes to a document}
   1.222 +  \caption{Modifications conflictuelles dans un document}
   1.223    \label{fig:tour-merge:conflict}
   1.224  \end{figure}
   1.225  
   1.226 -Figure~\ref{fig:tour-merge:conflict} illustrates an instance of two
   1.227 -conflicting changes to a document.  We started with a single version
   1.228 -of the file; then we made some changes; while someone else made
   1.229 -different changes to the same text.  Our task in resolving the
   1.230 -conflicting changes is to decide what the file should look like.
   1.231 -
   1.232 -Mercurial doesn't have a built-in facility for handling conflicts.
   1.233 -Instead, it runs an external program called \command{hgmerge}.  This
   1.234 -is a shell script that is bundled with Mercurial; you can change it to
   1.235 -behave however you please.  What it does by default is try to find one
   1.236 -of several different merging tools that are likely to be installed on
   1.237 -your system.  It first tries a few fully automatic merging tools; if
   1.238 -these don't succeed (because the resolution process requires human
   1.239 -guidance) or aren't present, the script tries a few different
   1.240 -graphical merging tools.
   1.241 -
   1.242 -It's also possible to get Mercurial to run another program or script
   1.243 -instead of \command{hgmerge}, by setting the \envar{HGMERGE}
   1.244 -environment variable to the name of your preferred program.
   1.245 -
   1.246 -\subsection{Using a graphical merge tool}
   1.247 -
   1.248 -My preferred graphical merge tool is \command{kdiff3}, which I'll use
   1.249 -to describe the features that are common to graphical file merging
   1.250 -tools.  You can see a screenshot of \command{kdiff3} in action in
   1.251 -figure~\ref{fig:tour-merge:kdiff3}.  The kind of merge it is
   1.252 -performing is called a \emph{three-way merge}, because there are three
   1.253 -different versions of the file of interest to us.  The tool thus
   1.254 -splits the upper portion of the window into three panes:
   1.255 +La figure~\ref{fig:tour-merge:conflict} illustre un cas de modifications
   1.256 +conflictuelles dans un document. Nous avons commencé avec une version simple
   1.257 +de ce fichier, puis nous avons ajoutés des modifications, pendant que 
   1.258 +quelqu'un d'autre modifie le même texte. Notre tâche dans la résolution
   1.259 +du conflit est de décider à quoi le fichier devrait ressembler.
   1.260 +
   1.261 +Mercurial n'a pas de mécanisme interne pour gérer les conflits. 
   1.262 +À la place, il exéctue un programme externe appelé \command{hgmerge}.
   1.263 +Il s'agit d'un script shell qui est embarqué par Mercurial, vous
   1.264 +pouvez le modifier si vous le voulez. Ce qu'il fait par défaut est
   1.265 +d'essayer de trouver un des différents outils de fusion qui seront
   1.266 +probablement installé sur le système. Il commence par les outils
   1.267 +totalement automatique, et si ils échouent (parce que la résolution
   1.268 +du conflit nécessite une intervention humaine) ou si ils sont absents,
   1.269 +le script tente d'exécuter certains outils graphiques de fusion.
   1.270 +
   1.271 +Il est aussi possible de demander à Mercurial d'exécuter un autre
   1.272 +programme ou un autre script au lieu de la commande \command{hgmerge},
   1.273 +en définissant la variable d'environement \envar{HGMERGE} avec le nom
   1.274 +du programme de votre choix.
   1.275 +
   1.276 +\subsection{Utiliser un outil graphique de fusion}
   1.277 +
   1.278 +Mon outil de fusion préféré est \command{kdiff3}, que j'utilise ici
   1.279 +pour illustré les fonctionnalités classiques des outils graphiques 
   1.280 +de fusion. Vous pouvez voir une capture d'écran de l'utilisation de 
   1.281 +\command{kdiff3} dans la figure~\ref{fig:tour-merge:kdiff3}. Cet outil
   1.282 +effectue une \emph{fusion \textit{three-way}}, car il y a trois différentes
   1.283 +versions du fichier qui nous intéresse. Le fichier découpe la partie
   1.284 +supérieure de la fenêtre en trois panneaux:
   1.285 +
   1.286  \begin{itemize}
   1.287 -\item At the left is the \emph{base} version of the file, i.e.~the
   1.288 -  most recent version from which the two versions we're trying to
   1.289 -  merge are descended.
   1.290 -\item In the middle is ``our'' version of the file, with the contents
   1.291 -  that we modified.
   1.292 -\item On the right is ``their'' version of the file, the one that
   1.293 -  from the changeset that we're trying to merge with.
   1.294 +\item A gauche on la version de \emph{base} du fichier, soit ~la plus 
   1.295 +  récente version des deux versions qu'on souhaite fusionner.
   1.296 +\item Au centre, il y a ``notre'' version du fichier, avec le contenu 
   1.297 +  que nous avons modifié.
   1.298 +\item Sur la droite, on trouve ``leur'' version du fichier, celui qui qui
   1.299 +  contient le \textit{changeset} que nous souhaitons intégré. 
   1.300  \end{itemize}
   1.301 -In the pane below these is the current \emph{result} of the merge.
   1.302 -Our task is to replace all of the red text, which indicates unresolved
   1.303 -conflicts, with some sensible merger of the ``ours'' and ``theirs''
   1.304 -versions of the file.
   1.305 -
   1.306 -All four of these panes are \emph{locked together}; if we scroll
   1.307 -vertically or horizontally in any of them, the others are updated to
   1.308 -display the corresponding sections of their respective files.
   1.309 +
   1.310 +Dans le panneau en dessous, on trouve le \emph{résultat} actuel de notre
   1.311 +fusion. Notre tâche consiste donc à remplacement tout les textes en rouges,
   1.312 +qui indiquent des conflits non résolus, avec un fusion manuel et pertinente
   1.313 +de ``notre'' version et de la ``leur''. 
   1.314 +
   1.315 +Tout les quatres panneaux sont \emph{accrochés ensemble}, si nous déroulons
   1.316 +les ascenseurs verticalement ou horizontalement dans chacun d'entre eux, les
   1.317 +autres sont mise à jours avec la section correspondantes dans leurs fichiers.
   1.318  
   1.319  \begin{figure}[ht]
   1.320    \centering
   1.321    \grafix{kdiff3}
   1.322 -  \caption{Using \command{kdiff3} to merge versions of a file}
   1.323 +  \caption{Utilisation de  \command{kdiff3} pour fusionner différents versions
   1.324 +  d'un fichier.}
   1.325    \label{fig:tour-merge:kdiff3}
   1.326  \end{figure}
   1.327  
   1.328 -For each conflicting portion of the file, we can choose to resolve
   1.329 -the conflict using some combination of text from the base version,
   1.330 -ours, or theirs.  We can also manually edit the merged file at any
   1.331 -time, in case we need to make further modifications.
   1.332 -
   1.333 -There are \emph{many} file merging tools available, too many to cover
   1.334 -here.  They vary in which platforms they are available for, and in
   1.335 -their particular strengths and weaknesses.  Most are tuned for merging
   1.336 -files containing plain text, while a few are aimed at specialised file
   1.337 -formats (generally XML).
   1.338 +Pour chaque portion de fichier posant problème, nous pouvons choisir 
   1.339 +de résoudre le le conlfit en utilisant en utilisant une combinaison 
   1.340 +de texte depuis la version de base, la notre, ou la leur. Nous pouvons 
   1.341 +aussi éditer manuellement les fichiers à tous moments, si c'est
   1.342 +nécessaire.
   1.343 +
   1.344 +Il y a \emph{beaucoup} d'outils de fusion disponibles, bien trop pour
   1.345 +en parler de tous ici. Leurs disponibilités varient selon les plateformes
   1.346 +ainsi que leurs avantages et incovénients. La plupart sont optimisé pour
   1.347 +la fusion de fichier contenant un texte plat, certains sont spécialisé
   1.348 +dans un format de fichier précis (générallement XML).
   1.349  
   1.350  \subsection{A worked example}
   1.351