hgbook
diff fr/tour-merge.tex @ 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 | 547d3aa25ef0 |
children | 2cd5d582c956 |
line diff
1.1 --- a/fr/tour-merge.tex Thu Feb 05 12:37:03 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