Mercurial

Mercurial est un Système de Gestion de Versions. Il entre dans le trio de tête des SCM (Software configuration management) les plus utilisés avec Subversion(svn) et git.

hg

Il fait partie des systèmes de gestion décentralisée, voir la fiche complète sur Wikipédia - Mercurial.

**La documentation officielle

 Le wiki de Selenic.com - Mercurial
 Le livre, Mercurial : The Definitive Guide

Un site un peu plus sexy est en préparation Mercurial SCM

**La documentation française

 La catégorie CategoryFrench sur le wiki officiel
 Un cookbook en français sur Mercurial - Adrien Herubel
 Quelques rappels pour les développeurs Mozilla, mais c’est valable pour tout le monde ! Les bases de Mercurial - MDC
 Introduction à Mercurial - developpez.com
 Howto Mercurial : Petit guide de survie de la gestion de version
 Un tutorial qui a eu lieu lors de pyconfr 2012 : Introduction à la gestion de version avec Mercurial

Sur les blogs francophones :
 Tag - Mercurial - ka.da
 Introduction à Mercurial - developpez.com

**Autres documentations

 Hg Init : a Mercurial tutorial by Joel Spolsky Magnifiquement illustré.
 25 Tips for Intermediate Mercurial Users - antonym

**hébergement

bitbucket.org offre un hébergement de dépôt Mercurial associé à un wiki et un système de gestion de bug. (à la trac)

Une liste d’hébergements est disponible sur le wiki officiel : MercurialHosting - Mercurial

logo mercurial

Trucs et astuces

**Récupérer une partie d’un dépôt

Lorsque l’on regroupe dans un dépôt beaucoup de petits scripts, il arrive parfois que l’un de ceux-ci grandisse et devienne un projet à part entière. Il lui faut alors son propre dépôt. Mais comment garder l’historique ?

C’est en fait l’extension convert qui permet cela, grâce à ses possibilités de filtrage et de la conversion depuis un dépôt mercurial en plus des autres principaux SCM.

La documentation :
 ConvertExtension - Mercurial
 Appendix A. Migrating to Mercurial

Un exemple :

$ echo include subfoo > /tmp/myfilemap
$ echo rename subfoo . >> /tmp/myfilemap
$ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
$ hg update

**Combiner deux dépôts

À l’inverse du point précédent, il peut être utile de combiner deux dépôts.
 La première étape est que les arborescences des dépôts soient compatibles.
 Ensuite on utilise hg pull /depot/to/include ... sanctionné par un message : repository is unrelated ...
 Il faut ajouter l’option --force pour rassurer hg, « Oui je sais ce que je fait. »
 Nous avons maintenant deux head qu’il faut merger : hg merge
 Dernière étape, le commit : hg ci -m "Merge two depots"

Des exemples sur hg tip : Combining Repositories

**Voir les modifications de façon graphique

hg diff monfichier c’est bien mais parfois voir ces modifications dans un outil graphique comme KDiff3, WinMerge, etc. c’est mieux.

C’est possible avec l’extension extdiff incluse par défaut dans Mercurial. Il faut bien sûr l’activer dans le fichier de configuration Mercurial (.hgrc ou Mercurial.ini)

Voir la documentation complète dans le hgbook, « Chapter 14. Adding functionality with extensions, Flexible diff support with the extdiff extension »

**Annuler les modifications faites localement à un fichier

On peut être tenté de faire hg update ., mais si un fichier a été modifié, il n’est pas touché.
hg update -C . ? Ne le faites pas ! En fait ( lisez bien la doc hg update ) hg update fonctionne sur le dépôt entier et donc écraserai toutes les modifications en cours alors qu’on ne veut écraser que celle d’un fichier ou du répertoire courant ...

La solution est en fait hg revert . La doc : hg revert

**outstanding uncommitted changes

Certaines opérations comme le merge ne sont pas autorisé si des modifications en cours n’ont pas été soumises.

C’est souvent agaçant. Il y a pourtant une façon assez simple de s’en sortir sans soumettre des fichiers pas encore prêt.

hg diff > somefile # On exporte les changements sous forme de patch

hg revert --all # On annule tous les changements

# On fait ce qu'on a à faire !

hg import --no-commit somefile # On applique le patch pour retrouver les changements

La source : Merge or rebase with uncommitted changes

**unadd

Il y a forcement un jour où on tape un hg add sans préciser quoi ajouter, on se retrouve alors avec tous les fichiers qui traînent (et qu’on a aussi oublié de mettre dans le .hgignore avec le statut *ajouté*.

Deux solutions :

 si vous n’avez pas de modification locales :

   hg revert
 


 si vous avez des modifications locales, pour ne pas els perdre, il est faut utiliser :

   hg forget "set:added()"
 

La source : How to undo all added files in mercurial

 
A propos de INTRW

Journal web de Benoît LAURENT, entre photos, voyages et logiciels libres selon les périodes.

Fils de nouvelles RSS
Thèmes