belaran@964: belaran@964: belaran@964: belaran@964: Un rapide tour de Mercurial belaran@964: \label{chap:tour-basic} belaran@964: belaran@964: belaran@964: Installer Mercurial sur votre système belaran@964: \label{sec:tour:install} belaran@964: belaran@964: Des paquetages binaires de Mercurial sont disponibles pour la plupart belaran@964: des systèmes d'exploitation, ce qui rend facile l'utilisation immédiate belaran@964: de Mercurial sur votre ordinateur. belaran@964: belaran@964: belaran@964: Linux belaran@964: belaran@964: Parce que chaque distribution de Linux a ses propres outils de gestion belaran@964: de paquets, politiques et rythmes de développements, il est difficile de belaran@964: donner un ensemble d'instructions uniques pour installer les binaires de belaran@964: Mercurial. La version de Mercurial avec laquelle vous vous retrouverez belaran@964: dépendra grandement de l'activité de la personne en charge du paquetage belaran@964: pour la distribution. belaran@964: belaran@964: Pour rester simple, je me concentrerai sur l'installation de Mercurial belaran@964: en ligne de commande, sous les distributions les plus courantes. La belaran@964: plupart des distributions fournissent des gestionnaires graphiques de belaran@964: paquetage qui vous permettront d'installer Mercurial en quelques clicks. belaran@964: Le paquetage devrait se nommer \textit{mercurial}. belaran@964: belaran@964: belaran@964: Debian: belaran@964: belaran@964: apt-get install mercurial belaran@964: belaran@964: belaran@964: Fedora Core: belaran@964: belaran@964: belaran@964: yum install mercurial belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Gentoo: belaran@964: belaran@964: belaran@964: emerge mercurial belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: OpenSUSE: belaran@964: belaran@964: belaran@964: yum install mercurial belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Ubuntu: Le paquetage de Mercurial d'Ubuntu est construit sur celui de Debian. belaran@964: Pour l'installer, exécutez simplement les commandes suivantes: belaran@964: belaran@964: belaran@964: apt-get install mercurial belaran@964: belaran@964: belaran@964: Les paquetages Ubuntu pour Mercurial ont tendance à être un peu en retard belaran@964: par rapport au paquetage Debian (au moment de l'écriture de ce livre, il belaran@964: faut compter à peu près un retard de 7 mois), ce qui signifie que parfois belaran@964: sur Ubuntu, vous risquez de rencontrer des problèmes qui ont été corrigés belaran@964: depuis longtemps dans les paquetages Debian. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Solaris belaran@964: belaran@964: SunFreeWare, à http://www.saufreeware.com, est une bonne source belaran@964: pour trouver un vaste nombre de paquets précompilés pour 32 ou 64 bits belaran@964: Intel et les architecture Sparc, dont les versions courantes de Mercurial. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Mac OS X belaran@964: belaran@964: Lee Cantey publie un installateur de Mercurial pour Mac OS X sur le site belaran@964: http://mercurial.berkwood.com. Ce paquetage fonctionne sur les belaran@964: architectures Intel- et PowerPC. Avant de vous en servir, vous devez belaran@964: installer une version Universelle MacPython web:macpython. C'est belaran@964: assez facile à faire : suivez simplement les instructions sur le site belaran@964: de Lee. belaran@964: belaran@964: belaran@964: Il est aussi possible d'installer Mercurial en utilisant Fink ou MacPorts, belaran@964: deux outils de gestion de paquetage libres pour Mac OS X. Si vous avez belaran@964: Fink, utilisez sudo fink install mercurial-py25. Si vous avez belaran@964: MacPorts, sudo port install mercurial. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Windows belaran@964: belaran@964: Lee Cantey publie aussi un installateur de Mercurial pour Windows sur le site belaran@964: http://mercurial.berkwood.com. Ce paquetage n'a aucune dépendance belaran@964: externe, il fonctionne tout court. belaran@964: belaran@964: belaran@964: belaran@964: La version de Windows de Mercurial ne convertie pas automatiquement belaran@964: les retours chariot Windows et Unix. Si vous désirez partager votre belaran@964: travail avec des utilisateurs Unix, vous devez faire un peu de configuration belaran@964: supplémentaire. XXX En dire plus. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Commencer à utiliser Mercurial belaran@964: belaran@964: Pour commencer, nous utiliserons la commande hg version pour vérifier belaran@964: si Mercurial est installé proprement. Les informations affichées sur la belaran@964: version ne sont pas réellement importantes en soit, c'est surtout de savoir belaran@964: si elles s'affichent qui nous intéresse. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: L'aide intégrée belaran@964: belaran@964: Mercurial fournit un système d'aide intégré, ce qui est inestimable quand belaran@964: vous vous retrouvez coincé à essayer de vous rappeler comment lancer telle belaran@964: ou telle commande. belaran@964: Si c'est le cas, exécutez simplement hg help; il vous aidera à imprimer belaran@964: une brève liste de commandes, avec une description de ce qu'elles font. Si vous belaran@964: demandez de l'aide sur une commande spécifique (voir ci-dessous), il affichera belaran@964: des informations plus détaillées. belaran@964: belaran@964: Pour un niveau d'informations encore plus détaillées (ce dont vous aurez rarement belaran@964: besoin), exécuter hg help . L'option est belaran@964: l'abréviation de , et indique à Mercurial d'afficher plus belaran@964: d'informations que d'habitude. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Travailler avec un dépôt belaran@964: belaran@964: Avec Mercurial, tout se déroule au sein du dépôt\footnote{NdT: Dépôt est belaran@964: la traduction que j'ai retenue pour tout l'ouvrage du terme anglais \textit{repository}}. belaran@964: Le dépôt d'un projet contient tous les fichiers qui appartiennent au projet. belaran@964: belaran@964: belaran@964: Il n'y a rien de particulièrement magique au sujet de ce dépôt, c'est belaran@964: simplement une arborescence sur votre système de fichiers que Mercurial belaran@964: traite de manière spéciale. Vous pouvez renommer ou effacer ce répertoire belaran@964: à n'importe quel moment, en utilisant la ligne de commande ou votre belaran@964: explorateur de fichiers. belaran@964: belaran@964: belaran@964: belaran@964: Faire une copie locale de votre dépôt belaran@964: belaran@964: Copier un dépôt est juste un peu spécial. Bien que vous belaran@964: puissiez utiliser une commande habituelle de copie pour copier belaran@964: votre dépôt, il vaut mieux utiliser une commande fournie par belaran@964: Mercurial. Cette commande est appelée hg clone, car elle belaran@964: crée une copie identique à un dépôt existant. belaran@964: belaran@964: Si votre opération de clonage réussit, vous devriez maintenant belaran@964: avoir un répertoire local appelé hello. Ce répertoire belaran@964: contiendra quelques fichiers. belaran@964: belaran@964: Ces fichiers ont le même contenu et historique dans votre dépôt belaran@964: qu'ils ont dans le dépôt que vous avez cloné. belaran@964: belaran@964: belaran@964: Chaque dépôt Mercurial est complet, autonome et indépendant. Il belaran@964: contient sa propre copie privée des fichiers du projet et de leur belaran@964: historique. Le clone d'un dépôt se souvient de la localisation du belaran@964: dépôt à partir duquel il a été clôné, mais il ne communique pas avec belaran@964: ce dernier, ou un autre, à moins que vous ne lui demandiez. belaran@964: belaran@964: belaran@964: Ce que tout ceci signifie pour le moment est que nous sommes libres belaran@964: d'expérimenter avec ce dépôt, confiants dans le fait qu'il s'agit d'un belaran@964: bac à sable qui n'affectera personne d'autre. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Quel est le contenu d'un dépôt ? belaran@964: belaran@964: Prêtons plus attention un instant au contenu d'un dépôt. Nous voyons belaran@964: qu'il contient un répertoire nommé .hg. C'est ici que Mercurial belaran@964: conserve toutes ses métadonnées. belaran@964: belaran@964: belaran@964: belaran@964: Le contenu du répertoire .hg et ses sous répertoires sont les belaran@964: seuls propres à Mercurial. Tous les autres fichiers et répertoires dans belaran@964: le dépôt sont à vous, et vous pouvez en faire ce que vous voulez. belaran@964: belaran@964: belaran@964: Pour introduire un peu de terminologie, le répertoire .hg est belaran@964: un vrai dépôt, et tous les fichiers et les répertoires qui coexistent belaran@964: avec lui, sont désignés sous le nom espace de travail\footnote{NdT: belaran@964: \textit{working directory}}. Une manière facile de se rappeler cette belaran@964: distinction est de retenir que le dépôt contient l'historique belaran@964: de votre projet, alors que l'espace de travail contient une \emph{copie belaran@964: ponctuelle}\footnote{NdT: Ce terme est une traduction du terme anglais belaran@964: \textit{snapshot}. Il est traduit ici pour faciliter la lecture, mais ne sera belaran@964: plus traduit par la suite.} de votre projet à un certain point de son belaran@964: historique. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Une ballade dans l'historique belaran@964: belaran@964: Une des premières choses que vous aurez envie de faire avec un nouveau belaran@964: dépôt, sera de comprendre son historique. La commande hg log vous belaran@964: donne une vue de l'historique. belaran@964: belaran@964: Par défaut, cette commande affiche à l'écran un bref paragraphe pour chaque belaran@964: révision enregistrée pour ce projet. Dans la terminologie de Mercurial, nous belaran@964: appelons chacun de ces évènements enregistrés un changeset, parce belaran@964: qu'il contient un ensemble de modifications sur plusieurs fichiers. belaran@964: belaran@964: belaran@964: La commande hg log affiche ainsi ces informations: belaran@964: belaran@964: belaran@964: changeset: Ce champ contient un nombre, séparé par deux points belaran@964: (:), d'une chaine hexadécimale. Il s'agit en fait d'identifiants belaran@964: d'un \textit{changeset}. Il y a deux identifiants car le numéro de belaran@964: la révision est plus court et plus à facile à saisir qu'une séquence belaran@964: hexadécimale. belaran@964: belaran@964: belaran@964: user: L'identité de la personne qui a créée ce %%% laisser le terme anglais car il sera affiché belaran@964: \textit{changeset}. C'est un champ libre de forme, mais la plupart du belaran@964: temps il contient le nom et l'email de la personne. belaran@964: belaran@964: belaran@964: date: La date et l'heure à laquelle le \textit{changeset} belaran@964: a été créé, ainsi que le \textit{fuseau horaire} dans laquelle il a été créé. %%%TODO: Translate 'timezone' properly : FUSEAU belaran@964: (La date et l'heure sont locales à ce \textit{fuseau}, elles indiquent belaran@964: donc quelle date et heure il était pour la personne qui a créé ce %%%TODO: je suppose (quelle "heure") OUI belaran@964: \textit{changeset}.) belaran@964: belaran@964: belaran@964: résumé: La première du message que le créateur a associé à belaran@964: son \textit{changeset} pour le décrire. belaran@964: belaran@964: belaran@964: belaran@964: Par défaut, la commande hg log n'affiche qu'un résumé, il manque belaran@964: beaucoup de détails. belaran@964: belaran@964: belaran@964: La figure fournit une représentation graphique belaran@964: de l'historique du dépôt hello, pour rendre plus facile de voir belaran@964: dans quelle direction l'historique se déroule\footnote{NdT: \textit{flowing in}.}. belaran@964: Nous reviendrons régulièrement sur cette représentation dans ce chapitre et belaran@964: ceux qui suivent. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: XXX add text belaran@964: Représentation graphique du dépôt hello belaran@964: \label{fig:tour-basic:history} belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Changesets, révisions, et discuter avec les autres belaran@964: %%% je propose "colaboration" belaran@964: belaran@964: belaran@964: Comme l'anglais est réputé pour être un langage maladroit, et que l'informatique belaran@964: est la source de bien des erreurs de terminologies (pourquoi utiliser un belaran@964: seul terme quand quatre feront l'affaire ?), la gestion de version a une belaran@964: variété de mots et de phrases qui veulent dire la même chose. Si vous belaran@964: discutez d'historique de Mercurial avec d'autres personnes, belaran@964: %%%TODO: ça ne veut rien dire: il faut supprimer une des personnes : soit "quelqu'un", belaran@964: % soit "à d'autres personnes" belaran@964: vous constaterez que souvent le mot \textit{changeset} est contracté simplement belaran@964: en change ou (à l'écrit) cset, et même parfois un belaran@964: \textit{changeset} simplement révision, abrégé en rev. belaran@964: belaran@964: belaran@964: Bien que le mot que vous utilisez pour désigner le concept de belaran@964: \textit{changeset} importe peu, l'identifiant que vous utilisez belaran@964: pour désigner un changeset \textit{spécifique} a une grande belaran@964: importance. Rappelez vous que le champ \textit{changeset} affiché par la belaran@964: commande hg log identifie un \textit{changeset} à la fois avec belaran@964: un numéro de révision et une séquence hexadécimale. belaran@964: belaran@964: belaran@964: belaran@964: Le numéro de révision est seulement valable dans ce dépôt, belaran@964: belaran@964: belaran@964: alors que la séquence hexadécimale est un \emph{identifiant belaran@964: permanent, et invariant } qui pourra toujours être associé au belaran@964: \textit{changeset} exact de chaque copie de votre dépôt. belaran@964: belaran@964: belaran@964: belaran@964: La distinction est importante. Si vous envoyez un email à quelqu'un en belaran@964: parlant de la révision 33, il est très probable que sa révision 33 belaran@964: ne sera pas la même que la votre. La raison de ceci est que le belaran@964: numéro de révision dépend de l'ordre dans lequel les modifications sont belaran@964: arrivées dans le dépôt, et il n'y a aucune garantie que les mêmes changements belaran@964: soient arrivés dans le même ordre dans différents dépôts. Trois modifications belaran@964: $a,b,c$ peuvent aisément apparaitre dans un dépôt comme $0,1,2$, et dans belaran@964: un autre comme $1,0,2$. belaran@964: belaran@964: belaran@964: Mercurial utilise les numéros de révision uniquement comme des raccourcis belaran@964: pratiques. Si vous devez discuter d'un \textit{changeset} avec quelqu'un, belaran@964: ou identifer un \textit{changeset} pour une quelquonque %%%TODO: our : "pour" ou "ou" belaran@964: raison (par exemple, un rapport de \textit{bug}), utilisez la séquence belaran@964: hexadécimale. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Afficher une révision spécifique belaran@964: belaran@964: Pour réduire la sortie de hg log à une seule révision, utilisez belaran@964: l'option (ou ). Vous pouvez utiliser belaran@964: le numéro de révision ou la séquence hexadécimale comme identifiant, et belaran@964: demander autant de révisions que vous le souhaitez. belaran@964: belaran@964: belaran@964: belaran@964: Si vous voulez voir l'historique de plusieurs révisions sans avoir à belaran@964: les énumérer, vous pouvez utiliser la \textit{range notation} belaran@964: \footnote{NdT: Il n'est pas aisé de traduire ce terme, donc je le %%%TODO : intervalle de numérotation ? belaran@964: laisse en anglais} qui vous permet d'exprimer l'idée je veux toutes belaran@964: les révisions entre $a$ et $b$, inclus. belaran@964: belaran@964: Mercurial respecte aussi l'ordre dans lequel vous spécifiez les belaran@964: révisions, ainsi hg log -r 2:4 affichera $2,3,4$ alors que belaran@964: hg log -r 4:2 affichera $4,3,2$. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Informations détaillées belaran@964: belaran@964: belaran@964: Le résumé affiché par hg log est suffisant si vous savez déjà ce %%%TODO: je pense que le premier "si" est de trop : exact belaran@964: que vous cherchez. En revanche, vous aurez probablement besoin de voir une description belaran@964: complète du changement, ou une liste des fichiers modifiés si vous belaran@964: cherchez à déterminer qu'un \textit{changeset} est bien celui que vous%%%TODO: les propositions sont mal construites : après un "si...." il faut une proposition sans "si... donc ici : "si ... recherchez", ben quoi ? belaran@964: recherchez. L'option \hgopt{-v} de la commande hg log (ou belaran@964: \hgopt{--verbose}) vous donne ces informations supplémentaires. belaran@964: belaran@964: belaran@964: belaran@964: Si vous voulez voir à la fois la description et le contenu d'une belaran@964: modification, ajouter l'option (ou ). belaran@964: Ceci affiche le contenu d'une modification comme un diff unifié belaran@964: \footnote{NdT: \textit{unified diff}} (si vous n'avez jamais vu de diff belaran@964: unifié avant, consultez la section pour un rapide belaran@964: survol). belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Tout sur les options de commandes belaran@964: belaran@964: belaran@964: Avant d'aller plus loin sur le fonctionnement des commandes de Mercurial, belaran@964: étudions un moment comment elles fonctionnent de manière générale. Vous belaran@964: trouverez ça probablement utile pour la suite de notre parcours. belaran@964: belaran@964: belaran@964: Mercurial utilise une approche directe et cohérente pour interpréter %%%TODO: une manière d'approche ? belaran@964: les options que vous passez aux commandes. Il suit une convention commune belaran@964: à la plupart des systèmes Unix et Linux modernes. belaran@964: belaran@964: belaran@964: belaran@964: Chaque option a un nom complet. Par exemple, comme nous l'avons déjà belaran@964: vu, la commande hg log accepte l'option .%%%TODO: commande ou command e\hgcmd...? belaran@964: belaran@964: belaran@964: La plupart des options disposent de noms abrégés. Aussi, au lieu d'utiliser belaran@964: , vous pouvez utiliser . (Les options qui belaran@964: n'ont pas de noms abrégés sont généralement rarement utilisées, pour cette raison). belaran@964: belaran@964: belaran@964: Les noms complets commencent par deux tirets (i.e. ), belaran@964: alors que les options courtes commencent avec un seul (i.e. ). belaran@964: belaran@964: belaran@964: Les noms des options sont cohérents entre les commandes. Par exemple, belaran@964: chaque commande qui accepte un \textit{changeset ID} ou un numéro de révision belaran@964: accepte aussi et comme arguments. belaran@964: %TODO: Small mistake here, shouldn't have log here... shouldn't it ? belaran@964: belaran@964: belaran@964: belaran@964: Dans les exemples de ce livre, j'utilise les noms abrégés plutôt que les noms belaran@964: complets. Ceci est une préférence personnelle, pas une recommandation. belaran@964: belaran@964: belaran@964: La plupart des commandes qui affichent une quelconque sortie à l'écran, belaran@964: afficheront davantage avec l'option (ou ), et belaran@964: moins avec l'option (ou ). belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Faire et vérifier des modifications belaran@964: belaran@964: Maintenant que nous avons une bonne idée des commandes pour consulter belaran@964: l'historique de Mercurial, regardons comment faire des modifications et belaran@964: les examiner. belaran@964: belaran@964: belaran@964: belaran@964: La première chose que nous allons faire c'est isoler notre expérience dans belaran@964: un dépôt à part. Nous allons utiliser la commande hg clone, mais nous belaran@964: n'avons pas besoin de faire une copie de dépôt distant. Comme nous avons belaran@964: déjà une copie locale, nous pouvons juste faire un clone de celle-ci à la belaran@964: place. C'est beaucoup plus rapide que de faire une copie à travers le belaran@964: réseau, et un dépôt cloné localement prend également moins d'espace disque. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: On notera au passage qu'il est souvent considéré comme une bonne pratique belaran@964: de conserver une copie immaculée du dépôt distant, à partir de laquelle belaran@964: vous pourrez faire des copies locales temporaires pour créer des bacs à belaran@964: sable pour chaque tâche sur laquelle vous souhaitez travailler. Ceci vous belaran@964: permet de travailler sur plusieurs choses en parallèle, chacune isolée les belaran@964: unes des autres en attendant que ces tâches soient finies et que vous soyez belaran@964: prêt à les réintégrer. Parce que les copies locales sont peu coûteuses, il belaran@964: est très rapide de créer ou détruire des dépôts dès que vous en avez besoin. belaran@964: belaran@964: belaran@964: %% Note: la dernière phrase n'est pas une traduction littérale, mais je belaran@964: %% pense qu'elle exprime plus clairement en français ce que veut dire son belaran@964: %% équivalent anglais. : OUI belaran@964: belaran@964: belaran@964: Dans notre dépôt my-hello, nous avons un fichier hello.c belaran@964: qui contient le classique programme hello, world. Nous allons utiliser belaran@964: l'ancienne et vénérable commande sed pour l'éditer afin qu'il belaran@964: affiche une seconde ligne à l'écran. (J'utilise sed seulement parce belaran@964: qu'il est ainsi facile d'écrire des exemples sous forme de script. Comme belaran@964: vous n'avez pas ces contraintes, vous n'utiliserez probablement pas sed belaran@964: mais plutôt votre éditeur de texte favori). belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: La commande hg status de Mercurial nous dira de quels fichiers Mercurial belaran@964: s'occupe au sein de ce dépôt. belaran@964: belaran@964: La commande hg status n'affiche rien sur la sortie pour quelques fichiers belaran@964: mais une ligne commence par M for hello.c. À moins que belaran@964: vous ne lui indiquiez de le faire, hg status n'affichera aucune sortie belaran@964: pour les fichiers qui n'ont pas été modifiés. belaran@964: belaran@964: belaran@964: Le caractère M indique que Mercurial a remarqué que nous avions belaran@964: modifié le fichier hello.c. Nous n'avons pas besoin d'informer belaran@964: Mercurial que nous allons modifier un fichier avant de le faire, ou que nous belaran@964: venons de le modifier, il est capable de s'en rendre compte tout seul. belaran@964: belaran@964: belaran@964: C'est pratique de savoir que nous avons modifié hello.c, mais il belaran@964: serait encore plus pratique de savoir ce que nous avons modifié exactement. Pour belaran@964: cela, nous avons la commande hg diff. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Enregister les modifications dans un nouveau \textit{changeset} belaran@964: belaran@964: Nous pouvons modifier des fichiers, compiler et tester nos modifications, belaran@964: et utiliser les commandes hg status et hg diff pour voir les belaran@964: modifications effectuées, jusqu'au moment où nous serons assez satisfaits belaran@964: pour décider d'enregistrer notre travail dans un \textit{changeset}. belaran@964: belaran@964: belaran@964: La commande hg commit vous laisse créer un nouveau \textit{changeset}, belaran@964: nous désignerons généralement cette opération par faire un commit ou belaran@964: commiter\footnote{NdT: De mon expérience, la plupart des francophones belaran@964: utilisent régulièrement, à l'oral, cette expression, mais bien évidement belaran@964: il ne s'agit pas d'un terme de terminologie correcte, ni même français.} belaran@964: belaran@964: belaran@964: belaran@964: Définir le nom d'utilisateur belaran@964: belaran@964: Quand vous exécutez la commande hg commit pour la première fois, elle belaran@964: n'est pas garantie de réussir. Mercurial enregistre votre nom et votre belaran@964: adresse avec chaque modification que vous effectuez, de manière à ce que belaran@964: vous soyez capable (ou d'autres le soient) de savoir qui a fait quelle belaran@964: modification. Mercurial essaye automatiquement de découvrir un nom belaran@964: d'utilisateur qui ait un minimum de sens pour effectuer l'opération belaran@964: de \textit{commit} avec. Il va essayer chacune des méthodes suivantes, belaran@964: dans l'ordre: belaran@964: belaran@964: belaran@964: Si vous spécifiez l'option avec la commande belaran@964: hg commit, suivi d'un nom d'utilisateur, ceci aura toujours la belaran@964: priorité sur les autres méthodes ci dessous. belaran@964: belaran@964: belaran@964: Si vous avez défini une variable d'environnement HGUSER, belaran@964: c'est cette valeur qui est alors utilisée. belaran@964: belaran@964: belaran@964: Si vous créez un fichier nommé .hgrc dans votre belaran@964: répertoire \textit{home}, avec une entrée username, belaran@964: c'est la valeur associée qui sera utilisée. Pour voir à quoi belaran@964: ressemble le contenu de ce fichier regardez la belaran@964: section ci-dessous. belaran@964: belaran@964: belaran@964: Si vous avez défini une variable d'environnement EMAIL belaran@964: celle ci sera utilisée ensuite. belaran@964: belaran@964: belaran@964: Enfin, Mercurial interrogera votre système pour trouver votre belaran@964: nom d'utilisateur local ainsi que le nom de la machine hôte, et il belaran@964: fabriquera un nom d'utilisateur à partir de ces données. Comme il arrive belaran@964: souvent que ce genre de noms soit totalement inutile, il vous belaran@964: préviendra en affichant un message d'avertissement. belaran@964: belaran@964: belaran@964: belaran@964: Si tous ces mécanismes échouent, Mercurial n'exécutera pas la commande, belaran@964: affichant un message d'erreur. Dans ce cas, il ne vous laissera pas belaran@964: effectuer de \textit{commit} tant que vous n'aurez pas défini un nom belaran@964: d'utilisateur. belaran@964: belaran@964: belaran@964: Vous devriez penser à utiliser la variable d'environement HGUSER belaran@964: et l'option comme moyen pour \emph{changer le nom belaran@964: d'utilisateur} par défaut. Pour une utilisation normale, la manière la plus belaran@964: simple et robuste d'opérer est de créer un fichier .hgrc, belaran@964: voir ci-dessous pour les détails à ce sujet. belaran@964: belaran@964: belaran@964: belaran@964: Créer un fichier de configuration pour Mercurial belaran@964: \label{sec:tour-basic:username} belaran@964: belaran@964: belaran@964: Pour définir un nom d'utilisateur, utilisez votre éditeur de texte favori belaran@964: pour créer un fichier .hgrc dans votre répertoire \textit{home}. belaran@964: Mercurial va utiliser ce fichier pour retrouver votre configuration personnelle. belaran@964: Le contenu initial devrait ressembler à ceci: belaran@964: belaran@964: belaran@964: # This is a Mercurial configuration file. belaran@964: [ui] belaran@964: username = Firstname Lastname <email.address@domain.net> belaran@964: belaran@964: belaran@964: La ligne avec [ui] commence une section du fichier de belaran@964: configuration, ainsi la ligne username = ... signifie belaran@964: définir la valeur de l'élément username dans la section belaran@964: ui. Une section continue jusqu'à ce qu'une nouvelle belaran@964: commence, ou que la fin du fichier soit atteinte. Mercurial ignore belaran@964: les lignes vides et traite tout texte situé à la suite d'un belaran@964: # jusqu'à la fin de la ligne comme un commentaire. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Choisir un nom d'utilisateur belaran@964: belaran@964: Vous pouvez utiliser n'importe quelle valeur pour votre username, belaran@964: car cette information est destinée à d'autres personnes et non à être belaran@964: interprétée par Mercurial. La convention que la plupart des personnes belaran@964: <<<<<<< local belaran@964: suivent est d'utiliser leurs noms suivies de leurs adresses emails, belaran@964: comme montrée ci-dessus: belaran@964: belaran@964: belaran@964: belaran@964: Le mécanisme interne du serveur \textit{web} intégré à Mercurial, belaran@964: masque les adresses emails, pour rendre plus difficile leurs belaran@964: récupérations par les outils utilisés par les \textit{spammmers}. belaran@964: Ceci réduit la probabilité que de recevoir encore plus de belaran@964: \textit{spam} si vous vous publiez un dépôt sur internet. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Rédiger un message de \textit{commit} belaran@964: belaran@964: Lorsqu'on effectue une opération de \textit{commit}, Mercurial belaran@964: lance automatiquement un éditeur de texte pour permettre de saisir belaran@964: un message qui décrira les modifications effectuées dans ce belaran@964: \textit{changeset}. Ce message est nommé le \emph{message de belaran@964: \textit{commit}}. Ce sera un enregistrement pour tout lecteur belaran@964: expliquant le pourquoi et le comment de vos modifications, et il sera belaran@964: affiché par la commande hg log. belaran@964: belaran@964: belaran@964: belaran@964: L'éditeur que la commande hg commit déclenche ne contiendra belaran@964: qu'une ligne vide suivi d'un certain nombre de lignes commençant belaran@964: par HG:. belaran@964: belaran@964: belaran@964: empty line belaran@964: HG: changed hello.c belaran@964: belaran@964: belaran@964: Mercurial ignore les lignes qui commencent avec HG:, il belaran@964: ne les utilise que pour nous indiquer quels fichiers modifiés il se belaran@964: prépare à \textit{commiter}. Modifier ou effacer ces lignes n'a belaran@964: aucune conséquence sur l'opération de \textit{commit}. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Rédiger un message \textit{approprié} belaran@964: belaran@964: Comme hg log n'affiche que la première ligne du message de belaran@964: \textit{commit} par défaut, il est souvent considéré comme une bonne belaran@964: pratique de rédiger des messages de \textit{commit} qui tiennent belaran@964: sur une seule ligne. Voilà un exemple concret de message de belaran@964: \textit{commit} qui ne suit pas cette directive, et qui a donc belaran@964: un résumé peu lisible. belaran@964: belaran@964: belaran@964: belaran@964: changeset: 73:584af0e231be belaran@964: user: Censored Person <censored.person@example.org> belaran@964: date: Tue Sep 26 21:37:07 2006 -0700 belaran@964: summary: include buildmeister/commondefs. Add an exports and install belaran@964: belaran@964: belaran@964: belaran@964: A ce sujet, il faut noter qu'il n'existe pas de règle absolue dans ce belaran@964: domaine. Mercurial lui-même n'interprète pas les contenus des messages belaran@964: de \textit{commit}, ainsi votre projet est libre de concevoir différentes belaran@964: politiques de mise en page des messages. belaran@964: belaran@964: belaran@964: Ma préférence personnelle va au message court, mais informatif, qui offre belaran@964: des précisions supplémentaires par rapport à ce que pourrait m'apprendre une commande belaran@964: hg log --patch. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Annuler un \textit{commit} belaran@964: belaran@964: Si, en rédigeant le message, vous décidez que finalement vous ne belaran@964: voulez pas effectuer ce \textit{commit}, il suffit de quitter simplement belaran@964: l'éditeur sans sauver. Ceci n'aura aucune conséquence sur le dépôt ou belaran@964: les fichiers de l'espace de travail. belaran@964: belaran@964: belaran@964: Si vous exécuter la commande hg commit sans aucun argument, elle belaran@964: enregistre toutes les modifications que vous avez faites, comme le montre belaran@964: les commandes hg status et hg diff. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Admirer votre travail belaran@964: belaran@964: Une fois que votre \textit{commit} est terminé, vous pouvez utiliser belaran@964: la commande hg tip pour afficher le \textit{changeset} que nous belaran@964: venons de créer. Cette commande produit une sortie à l'écran qui est belaran@964: identique à celle du hg log, mais qui n'affiche que la dernière belaran@964: révision du dépôt. belaran@964: belaran@964: On fait couramment référence à la dernière révision du dépôt comme belaran@964: étant la révision \textit{tip}, ou plus simplement le \textit{tip}. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Partager ses modifications belaran@964: belaran@964: Nous avons mentionné plus haut que les dépôts de Mercurial belaran@964: sont autosuffisants. Ce qui signifie que le \textit{changeset} belaran@964: que vous venez de créer existe seulement dans votre répertoire belaran@964: my-hello. Étudions comment propager cette modification belaran@964: dans d'autres dépôts. belaran@964: belaran@964: belaran@964: belaran@964: Récupérer les modifications d'autres dépôts belaran@964: \label{sec:tour:pull} belaran@964: belaran@964: belaran@964: Pour commencer, construisons un clone de notre dépôt hello belaran@964: qui ne contiendra pas le changement que nous venons d'effectuer. Nous belaran@964: l'appellerons notre dépôt temporaire hello-pull. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Nous allons utiliser la commande hg pull pour apporter les belaran@964: modifications depuis my-hello dans hello-pull. belaran@964: Néanmoins, récupérer aveuglement des modifications depuis un dépôt belaran@964: a quelque chose d'un peu effrayant. Mercurial propose donc une belaran@964: commande hg incoming qui permet de savoir quelles modifications belaran@964: la commande hg pull pourrait entraîner dans notre dépôt, belaran@964: et ceci sans effectuer réellement de modification dessus. belaran@964: belaran@964: (Bien évidement, quelqu'un pourrait ajouter des modifications belaran@964: supplémentaires sur le dépôt que nous étudions avec hg incoming, belaran@964: avant que nous ayons effectué notre hg pull, avec comme belaran@964: triste conséquence que nous aurons récupéré des modifications que belaran@964: nous n'attendions pas.) belaran@964: belaran@964: belaran@964: Apporter les modifications rapatriées dans un dépôt se résume donc belaran@964: à exécuter la commande hg pull, et préciser depuis quel dépôt belaran@964: effectuer le hg pull. belaran@964: belaran@964: belaran@964: belaran@964: Comme vous le voyez avec une sortie avant et après de la commande belaran@964: hg tip, nous avons réussi à récupérer aisément les modifications belaran@964: dans notre dépôt. Il reste néanmoins quelque chose à faire avant de belaran@964: placer ces modifications dans l'espace de travail. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Mise à jour de l'espace de travail belaran@964: belaran@964: Nous avons jusqu'à maintenant grossièrement définie la relation belaran@964: entre un dépôt et un espace de travail. La commande hg pull que belaran@964: nous avons exécutée dans la section a apporté belaran@964: des modifications, que nous avons vérifiées, dans notre dépôt, mais belaran@964: il n'y a aucune trace de ces modifications dans notre espace de travail. belaran@964: En effet, hg pull ne touche pas (par défaut) à l'espace de belaran@964: travail. C'est la commande hg update qui s'en charge. belaran@964: belaran@964: belaran@964: belaran@964: Il peut sembler un peu étrange que la commande hg pull ne mette belaran@964: pas à jour l'espace de travail automatiquement. Il y a en fait une belaran@964: très bonne raison à cela : vous pouvez utilisez la commande belaran@964: belaran@964: belaran@964: hg update pour mettre à jour votre espace de travail à l'état belaran@964: dans lequel il était à n'importe quelle révision de l'historique belaran@964: du dépôt. Si vous aviez un espace de travail contenant une ancienne belaran@964: révision&emdash;pour chercher l'origine d'un \textit{bug}, par exemple&emdash;et belaran@964: que vous effectuiez un hg pull qui mettrait à jour automatiquement belaran@964: votre espace de travail, vous ne seriez probablement pas très satisfait. belaran@964: belaran@964: belaran@964: Néanmoins, comme les opérations de \textit{pull} sont très souvent belaran@964: suivies d'un \textit{update}, Mercurial vous permet de combiner les belaran@964: deux aisément en passant l'option à la commande belaran@964: hg pull belaran@964: belaran@964: belaran@964: hg pull -u belaran@964: belaran@964: belaran@964: belaran@964: Si vous étudiez de nouveau la sortie de la commande hg pull dans belaran@964: la section quand nous l'avons exécutée sans l'option belaran@964: , vous pouvez constater qu'elle a affiché un rappel assez belaran@964: utile : vous devez encore effectuer une opération pour mettre à jour belaran@964: votre espace de travail: belaran@964: belaran@964: belaran@964: belaran@964: (run 'hg update' to get a working copy) belaran@964: belaran@964: belaran@964: belaran@964: Pour découvrir sur quelle révision de l'espace de travail on est, utilisez belaran@964: la commande hg parents. belaran@964: belaran@964: Si vous regardez de nouveau le dessin , vous belaran@964: <<<<<<< local belaran@964: verrez les flèches reliant entre eux les \textit{changeset}. Le nœud belaran@964: d'où la flèche part est dans chaque cas un parent, belaran@964: et le nœud où la flèche arrive est un enfant. belaran@964: belaran@964: belaran@964: L'espace de travail a un parent de la même manière, c'est ce \textit{changeset} belaran@964: que l'espace de travail contient à ce moment. belaran@964: %%%TODO : difficile à comprendre : l'espace de travail a un parent, de la même manière, c'est ce changeset que l'espace... belaran@964: belaran@964: belaran@964: Pour mettre à jour l'espace de travail d'une révision particulière, belaran@964: indiquez un numéro de révision ou un \textit{changeset ID} à la commande belaran@964: hg update. belaran@964: belaran@964: Si vous ne précisez pas de manière explicite de numéro de révision belaran@964: la commande hg update mettra à jour votre espace de travail avec belaran@964: le contenu de la révsion \textit{tip}, comme montré dans l'exemple belaran@964: ci dessus lors du second appel à hg update. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Transférer les modifications à un autre dépôt belaran@964: belaran@964: Mercurial vous laisse transférer les modifications à un autre belaran@964: dépôt, depuis votre dépôt actuel. Comme dans l'exemple du belaran@964: hg pull ci-dessus, nous allons créer un dépôt temporaire belaran@964: vers lequel transférer\footnote{NdT: Les francophones disent souvent belaran@964: pousser tout simplement} nos modifications. belaran@964: belaran@964: La commande hg outgoing nous indique quels changements nous belaran@964: allons transférer vers l'autre serveur ? belaran@964: belaran@964: Et la commande hg push effectue réellement le transfert. belaran@964: belaran@964: Comme avec hg pull, la commande hg push ne met pas à jour belaran@964: le répertoire de travail du dépôt dans lequel il transfère les belaran@964: modifications. (À l'inverse de hg pull, hg push ne fournit belaran@964: pas d'option -u pour forcer la mise à jour de l'espace belaran@964: de travail cible). belaran@964: belaran@964: belaran@964: Qu'est ce qui se passe lorsque vous essayez de récupérer ou de transférer belaran@964: vos modifications et que le dépôt cible a déjà reçu ces modifications ? belaran@964: Rien de bien excitant. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: Partager ses modifications à travers le réseau belaran@964: belaran@964: Les commandes que nous avons étudiées dans les sections précédentes belaran@964: ne sont pas limitées aux dépôt locaux. Chacune fonctionne de la même belaran@964: manière à travers une connexion réseau, il suffit de lui passer une belaran@964: URL à la place d'un chemin de fichier local. belaran@964: belaran@964: belaran@964: belaran@964: Dans cet exemple, nous allons voir quels changements nous pourrions belaran@964: transférer vers le dépôt distant, mais le dépôt est, de manière tout belaran@964: à fait compréhensible, pas configuré pour accepter des modifications belaran@964: d'utilisateurs anonymes. belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: belaran@964: