Mercurial Hg

Fiche logiciel validé
  • Création ou MAJ importante : 03/03/11
  • Correction mineure : 19/02/14
Mots-clés

Mercurial Hg : gestionnaire de version décentralisé

Description
Fonctionnalités générales

Mercurial (Hg) est un système de gestion de sources distribué (DVCS) écrit essentiellement en Python avec quelques fonctions en C pour des raisons de performance. Moyennant quoi, il est disponible sur les principales plateformes, y compris Windows.

Contemporain et très proche de Git, il propose une interface de commande élégante et plus simple, dont un noyau similaire aux commandes de SVN qui peut aider à la migration. Très léger, Hg est également très performant, y compris avec de gros dépôts (plusieurs centaines de Mo).

Si Mercurial et Git ont des fonctionnalités pratiquement équivalentes, ils diffèrent par leur approche de la gestion de l'historique. Pour Mercurial, celui-ci est plus ou moins sacré et le modifier n'est vraiment pas encouragé, alors que pour Git, 'nettoyer' l'historique avant de publier est couramment pratiqué.

Mercurial offre également une interface web simple qui permet de visualiser et d'exporter très facilement ses dépôts (hg serve).

Comme tous les DVCS, Mercurial n'impose pas de serveur centralisé, mais organise la synchronisation volontaire entre plusieurs dépôts. Plusieurs caractéristiques facilitent la gestion des évolutions effectuées dans chacun des dépôts :
- en dissociant les opérations de 'commit' de la publication des modifications,
- en encourageant et en facilitant l'utilisation de branches et leurs fusions,
- en garantissant l'intégrité du dépôt, sans laisser de branches dans un état inconsistant.
Cette grande souplesse d'utilisation autorise toutes sortes de processus de développement, du plus simple, analogue à ceux pratiqués avec SVN, à d'autres plus complexes tel celui décrit ici et implémenté par ce script.

Mercurial 2.1 a introduit les phases, un moyen de marquer automatiquement une suite de modifications comme étant soit public, soit en développement, soit privée. Les phases permettent ainsi de se souvenir de ce qui a été publié et d'éviter de modifier l'historique associé.

Autres fonctionnalités

Comme Git, Mercurial propose la commande hg bisect qui permet une recherche très rapide et simple de la 1re révision contenant un bug donné.

Mercurial est facilement extensible à l'aide de modules écrits en Python. L'exemple ci-après (~/.hgext/info.py) montre comment rajouter ainsi une commande hg info similaire à svn info :

# Mercurial extension to provide a basic 'hg info' command
#
import time

from mercurial.i18n import

def info(ui, repo):
    """Print information about the repository"""
   
    numrev = len(repo)
    changeset = repo.changectx(numrev-1)

    ui.write(("Repository: %s \n") % (repo.root,))
    ui.write(('Revisions: %s \n') % (numrev,))
    ui.write(
("Files: %s \n") % (len(changeset.manifest()),))
    ui.write(("Last modified on : %s ") % (time.ctime(changeset.date()[0]),))
    ui.write(
(" by %s \n") % (changeset.user().split('<')[0],))
    ui.write(_("Cloned from: %s \n") % (ui.config('paths','default'),))

cmdtable = {
    # "command-name": (function-call, options-list, help-string)
    "info": (info, [], _("hg info"))
}

Il suffit alors d'activer cette extension en la déclarant dans son fichier de configuration hgrc :

[extensions]
info = ~/.hgext/info.py

pour pouvoir l'utiliser comme n'importe quelle autre commande Mercurial :

$> hg help info
hg info

Print information about the repository

utiliser "hg -v help info" pour afficher les options globales

$> hg info
Repository: /Users/aperus/Projets/Test-ext
Revisions: 71
Files: 55
Last modified on : Wed May  19 17:18:42 2010  by Antoine Pérus 
Cloned from: /Users/Shared/Depots/Test-ext

Interopérabilité

La commande hg convert permet de convertir les dépôts :

  • depuis Mercurial, SVN, CVS, Git, Bazaar, Darcs, Monotone, GNU Arch ou Perforce
  • vers Mercurial

L'extension HgSubversion permet d'utiliser Mercurial comme client Subversion, en déconnectant les sauvegardes de la publication, en gérant localement ses branches et en ayant la totalité de l'historique en local.

L'extension hg-git permet de travailler avec un dépôt Git parallèlement avec d'autres clients Git.

Contexte d'utilisation dans mon laboratoire/service

Utilisé par plusieurs développeurs et physiciens à titre personnel ou dans des projets locaux.

Limitations, difficultés, fonctionnalités importantes non couvertes

Mercurial ne gère que des fichiers, si bien qu'un répertoire vide ne sera pas versionné.

La possibilité (apparue avec Mercurial 1.3) de gérer une collection de dépôts comme un groupe, permettant de cloner et synchroniser des projets et des librairies associées ou de traiter un gros projet organisé en sous-projets, reste expérimentale, voire déconseillée par la communauté (extension subrepo).

Comme tous les DVCS, Mercurial est mal adapté à la gestion de projets contenant de nombreux et/ou gros fichiers binaires ou considérés comme tels. Une extension bigfiles permet de gérer leurs versions tout en maintenant les fichiers à l'extérieur du dépôt.

Environnement du logiciel
Plates-formes

Linux, Mac OS X, Windows, Solaris, AIX

Logiciels connexes

Python 2.4 ou plus récent

Autres logiciels aux fonctionnalités équivalentes
Environnement de développement
Type de structure associée au développement

Projet communautaire sponsorisé par des sociétés ou organisations telles que : Google, Fog Creek (Stack Overflow), Microsoft, Jane Street Capital, Allston Trading, Mozilla, Symbian, Python, Atlassian.

Eléments de pérennité

Communauté importante avec de 'gros clients' comme Python, NetBeans, Java/OpenJDK, Mozilla, OpenOffice, Sage

Références d'utilisateurs institutionnels

Une liste d'utilisateurs de Mercurial : http://mercurial.selenic.com/wiki/ProjectsUsingMercurial

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums
Documentation utilisateur

Point d'entrée général : http://mercurial.selenic.com/wiki/

Le livre 'officiel' : http://hgbook.red-bean.com/

Divers (astuces, actualités, sécurité)

Une des philosophies de Mercurial est d'avoir un ensemble de fonctionnalités de base simple, facile à prendre en main, et de permettre aux utilisateurs de rajouter des fonctionnalités plus complexes au fur et à mesure qu'on en ressent le besoin. Mercurial est ainsi installé avec un certain nombre d'extensions non activées. Certaines sont cependant d'utilisation très courante ; on les active dans le fichier de configuration ~/.hgrc

La liste officielle des extensions se trouve là : http://mercurial.selenic.com/wiki/UsingExtensions

On trouve un grand nombre d'outils travaillant avec Mercurial ici : http://mercurial.selenic.com/wiki/OtherTools

Parmi les interfaces graphiques, qui peuvent être utiles pour visualiser ses branches, on peut citer 2 outils reconnus :

  • TortoiseHg pour Windows et Linux
  • SourceTree pour Windows et MacOSX; celui-ci interface aussi bien les dépôts Hg que Git, implémente les 'workflows' hg-flow et git-flow et sait se connecter aux forges sociales Bitbucket et GitHub.

Commentaires

Responsable thématique précédent

Cette fiche a d'abord été suivie par le responsable thématique Loïc Gouarin. Anne Cheylus l'a reprise en avril 2013.