Deux lignées de conception
La CLI de Git a émergé organiquement. La CLI de Mercurial a été conçue top-down par Matt Mackall.
Cohérence des commandes
Mercurial utilise verbe-nom de manière cohérente. Les options sont cohérentes : -r signifie toujours révision, -m toujours message.
Texte d'aide
hg help commit # focalisé, court, pertinent
git help commit # page de manuel exhaustive
Messages d'erreur
Mercurial est célèbre pour ses erreurs plus amicales.
Défauts sûrs
Les commandes Mercurial détruisent rarement les données sans extension explicite.
Sortie de status
# Mercurial : minimal, compréhensible
hg status
M src/checkout.js
A src/payment.js
? notes.txt
# Git : plus d'états, plus chargé
git status
Commandes de branching
# Mercurial : branches conceptuellement lourdes
hg branch feature/login
hg commit -m "Start"
# Mercurial : bookmarks pour branching style Git
hg bookmark feature
hg commit -m "Start"
# Git
git checkout -b feature/login
git commit -m "Start"
Réécriture d'historique
Git : git rebase -i, intégré, sans opt-in. Mercurial : hg histedit, nécessite l'activation de l'extension.
Hooks et extensions
Les extensions Mercurial se branchent proprement via Python. Les hooks Git sont des scripts shell.
Tab completion
Les deux livrent des completions pour les shells principaux.
Le coût de la non-familiarité
Pour quelqu'un fluent en Git, les commandes renommées de Mercurial semblent restrictives.
Améliorations modernes
Git a réduit l'écart UX avec de meilleurs messages d'erreur, switch et restore, partial clone.