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
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
P.-S.
Plus de liens :
– Ned Batchelder : Bare-bones basic Mercurial for Subversion users
– Quick, easy-to-understand tips for using Mercurial / hg tip
– Tag - Mercurial - ka.da
– My Mercurial Setup and Workflow at Khan Academy - Zero Wind : : Jamie Wong : Description d’un workflow complet avec extentions utilisées et configuration de mercurial.