belaran@964: belaran@964: belaran@973: belaran@973: belaran@973: Une rapide présentation de Mercurial : les bases belaran@973: belaran@973: belaran@973: Installer Mercurial sur votre système belaran@973: youshe@983: Des paquetages binaires de Mercurial sont disponibles pour la youshe@983: plupart des systèmes d'exploitation, ce qui rend facile l'utilisation youshe@983: immédiate de Mercurial sur votre ordinateur. belaran@964: belaran@973: belaran@973: Windows belaran@973: wilk@1005: La meilleure version de Mercurial pour Windows est youshe@983: TortoiseHg, qui peut être téléchargée ici : http://bitbucket.org/tortoisehg/stable/wiki/Home. andre@1015: Ce logiciel n'a aucune dépendance exterieure ; il fonctionne et youshe@983: c'est tout. Il fournit aussi bien les outils en ligne de youshe@983: commmande qu'une interface graphique. youshe@983: youshe@983: youshe@983: youshe@983: youshe@983: Mac OS X youshe@983: youshe@983: Lee Cantey publie un installeur de Mercurial pour Mac OS youshe@983: X sur http://mercurial.berkwood.com. youshe@983: youshe@983: youshe@983: youshe@983: Linux youshe@983: youshe@983: Parce que chaque distribution de Linux a ses propres youshe@983: outils de gestion de paquets, politiques et rythmes de youshe@983: développements, il est difficile de donner un ensemble youshe@983: d'instructions unique pour installer les binaires de Mercurial. La youshe@983: version de Mercurial avec laquelle vous vous retrouverez dépendra youshe@983: grandement de l'activité de la personne en charge du paquetage pour youshe@983: la distribution. youshe@983: youshe@983: Pour rester simple, je me concentrerai sur youshe@983: l'installation de Mercurial en ligne de commande, sous les youshe@983: distributions les plus courantes. La plupart des distributions youshe@983: fournissent des gestionnaires graphiques de paquetage qui vous youshe@983: permettront d'installer Mercurial en quelques clicks. Le paquetage youshe@983: devrait se nommer mercurial. youshe@983: youshe@983: andre@1015: Ubuntu et Debian : belaran@997: apt-get install mercurial andre@1015: Fedora : belaran@997: yum install mercurial andre@1015: Gentoo : youshe@983: emerge mercurial andre@1015: OpenSUSE : belaran@997: zypper install belaran@997: mercurial youshe@983: youshe@983: youshe@983: youshe@983: youshe@983: Solaris youshe@983: youshe@983: SunFreeWare, à http://www.sunfreeware.com, youshe@983: fournit des paquets précompilés pour Mercurial. youshe@983: youshe@983: belaran@973: belaran@973: belaran@973: Commencer à utiliser Mercurial belaran@973: youshe@983: Pour commencer, nous utiliserons la commande hg version pour vérifier si Mercurial est andre@1015: installé proprement. L'information de version affichée n'est andre@1015: pas réellement importante en soi, c'est surtout de savoir si elles youshe@983: s'affichent qui nous intéresse. youshe@983: youshe@983: &interaction.tour.version; youshe@983: youshe@983: youshe@983: L'aide intégrée youshe@983: belaran@997: Mercurial fournit un système d'aide intégré, ce qui est youshe@983: inestimable quand vous vous retrouvez coincé à essayer de vous youshe@983: rappeler comment lancer une commande. Si vous êtes bloqué, exécutez andre@1015: simplement hg help ; elle affichera youshe@983: une brève liste des commandes, avec une description pour chacune. Si youshe@983: vous demandez de l'aide sur une commande spécifique (voir youshe@983: ci-dessous), elle affichera des informations plus détaillées. youshe@983: youshe@983: &interaction.tour.help; youshe@983: youshe@983: Pour un niveau d'informations encore plus détaillé wilk@1005: (ce dont vous aurez rarement besoin), exécutez hg belaran@973: help . L'option belaran@973: est l'abréviation de belaran@973: , et indique à Mercurial wilk@1005: d'afficher plus d'informations que d'habitude. belaran@973: belaran@973: belaran@973: belaran@973: belaran@973: Travailler avec un dépôt belaran@973: wilk@1005: Avec Mercurial, tout se déroule au sein d'un belaran@973: dépôt. Le dépôt d'un projet contient tous belaran@973: les fichiers qui appartiennent au projet. belaran@973: belaran@973: Il n'y a rien de particulièrement magique au sujet de belaran@973: ce dépôt, c'est simplement une arborescence sur votre système de fichiers youshe@983: que Mercurial traite de manière spéciale. Vous pouvez renommer ou effacer andre@1015: ce répertoire à n'importe quel moment, en utilisant la ligne de commande belaran@973: ou votre explorateur de fichiers. belaran@973: belaran@973: belaran@973: Faire une copie locale de votre dépôt belaran@973: belaran@973: Copier un dépôt est juste un belaran@973: peu spécial. Bien que vous puissiez utiliser une commande habituelle de belaran@973: copie pour copier votre dépôt, il vaut mieux utiliser une commande fournie par belaran@973: Mercurial. Cette commande est appelée hg clone, belaran@973: car elle crée une copie identique à un dépôt existant. belaran@973: youshe@983: &interaction.tour.clone; youshe@983: youshe@983: Un avantage de la commande hg youshe@983: clone est que, comme nous l'avons vu ci dessus, elle nous wilk@1005: permet de cloner les dépôts à travers le réseau. Un autre youshe@983: est qu'elle se rappelle d'où a été cloné un dépôt, ce qui est utile youshe@983: quand on veut mettre à jour le clone. youshe@983: youshe@983: Si votre opération de clonage réussit, vous devriez maintenant belaran@973: avoir un répertoire local appelé hello. belaran@973: Ce répertoire contiendra quelques fichiers. belaran@973: youshe@983: &interaction.tour.ls; youshe@983: youshe@983: Ces fichiers ont le même contenu et historique dans votre dépôt youshe@983: qu'ils ont dans le dépôt que vous avez cloné. youshe@983: youshe@983: Chaque dépôt Mercurial est complet, autonome et youshe@983: indépendant. Il contient sa propre copie privée des fichiers du youshe@983: projet et de leur historique. Le clone d'un dépôt se souvient de la andre@1015: localisation du dépôt à partir duquel il a été cloné, mais il ne youshe@983: communique pas avec ce dernier, ou un autre, à moins que vous ne lui youshe@983: demandiez. youshe@983: andre@1015: Tout ceci signifie pour le moment que nous youshe@983: sommes libres d'expérimenter avec ce dépôt, confiants dans le fait youshe@983: qu'il s'agit d'un bac à sable qui n'affectera personne youshe@983: d'autre. belaran@973: belaran@973: belaran@973: belaran@973: Quel est le contenu d'un dépôt ? belaran@973: belaran@973: Prêtons plus attention un instant au contenu d'un dépôt. belaran@973: Nous voyons qu'il contient un répertoire nommé .hg belaran@973: . C'est ici que Mercurial conserve toutes ses belaran@973: métadonnées. belaran@973: youshe@983: &interaction.tour.ls-a; belaran@973: belaran@973: Le contenu du répertoire .hg andre@1015: et ses sous-répertoires sont les seuls propres à Mercurial. belaran@973: Tous les autres fichiers et répertoires dans le dépôt sont à vous, et belaran@973: vous pouvez en faire ce que vous voulez. belaran@973: belaran@973: Pour introduire un peu de terminologie, le répertoire belaran@973: .hg est un vrai belaran@973: dépôt, et tous les fichiers et les répertoires qui coexistent avec lui, belaran@973: sont désignés sous le nom espace de travail. Une belaran@973: manière facile de se rappeler cette distinction est de retenir que le belaran@973: dépôt contient l'historique belaran@973: de votre projet, alors que l'espace de travail belaran@973: contient un "snapshot" de votre projet à un certain belaran@973: point de son historique. belaran@973: belaran@973: belaran@973: belaran@973: belaran@973: Une promenade dans l'historique belaran@973: belaran@973: Une des premières choses que vous aurez envie belaran@973: de faire avec un nouveau dépôt, sera de comprendre son historique. belaran@973: La commande hg log vous donne une belaran@973: vue de l'historique. belaran@973: youshe@983: &interaction.tour.log; belaran@973: belaran@997: Par défaut, cette commande affiche à l'écran un bref paragraphe pour chaque belaran@973: révision enregistrée pour ce projet. Dans la terminologie de Mercurial, nous belaran@973: appelons chacun de ces évènements enregistrés un changeset, parce belaran@973: qu'il contient un ensemble de modifications sur plusieurs fichiers. belaran@973: belaran@973: La commande hg log affiche youshe@983: ainsi ces informations : belaran@973: belaran@973: youshe@983: changeset : Ce champ contient belaran@973: un nombre, séparé par deux points (:), d'une chaine hexadécimale. Il wilk@1005: s'agit en fait d'identifiants d'un changeset. Il y a wilk@1005: deux identifiants car le numéro de la révision est plus court et plus belaran@973: facile à saisir qu'une séquence hexadécimale. belaran@973: youshe@983: user : L'identité de la personne wilk@1005: qui a créé ce wilk@1005: changeset. C'est un champ libre de forme, mais la plupart du belaran@973: temps il contient le nom et l'email de la personne. belaran@973: youshe@983: date : La date et l'heure à wilk@1005: laquelle le changeset a été créé, ainsi que le fuseau horaire dans youshe@983: lequelle il a été créé. (La date et l'heure sont locales à ce wilk@1005: fuseau, elles indiquent donc quelle date et heure il était andre@1015: pour la personne qui a créé ce changeset.) belaran@973: andre@1015: summary: La première ligne du wilk@1005: message que le créateur a associé à son changeset pour le décrire. belaran@973: wilk@1005: Certains changesets, comme le premier de la youshe@983: liste ci-dessus ont un champ tag. Le tag est une autre youshe@983: façon d'identifier un changeset en lui donnant un nom simple à retenir. youshe@983: (Le tag nommé tip est spécial : il fait toujours andre@1015: référence au dernier changement dans le dépôt.) belaran@973: belaran@973: belaran@973: Par défaut, la commande hg log youshe@983: n'affiche qu'un résumé, il manque beaucoup de détails. belaran@973: belaran@973: La figure fournit une belaran@973: représentation graphique de l'historique du dépôt hello wilk@1005: , pour voir plus facilement dans quelle direction belaran@973: l'historique se déroule. Nous reviendrons régulièrement belaran@973: sur cette représentation dans ce chapitre et ceux qui suivent. belaran@973: belaran@973: belaran@973:
wilk@1005: Historique graphique du dépôt <filename wilk@1005: class="directory">hello</filename> belaran@973: belaran@973: belaran@973: XXX add text belaran@973: belaran@973:
belaran@973: belaran@973: belaran@973: belaran@973: Changesets, révisions, et collaboration belaran@973: youshe@983: Comme l'anglais est réputé pour être un langage maladroit, youshe@983: et que l'informatique est la source de bien des erreurs de terminologie youshe@983: (pourquoi utiliser un seul terme quand quatre feront l'affaire ?), la wilk@1005: gestion de révisions a une variété de mots et de phrases qui veulent dire youshe@983: la même chose. Si vous discutez d'historique de Mercurial avec d'autres youshe@983: personnes, vous constaterez que souvent, le mot changeset youshe@983: est contracté simplement en change ou (à l'écrit) wilk@1005: cset, et même parfois youshe@983: révision, abrégé en rev. belaran@973: belaran@973: Bien que le mot que vous utilisez pour belaran@973: désigner le concept de changeset importe peu, l'identifiant belaran@973: que vous utilisez pour désigner un changeset spécifique wilk@1005: a une grande importance. Rappelez vous que le champ changeset affiché par la wilk@1005: commande hg log identifie un changeset à youshe@983: la fois avec un numéro de révision et une séquence hexadécimale. belaran@973: belaran@973: belaran@973: Le numéro de révision est seulement belaran@973: valable dans ce dépôt, belaran@973: La séquence hexadécimale est un belaran@973: identifiant permanent, et invariant qui wilk@1005: pourra toujours être associé au changeset exact de chaque belaran@973: copie de votre dépôt. belaran@973: youshe@983: La distinction est importante. Si vous envoyez un email youshe@983: à quelqu'un en parlant de la révision 33, il est très wilk@1005: probable que sa révision 33 ne sera pas la même youshe@983: que la votre. La raison de ceci est que le numéro de révision dépend youshe@983: de l'ordre dans lequel les modifications sont arrivées dans le dépôt, youshe@983: et il n'y a aucune garantie que les mêmes changements soient arrivés youshe@983: dans le même ordre dans différents dépôts. Trois modifications wilk@1005: a, b, c peuvent aisément apparaitre dans un dépôt wilk@1005: comme 0, 1, 2, et dans un autre comme 0, 2, 1 youshe@983: . youshe@983: youshe@983: Mercurial utilise les numéros de révision uniquement comme des raccourcis wilk@1005: pratiques. Si vous devez discuter d'un changeset avec quelqu'un, wilk@1005: ou identifer un changeset pour une quelconque raison (par exemple, wilk@1005: un rapport de bug), utilisez la séquence hexadécimale. belaran@973: belaran@973: belaran@973: belaran@973: Afficher une révision spécifique belaran@973: belaran@973: Pour réduire la sortie de hg log belaran@973: à une seule révision, utilisez l'option (ou ). Vous pouvez utiliser belaran@973: le numéro de révision ou la séquence hexadécimale comme identifiant, et belaran@973: demander autant de révisions que vous le souhaitez. belaran@973: belaran@973: &interaction.tour.log-r; belaran@973: youshe@983: Si vous voulez voir l'historique de plusieurs révisions wilk@1005: sans avoir à les énumérer, vous pouvez utiliser un intervalle youshe@983: de numérotation qui vous permet d'exprimer l'idée je andre@1015: veux toutes les révisions entre abc et def andre@1015: inclus. youshe@983: youshe@983: &interaction.tour.log.range; youshe@983: youshe@983: Mercurial respecte aussi l'ordre dans lequel vous spécifiez youshe@983: les révisions, ainsi hg log -r 2:4 wilk@1005: affichera 2, 3, 4 alors que hg wilk@1005: log -r 4:2 affichera 4, 3, 2. belaran@973: belaran@973: belaran@973: belaran@973: Informations détaillées belaran@973: belaran@973: Le résumé affiché par hg log belaran@973: est suffisant si vous savez déjà ce que vous cherchez. En belaran@973: revanche, vous aurez probablement besoin de voir une description belaran@973: complète du changement, ou une liste des fichiers modifiés si vous wilk@1005: cherchez à déterminer qu'un changeset est bien celui que vous wilk@1005: recherchez. L'option de la commande hg belaran@973: log (ou ) vous belaran@973: donne ces informations supplémentaires. belaran@973: youshe@983: &interaction.tour.log-v; belaran@973: belaran@973: Si vous voulez voir à la fois la description wilk@1005: et le contenu d'une modification, ajoutez l'option (ou ). Ceci affiche le contenu d'une modification belaran@973: comme un diff unifié belaran@973: belaran@973: (si vous n'avez jamais vu de diff unifié avant, consultez la belaran@973: section pour un rapide belaran@973: survol). belaran@973: belaran@973: &interaction.tour.log-vp; belaran@973: youshe@983: L'option est andre@1015: incroyablement utile, il est donc important dans s'en rappeler. belaran@973: belaran@973: belaran@973:
belaran@973: belaran@973: Tout sur les options de commandes belaran@973: belaran@973: Avant d'aller plus loin sur le fonctionnement belaran@973: des commandes de Mercurial, étudions un moment comment elles belaran@973: fonctionnent de manière générale. Vous trouverez ça probablement belaran@973: utile pour la suite de notre parcours. belaran@973: belaran@973: Mercurial utilise une approche directe et cohérente youshe@983: pour interpréter les options que vous passez aux commandes. Il suit une youshe@983: convention commune à la plupart des systèmes Unix et Linux modernes. belaran@973: belaran@973: belaran@973: Chaque option a un nom complet. Par exemple, belaran@973: comme nous l'avons déjà vu, la commande hg belaran@973: log accepte l'option . belaran@973: belaran@973: La plupart des options disposent de belaran@973: noms abrégés. Aussi, au lieu d'utiliser , vous pouvez utiliser . wilk@1005: (Les options qui n'ont pas de nom abrégé sont généralement belaran@973: rarement utilisées). belaran@973: belaran@973: Les noms complets commencent par deux andre@1015: tirets (par exemple ), andre@1015: alors que les options courtes commencent avec un seul (par exemple belaran@973: ). belaran@973: belaran@973: Les noms des options sont cohérents belaran@973: entre les commandes. Par exemple, chaque commande qui accepte wilk@1005: un changeset ID ou un numéro de révision accepte aussi et comme arguments. belaran@973: belaran@973: belaran@973: belaran@973: Dans les exemples de ce livre, j'utilise les noms abrégés belaran@973: plutôt que les noms complets. Ceci est une préférence personnelle, pas belaran@973: une recommandation. belaran@973: belaran@973: La plupart des commandes qui affichent une quelconque sortie belaran@973: à l'écran, afficheront davantage avec l'option (ou ), et belaran@973: moins avec l'option (ou belaran@973: ). belaran@973: belaran@973: wilk@1005: Cohérence dans le nom des options belaran@973: youshe@983: Presque toujours, les commandes de Mercurial utilisent wilk@1005: des noms d'options cohérentes pour se référer à des concepts identiques. wilk@1005: Par exemple, si une commande concerne les changesets, vous les youshe@983: identifierez toujours avec l'option . youshe@983: Cette utilisation cohérente des noms d'options permet de mémoriser plus wilk@1005: facilement quelles options acceptent une commande. belaran@973: belaran@973: belaran@973: belaran@973: belaran@973: belaran@973: Faire et vérifier des modifications belaran@973: belaran@973: Maintenant que nous avons une bonne idée des belaran@973: commandes pour consulter l'historique de Mercurial, regardons belaran@973: comment faire des modifications et les examiner. belaran@973: wilk@1005: La première chose que nous allons faire est d'isoler notre wilk@1005: exercice dans un dépôt à part. Nous allons utiliser la commande hg clone, mais nous n'avons pas besoin de faire youshe@983: une copie de dépôt distant. Comme nous avons déjà une copie locale, nous youshe@983: pouvons juste faire un clone de celle-ci à la place. C'est beaucoup plus youshe@983: rapide que de faire une copie à travers le réseau, et un dépôt cloné youshe@983: localement prend également moins d'espace disque youshe@983: L'économie d'espace disque apparait clairement quand les youshe@983: dépôts source et destination sont sur le même système de fichier, où, dans youshe@983: ce cas, Mercurial utilisera des liens physiques pour effectuer des partages youshe@983: copie-lors-des-écritures de ses métadonnées internes. Si cette explication andre@1015: ne signifie rien pour vous, ne vous inquiétez pas : tout ceci se passe de wilk@1005: manière transparente et automatique. Vous n'avez pas du tout besoin de youshe@983: comprendre ceci.. youshe@983: youshe@983: &interaction.tour.reclone; youshe@983: youshe@983: On notera au passage qu'il est souvent considéré comme youshe@983: une bonne pratique de conserver une copie immaculée youshe@983: du dépôt distant, à partir de laquelle vous pourrez faire des youshe@983: copies locales temporaires pour créer des bacs à sable youshe@983: pour chaque tâche sur laquelle vous souhaitez travailler. Ceci youshe@983: vous permet de travailler sur plusieurs choses en parallèle, wilk@1005: chacunes isolées les unes des autres en attendant que ces tâches youshe@983: soient finies et que vous soyez prêt à les réintégrer. Parce youshe@983: que les copies locales sont peu coûteuses, il est très rapide youshe@983: de créer ou détruire des dépôts dès que vous n'en avez plus youshe@983: besoin. youshe@983: youshe@983: Dans notre dépôt my-hello, nous avons un fichier youshe@983: hello.c qui contient le classique hello, youshe@983: world. youshe@983: youshe@983: &interaction.tour.cat1; youshe@983: andre@1015: Éditons ce fichier pour qu'il affiche une autre ligne youshe@983: sur la sortie standard. youshe@983: youshe@983: &interaction.tour.cat2; youshe@983: youshe@983: La commande Mercurial hg youshe@983: status nous dira ce que Mercurial sait des fichiers du youshe@983: dépôts. youshe@983: youshe@983: &interaction.tour.status; youshe@983: youshe@983: La commande hg status youshe@983: n'affichera pas le contenu des fichiers, mais une ligne commençant par youshe@983: M pour hello.c. andre@1015: À moins que vous lui demandiez, la commande hg youshe@983: status n'affichera aucune information sur les fichiers que youshe@983: vous n'avez pas modifiés. youshe@983: belaran@997: Le M indique que youshe@983: Mercurial a remarqué que nous avons modifié le fichier youshe@983: hello.c. Nous n'avons pas besoin youshe@983: d'informer Mercurial que nous allons modifier un youshe@983: fichier avant de commencer à le faire, ou que nous avons modifié un wilk@1005: fichier après avoir commencé à le faire, il est capable de le découvrir wilk@1005: tout seul. youshe@983: youshe@983: C'est déjà pratique de savoir que nous avons modifié le youshe@983: fichier hello.c, mais nous préférerions savoir youshe@983: exactement ce que nous avons changé. Pour ceci, nous youshe@983: utilisons la commande hg diff. youshe@983: youshe@983: &interaction.tour.diff; youshe@983: youshe@983: youshe@983: Comprendre les patches youshe@983: youshe@983: Penser à jeter un oeil à si vous n'arrivez pas à lire la sortie youshe@983: ci-dessus. youshe@983: youshe@983: youshe@983: andre@1015: Enregistrer vos modifications dans une nouvelle révision youshe@983: youshe@983: Nous pouvons modifier des fichiers, compiler et tester youshe@983: nos modifications, et utiliser les commandes hg youshe@983: status et hg diff pour youshe@983: voir les modifications effectuées, jusqu'à ce que nous soyons assez youshe@983: satisfaits pour décider d'enregistrer notre travail dans un wilk@1005: changeset. youshe@983: youshe@983: La commande hg commit youshe@983: vous laisse créer une nouvelle révision, nous désignerons généralement youshe@983: cette opération par faire un commit ou andre@1015: commiter. youshe@983: youshe@983: youshe@983: Définir le nom d'utilisateur youshe@983: youshe@983: Quand vous exécutez la commande hg commit pour la première fois, il n'est youshe@983: pas garanti qu'elle réussisse du premier coup. En effet, Mercurial youshe@983: enregistre votre nom et votre adresse avec chaque modification que youshe@983: vous effectuez, de manière à ce que vous soyez capable (ou d'autres wilk@1005: le soient) de savoir qui a fait telle modification. Mercurial essaye youshe@983: automatiquement de découvrir un nom d'utilisateur qui ait un minimum wilk@1005: de sens pour effectuer l'opération de commit avec. Il va essayer youshe@983: chacune des méthodes suivantes, dans l'ordre : youshe@983: youshe@983: youshe@983: Si vous spécifiez l'option avec la commande hg commit, suivi d'un nom youshe@983: d'utilisateur, ceci aura toujours la priorité sur les autres youshe@983: méthodes ci dessous. youshe@983: Si vous avez défini une variable youshe@983: d'environnement HGUSER, c'est cette valeur qui est youshe@983: alors utilisée. youshe@983: Si vous créez un fichier nommé .hgrc dans votre répertoire youshe@983: \textit{home}, avec une entrée username, c'est la valeur associée youshe@983: qui sera utilisée. Pour voir à quoi ressemble le contenu de ce youshe@983: fichier regardez la section youshe@983: ci-dessous. youshe@983: Si vous avez défini une variable youshe@983: d'environnement EMAIL celle ci sera utilisée youshe@983: ensuite. youshe@983: Enfin, Mercurial interrogera votre système youshe@983: pour trouver votre nom d'utilisateur local ainsi que le nom de la youshe@983: machine hôte, et il fabriquera un nom d'utilisateur à partir de wilk@1005: ces données. Comme il arrive souvent que ce genre de nom soit youshe@983: totalement inutile, il vous préviendra en affichant un message youshe@983: d'avertissement. youshe@983: youshe@983: youshe@983: Si tous ces mécanismes échouent, Mercurial n'exécutera youshe@983: pas la commande, affichant un message d'erreur. Dans ce cas, il ne wilk@1005: vous laissera pas effectuer de commit tant que vous n'aurez pas youshe@983: défini un nom d'utilisateur. youshe@983: youshe@983: Vous devriez penser à utiliser la variable youshe@983: d'environement HGUSER et l'option comme moyen pour youshe@983: changer le nom d'utilisateur par défaut. Pour youshe@983: une utilisation normale, la manière la plus simple et robuste youshe@983: d'opérer est de créer un fichier .hgrc, voir ci-dessous pour les détails youshe@983: à ce sujet. youshe@983: youshe@983: youshe@983: Créer un fichier de configuration pour Mercurial youshe@983: youshe@983: Pour définir un nom d'utilisateur, utilisez votre youshe@983: éditeur de texte favori pour créer un fichier .hgrc dans votre répertoire home. youshe@983: Mercurial va utiliser ce fichier pour retrouver votre youshe@983: configuration personnelle. Le contenu initial devrait youshe@983: ressembler à ceci : youshe@983: youshe@983: youshe@983: <quote>Home directory</quote> sous Windows youshe@983: wilk@1005: Quand on parle de répertoire home, sur une version youshe@983: anglaise d'une installation de Windows, il s'agira habituellement youshe@983: d'un répertoire nommée comme votre nom dans C:\Documents andre@1015: and Settings. Vous pouvez trouver de quel répertoire youshe@983: il s'agit en lançant une fenêtre d'interpréteur de commande et en youshe@983: exécutant la commande suivante : belaran@973: youshe@983: C:\ echo youshe@983: %UserProfile youshe@983: youshe@983: youshe@983: # This is a Mercurial configuration file. belaran@973: [ui] belaran@973: username = Firstname Lastname <email.address@domain.net> belaran@973: youshe@983: La ligne avec [ui] commence une youshe@983: section du fichier de configuration, ainsi la ligne youshe@983: username = ... signifie youshe@983: définir la valeur de l'élément username dans la youshe@983: section ui. Une section continue jusqu'à ce youshe@983: qu'une nouvelle commence, ou que la fin du fichier soit atteinte. youshe@983: Mercurial ignore les lignes vides et traite tout texte situé à la suite youshe@983: d'un # jusqu'à la fin de la ligne youshe@983: comme un commentaire. belaran@973: belaran@973: belaran@973: belaran@973: Choisir un nom d'utilisateur youshe@983: youshe@983: Vous pouvez utiliser n'importe quelle valeur youshe@983: pour votre username, car cette information youshe@983: est destinée à d'autres personnes et non à être interprétée youshe@983: par Mercurial. La convention que la plupart des personnes wilk@1005: suivent est d'utiliser leur nom suivie de leur adresse email, youshe@983: comme montré ci-dessus : youshe@983: youshe@983: Le mécanisme interne du serveur web intégré à Mercurial, youshe@983: masque les adresses emails, pour rendre plus difficile leurs youshe@983: récupérations par les outils utilisés par les spammmers. youshe@983: Ceci réduit la probabilité que de recevoir encore plus de youshe@983: spam si vous vous publiez un dépôt sur internet. youshe@983: youshe@983: youshe@983: youshe@983: wilk@1005: Rédiger un message de <quote>commit</quote> wilk@1005: wilk@1005: Lorsqu'on effectue une opération de commit, Mercurial youshe@983: lance automatiquement un éditeur de texte pour permettre de saisir youshe@983: un message qui décrira les modifications effectuées dans cette youshe@983: révision. Ce message est nommé le message de commit. youshe@983: Ce sera un enregistrement pour tout lecteur expliquant le pourquoi youshe@983: et le comment de vos modifications, et il sera affiché par la youshe@983: commande hg log. youshe@983: youshe@983: &interaction.tour.commit; youshe@983: youshe@983: L'éditeur que la commande hg youshe@983: commit déclenche ne contiendra qu'une ligne vide suivi youshe@983: d'un certain nombre de lignes commençant par HG: youshe@983: . youshe@983: youshe@983: belaran@973: This is where I type my commit comment. belaran@973: belaran@973: HG: Enter commit message. Lines beginning with 'HG:' are removed. belaran@973: HG: -- belaran@973: HG: user: Bryan O'Sullivan <bos@serpentine.com> belaran@973: HG: branch 'default' belaran@973: HG: changed hello.c belaran@973: belaran@973: youshe@983: Mercurial ignore les lignes qui commencent youshe@983: avec HG:, il ne les youshe@983: utilise que pour nous indiquer quels fichiers modifiés il se wilk@1005: prépare à commiter. Modifier ou effacer ces lignes n'a wilk@1005: aucune conséquence sur l'opération de commit. youshe@983: youshe@983: youshe@983: youshe@983: wilk@1005: Rédiger un message approprié youshe@983: youshe@983: Comme hg log n'affiche wilk@1005: que la première ligne du message de commit par défaut, il est souvent wilk@1005: considéré comme une bonne pratique de rédiger des messages de commit youshe@983: qui tiennent sur une seule ligne. Voilà un exemple concret de message wilk@1005: de commit qui ne suit pas cette directive, et youshe@983: qui a donc un résumé peu lisible. youshe@983: youshe@983: belaran@973: changeset: 73:584af0e231be belaran@973: user: Censored Person <censored.person@example.org> belaran@973: date: Tue Sep 26 21:37:07 2006 -0700 belaran@973: summary: include buildmeister/commondefs. Add an exports and install youshe@983: youshe@983: andre@1015: À ce sujet, il faut noter qu'il n'existe pas de règle youshe@983: absolue dans ce domaine. Mercurial lui-même n'interprète pas les wilk@1005: contenus des messages de commit, ainsi votre projet est libre de youshe@983: concevoir différentes politiques de mise en page des messages. youshe@983: youshe@983: Ma préférence personnelle va au message court, mais youshe@983: informatif, qui offre des précisions supplémentaires par rapport à ce youshe@983: que pourrait m'apprendre une commande hg log youshe@983: --patch. youshe@983: youshe@983: Si vous exécutez la commande hg youshe@983: commit sans aucun argument, elle enregistre tous les youshe@983: changements qui ont été fait, et qui sont indiqué par les commandes youshe@983: hg status et hg diff. youshe@983: youshe@983: youshe@983: Une surprise pour les utilisateurs habitués à Subversion youshe@983: youshe@983: Comme n'importe quel autre commande de Mercurial, si wilk@1005: vous ne soumettez pas de manière explicite les noms des fichiers à andre@1015: commiter à la commande hg commit, elle youshe@983: va travailler sur l'ensemble du répertoire de travail. Soyez conscient youshe@983: de ceci si vous venez du monde Subversion ou CVS, car vous pourriez andre@1015: vous attendre à ce qu'elle opère uniquement sur le répertoire courant et ses andre@1015: sous-répertoires. youshe@983: youshe@983: youshe@983: wilk@1005: Annuler un <quote>commit</quote> belaran@973: belaran@973: Si, en rédigeant le message, vous décidez que wilk@1005: finalement vous ne voulez pas effectuer ce commit, il suffit wilk@1005: de quitter simplement l'éditeur sans sauvegarder. Ceci n'aura aucune belaran@973: conséquence sur le dépôt ou les fichiers du répertoire de belaran@973: travail. youshe@983: youshe@983: youshe@983: youshe@983: Admirer votre travail youshe@983: wilk@1005: Une fois que votre commit est terminé, vous youshe@983: pouvez utiliser la commande hg tip wilk@1005: pour afficher le changeset que vous venez de créer. Cette wilk@1005: commande produit une sortie à l'écran qui est identique à celle du youshe@983: hg log, mais qui n'affiche que la youshe@983: dernière révision du dépôt. youshe@983: youshe@983: &interaction.tour.tip; youshe@983: youshe@983: On fait couramment référence à la dernière révision youshe@983: du dépôt comme étant la révision tip, ou plus youshe@983: simplement le tip. youshe@983: youshe@983: Au passage, la commande hg youshe@983: tip accepte la plupart des options qu'accepte youshe@983: hg log. Ainsi ci-dessus implique soit andre@1021: verbeux, andre@1021: veut dire affiche le patch. L'utilisation de l'option belaran@973: pour afficher un patch est un belaran@973: autre exemple de la cohérence des commandes évoquée plus tôt. belaran@973: belaran@973: belaran@973: belaran@973: belaran@973: Partager ses modifications belaran@973: belaran@997: Nous avons mentionné plus haut que les dépôts youshe@983: de Mercurial sont autosuffisants. Ce qui signifie que la nouvelle youshe@983: révision que vous venez de créer existe seulement dans votre youshe@983: répertoire my-hello. Étudions youshe@983: comment propager cette modification dans d'autres dépôts. belaran@973: belaran@973: belaran@973: Récupérer les modifications d'autres dépôts belaran@973: belaran@997: Pour commencer, construisons un clone de notre dépôt youshe@983: hello qui ne contiendra pas youshe@983: le changement que nous venons d'effectuer. Nous l'appellerons notre youshe@983: dépôt temporaire hello-pull. youshe@983: youshe@983: &interaction.tour.clone-pull; youshe@983: youshe@983: Nous allons utiliser la commande hg pull pour envoyer les modifications youshe@983: depuis my-hello dans hello-pull. Néanmoins, récupérer youshe@983: aveuglement des modifications depuis un dépôt a quelque chose d'un youshe@983: peu effrayant. Mercurial propose donc une commande hg incoming qui permet de savoir quelles youshe@983: modifications la commande hg pull youshe@983: pourrait entraîner dans notre dépôt, et ceci youshe@983: sans effectuer réellement de modification dessus. belaran@973: belaran@973: &interaction.tour.incoming; youshe@983: youshe@983: Apporter les modifications rapatriées dans un dépôt se youshe@983: résume donc à exécuter la commande hg youshe@983: pull, et préciser depuis quel dépôt effectuer le hg pull. youshe@983: youshe@983: &interaction.tour.pull; youshe@983: youshe@983: Comme vous le voyez avec une sortie avant et après de la youshe@983: commande hg tip, nous avons réussi à youshe@983: récupérer aisément les modifications dans notre dépôt. Il reste néanmoins wilk@1005: quelque chose à faire avant de retrouver ces modifications dans l'espace de youshe@983: travail. youshe@983: youshe@983: youshe@983: Récupérer des changements précis youshe@983: youshe@983: Il est possible à cause du délai entre l'exécution de la youshe@983: commande hg incoming et l'exécution de youshe@983: la commande hg pull, que vous ne youshe@983: puissiez pas voir toutes les modifications que vous rapporterez d'un youshe@983: autre dépôt. Supposons que vous récupériez les modifications d'un dépôt youshe@983: situé quelque part sur le réseau. Alors que vous regardez le résultat de youshe@983: la commande hg incoming, et avant que youshe@983: vous ne décidiez de récupérer ces modifications, quelqu'un peut ajouter youshe@983: de nouvelles révisions dans le dépôt distant. Ce qui signifie que vous wilk@1005: récupérez plus de révisions que ce que vous aviez regardées en utilisant youshe@983: la commande hg incoming. youshe@983: youshe@983: Si vous voulez seulement récupérer ce que vous aviez wilk@1005: vérifié à l'aide de la commande hg wilk@1005: incoming, ou que pour d'autres raisons vous ne souhaitiez youshe@983: récupérer qu'un sous ensemble des révisions supplémentaires wilk@1005: disponibles, indiquez simplement les modifications que vous souhaitez youshe@983: récupérer par leurs ID de révision, soit hg pull youshe@983: -r7e95bb. youshe@983: youshe@983: youshe@983: youshe@983: youshe@983: Mise à jour de l'espace de travail youshe@983: youshe@983: Nous avons jusqu'à maintenant grossièrement défini la youshe@983: relation entre un dépôt et un espace de travail. La commande hg pull que nous avons exécutée dans la section youshe@983: a apporté des modifications, que nous youshe@983: avons vérifiées, dans notre dépôt, mais il n'y a aucune trace de ces youshe@983: modifications dans notre espace de travail. En effet, hg pull ne touche pas (par défaut) à l'espace youshe@983: de travail. C'est la commande hg update youshe@983: qui s'en charge. youshe@983: youshe@983: &interaction.tour.update; youshe@983: youshe@983: Il peut sembler un peu étrange que la commande hg pull ne mette pas à jour l'espace de travail youshe@983: automatiquement. Il y a en fait une très bonne raison à cela : vous wilk@1005: pouvez utiliser la commande hg update youshe@983: pour mettre à jour votre espace de travail à l'état dans lequel il était youshe@983: à n'importe quelle révision de l'historique du dépôt. youshe@983: Si vous aviez un espace de travail contenant une ancienne youshe@983: révision&emdash;pour chercher l'origine d'un bug, par exemple&emdash;et youshe@983: que vous effectuiez un hg pull qui youshe@983: mettrait à jour automatiquement votre espace de travail, vous ne seriez youshe@983: probablement pas très satisfait. youshe@983: youshe@983: Néanmoins, comme les opérations de pull sont très souvent youshe@983: suivies d'un update, Mercurial vous permet de combiner les youshe@983: deux aisément en passant l'option youshe@983: à la commande hg pull. youshe@983: youshe@983: Si vous étudiez de nouveau la sortie de la commande hg pull dans la section quand nous l'avons exécutée sans l'option youshe@983: , vous pouvez constater qu'elle a youshe@983: affiché un rappel assez utile : vous devez encore effectuer une youshe@983: opération pour mettre à jour votre espace de travail. youshe@983: youshe@983: Pour découvrir sur quelle révision de l'espace de youshe@983: travail on se trouve, utilisez la commande hg youshe@983: parents. youshe@983: youshe@983: &interaction.tour.parents; youshe@983: youshe@983: Si vous regardez de nouveau le dessin , vous verrez les flèches reliant youshe@983: entre elles les révisions. Le nœud d'où la flèche youshe@983: part est dans chaque cas un parent, youshe@983: et le nœud où la flèche arrive est un youshe@983: enfant. youshe@983: youshe@983: Pour mettre à jour l'espace de travail d'une révision wilk@1005: particulière, indiquez un numéro de révision ou un changeset andre@1020: ID à la commande hg update. youshe@983: youshe@983: &interaction.tour.older; youshe@983: youshe@983: Si vous ne précisez pas de manière explicite de numéro youshe@983: de révision la commande hg update youshe@983: mettra à jour votre espace de travail avec le contenu de la révison andre@1015: tip, comme montré dans l'exemple ci-dessus lors du second youshe@983: appel à hg update. youshe@983: youshe@983: youshe@983: youshe@983: Transférer les modifications vers un autre dépôt youshe@983: youshe@983: Mercurial vous laisse transférer les modifications vers youshe@983: un autre dépôt, depuis votre dépôt actuel. Comme dans l'exemple du youshe@983: hg pull ci-dessus, nous allons créer youshe@983: un dépôt temporaire vers lequel transférer nos modifications. youshe@983: youshe@983: &interaction.tour.clone-push; youshe@983: youshe@983: La commande hg outgoing youshe@983: nous indique quels changements nous allons transférer vers l'autre youshe@983: serveur. youshe@983: youshe@983: &interaction.tour.outgoing; youshe@983: youshe@983: Et la commande hg push youshe@983: effectue réellement le transfert. youshe@983: youshe@983: &interaction.tour.push; youshe@983: youshe@983: Comme avec hg pull, la youshe@983: commande hg push ne met pas à jour youshe@983: le répertoire de travail du dépôt dans lequel il transfère les youshe@983: modifications. À l'inverse de hg youshe@983: pull, hg push ne fournit youshe@983: pas d'option -u pour forcer la mise à jour de youshe@983: l'espace de travail cible. Cette asymétrie est délibéré : le dépot youshe@983: vers lequel nous transférons peut très bien être un serveur distant youshe@983: et partagé par plusieurs personnes. Si nous devions mettre à jour son youshe@983: répertoire de travail alors que quelqu'un d'autre travaille dessus, youshe@983: nous risquerions de perturber son travail. youshe@983: andre@1015: Que se passe-t-il lorsque vous essayez de récupérer youshe@983: ou de transférer vos modifications et que le dépôt cible a déjà reçu youshe@983: ces modifications ? Rien de bien excitant. youshe@983: youshe@983: &interaction.tour.push.nothing; youshe@983: youshe@983: youshe@983: youshe@983: youshe@983: Emplacements par défaut youshe@983: youshe@983: Quand nous faisons un clone d'un dépôt, Mercurial youshe@983: enregistre l'emplacement du dépôt d'origine dans le fichier youshe@983: .hg/hgrc de notre nouveau dépôt. Si nous ne youshe@983: fournissons pas d'emplacement à la commande hg youshe@983: pull ou à la commande hg push, ces youshe@983: commandes utiliseront alors cet emplacement comme valeur par défaut. youshe@983: Les commandes hg incoming et hg youshe@983: outgoing feront de même. youshe@983: youshe@983: Si vous regardez le fichier youshe@983: .hg/hgrc, vous constaterez que son contenu youshe@983: ressemble à ce qui suit. youshe@983: youshe@983: [paths] belaran@973: default = http://www.selenic.com/repo/hg belaran@973: youshe@983: Il est possible&emdash;et souvent youshe@983: pratique&emdash;d'avoir un emplacement par défaut pour les commandes youshe@983: hg push et hg outgoing youshe@983: différent de celui des commandes hg pull et youshe@983: hg incoming. C'est faisable en ajoutant une entrée youshe@983: default-push à la section youshe@983: [paths] du .hg/hgrc, comme youshe@983: suit. youshe@983: youshe@983: [paths] belaran@973: default = http://www.selenic.com/repo/hg belaran@973: default-push = http://hg.example.com/hg youshe@983: youshe@983: youshe@983: youshe@983: Partager ses modifications à travers le réseau youshe@983: youshe@983: Les commandes que nous avons étudiées dans les sections youshe@983: précédentes ne sont pas limitées aux dépôts locaux. Chacune fonctionne youshe@983: de la même manière à travers une connexion réseau, il suffit de lui youshe@983: passer une URL à la place d'un chemin de fichier local. youshe@983: youshe@983: &interaction.tour.outgoing.net; youshe@983: youshe@983: Dans cet exemple, nous allons voir quels changements wilk@1005: nous pourrions transférer vers le dépôt distant, mais le dépôt n'est, youshe@983: de manière tout à fait compréhensible, pas configuré pour accepter youshe@983: des modifications d'utilisateurs anonymes. youshe@983: youshe@983: &interaction.tour.push.net; youshe@983: youshe@983: youshe@983: belaran@973: belaran@973: belaran@973: youshe@983: Commencer un nouveau projet youshe@983: youshe@983: Il est tout aussi aisé de commencer un nouveau projet youshe@983: que de travailler sur un qui existe déjà. La commande hg youshe@983: init crée un nouveau dépôt Mercurial vide. youshe@983: youshe@983: &interaction.ch01-new.init; youshe@983: youshe@983: Ceci crée simplement un répertoire nommé youshe@983: myproject dans le répertoire courant. youshe@983: youshe@983: &interaction.ch01-new.ls; youshe@983: youshe@983: Nous pouvons dire que myproject est youshe@983: un dépôt Mercurial car il contient un répertoire youshe@983: .hg. youshe@983: youshe@983: &interaction.ch01-new.ls2; youshe@983: youshe@983: Si vous voulons ajouter quelques fichiers préexistants youshe@983: dans ce dépôt, il suffit de les recopier dans le répertoire de travail, youshe@983: et demander à Mercurial de commencer à les suivre en utilisant la youshe@983: commande hg add. youshe@983: youshe@983: &interaction.ch01-new.add; youshe@983: youshe@983: Une fois que nous sommes satisfaits de notre projet, youshe@983: nous pouvons commencer à ajouter nos révisions. youshe@983: youshe@983: &interaction.ch01-new.commit; youshe@983: youshe@983: Il ne prend que quelques instants pour commencer à belaran@973: utiliser Mercurial sur un nouveau projet, ce qui fait aussi de ses belaran@973: points forts. Travailler avec une gestion de révision devient très belaran@973: facile, nous pouvons même l'utiliser pour les plus petits projets où wilk@1005: nous aurions probablement jamais pensé utiliser un outil aussi belaran@973: complexe. youshe@983: belaran@964:
belaran@964: belaran@964: