Les bases de Mercurial

par 2 contributeurs :
« I am about to tell you some stuff about Mercurial that will save you a lot of frustration. This page is cynical and survival-oriented. But I still claim Mercurial is a lot better than CVS. » —jorendorff 16:06, 12 May 2008 (PDT)
« Je vais vous expliquer certaines choses à propos de Mercurial qui vous éviteront beaucoup de frustration. Cette page est cynique et ressemble à un manuel de survie. Mais j'affirme toujours que Mercurial est bien supérieur à CVS.  » —jorendorff à 16:06, le 12 mai 2008 (PDT)

Attentes

Mercurial n'est pas CVS. Les commandes sont différentes. Les concepts sont différents.

C'est un fusil chargé. Vous pouvez vous tirer dans le pied. Vous pouvez perdre votre travail. L'outil essaie de vous protéger, mais ça peut toujours arriver. Les deux types de ratages habituels sont : (a) vous lancez une commande sans savoir ce qu'elle va faire ; (b) vous lancez hg commit ou hg qrefresh en comprenant mal l'état de votre répertoire de travail. Vous soumettez ainsi accidentellement des modifications que vous ne vouliez pas publier ; ou vous soumettez accidentellement une mauvaise fusion ; etc. On voit rarement immédiatement que quelque chose ne va pas.

Mieux vaut prévenir que guérir. Ne faites pas ces erreurs. Ne lancez pas de commandes sans savoir ce qu'elles feront ; hg help est votre ami. Ne faites pas un commit sans comparer et réfléchir. Et ne vous laissez pas entrainer dans un « mode jeu » en arrêtant de faire attention au fait que vous jouez avec votre travail non enregistré.

Mercurial n'est pas de la poudre magique. Mercurial est flexible, puissant et amusant. Il vous laisse essayer des choses que vous n'auriez jamais tentées avec CVS. Mais évidemment toutes les idées ne sont pas bonnes en définitive. (Par exemple, on a essayé de partager les files de patchs. Ça ne marchait pas vraiment.)

Prévention des ennuis

Utilisez Mercurial 1.0 ou plus récent. (hg version pour vérifier.)

Apprenez à vous repérer. Utilisez des commandes en lecture seule (comme hg status, hg head, hg parents, hg log ou hg diff) pour vérifier l'état de votre référentiel. C'est une compétence indispensable.

Configurez un programme de fusion (merge program) et assurez-vous de savoir l'utiliser. FAITES-LE MAINTENANT. Autrement, vous allez sans doute détruire votre référentiel à un moment ou à un autre.

CVS laisse parfois des marqueurs de conflits dans vos fichiers. Mercurial ne le fait pas : à la place il vous demande de régler les conflits immédiatement, en utilisant un programme de fusion (comme kdiff3) qu'il lancera pour vous.

Ce comportement peut être la cause de beaucoup d'erreurs. Par défaut, Mercurial utilise le premier outil de fusion qu'il trouve sur votre système, et la plupart de ceux-ci sont assez difficiles à utiliser correctement. Mercurial n'est pas doué pour détecter les fusions ratées et refuser de continuer, vous pourriez donc vous mettre dans de sales draps rien qu'en fermant une fenêtre. Même des grandes personnes fuient souvent les arbres hg contenant de nombreuses heures de travail, en citant des comportements inexplicables de hg, à cause d'une fusion ratée.

Si une fusion échoue, assurez-vous que Mercurial sache que la fusion a échoué. Lorsque vous êtes encore en apprentissage, les fusions se passent souvent mal. Vous pourriez voir ce message :

0 files updated, 0 files merged, 0 files removed, 1 files unresolved
There are unresolved merges, you can redo the full merge using:
  hg update -C 2
  hg merge 1

Ceci signifie que certains conflits n'ont pas été résolus au cours de la fusion. Si vous ne savez pas exactement en quoi ils consistent et comment les corriger, utilisez la commande hg update -C pour avertir Mercurial que vous voulez laisser tomber cette fusion.

Si vous ne le faites pas, Mercurial ne le saura pas et à votre prochain commit, il fera la fusion. C'est très mauvais. Le résultat peut ressembler très fort à la destruction accidentelle d'une grosse quantité de travail en fait, mais les dommages peuvent être réparés.

Si hg parents montre deux parents, vous êtes en mode de fusion.

Si vous utilisez des files Mercurial (Mercurial Queues), sauvegardez votre travail. hg qrefresh remplace l'ancien patch par le nouveau de manière destructive ! Utilisez hg qinit -c pour créer un référentiel de secours séparé pour vos patchs et lancez hg qcommit -m backup régulièrement.

N'utilisez pas de files Mercurial dans un référentiel que quelqu'un pourrait importer.

Récupération

Oups ! Mercurial vous a coupé un bras !

N'essayez pas des trucs au hasard pour voir si les choses vont se corriger miraculeusement. Souvenez-vous de ce que vous avez à perdre, et reposez la tronçonneuse tant que vous avez encore un bras valide.

Demandez de l'aide sur IRC. Essayez sur #hg ou #developers sur l'IRC de Mozilla, ou #mercurial sur freenode.

 

Étiquettes et contributeurs liés au document

Contributeurs à cette page : Jean-S, BenoitL
Dernière mise à jour par : Jean-S,