727 votes

Quelle est la différence entre Mercurial et Git ?

J'utilise git depuis un certain temps maintenant sous Windows (avec msysGit) et j'aime l'idée du contrôle distribué des sources. Récemment, je me suis intéressé à Mercurial (hg) et cela semble intéressant. Cependant, je n'arrive pas à comprendre les différences entre hg et git.

Quelqu'un a-t-il fait une comparaison côte à côte entre git et hg ? Je suis intéressé de savoir ce qui différencie hg et git sans avoir à me lancer dans une discussion de fanboy.

345voto

jfs Points 13605

Ces articles peuvent vous aider :

Modifier : Comparer Git et Mercurial à des célébrités semble être une tendance. En voici une autre :

238voto

Martin Geisler Points 44779

Je travaille sur Mercurial, mais fondamentalement, je pense que les deux systèmes sont équivalents. Ils fonctionnent tous deux avec les mêmes abstractions : une série d'instantanés (changesets) qui constituent l'historique. Chaque changeset sait d'où il vient (le changeset parent) et peut avoir de nombreux changesets enfants. Le plus récent hg-git fournit un pont bidirectionnel entre Mercurial et Git et montre en quelque sorte ce point.

Git est fortement axé sur la mutation de cet historique (avec toutes les conséquences que cela implique) alors que Mercurial n'encourage pas la réécriture de l'historique, mais c'est facile à faire de toute façon et les conséquences de cette action sont exactement ce que vous devez attendre d'elles (c'est-à-dire que si je modifie un jeu de modifications que vous avez déjà, votre client le verra comme nouveau si vous le tirez de moi). Ainsi, Mercurial a un biais vers des commandes non-destructives.

En ce qui concerne les branches légères, Mercurial a pris en charge les dépôts avec plusieurs branches depuis..., toujours je pense. Les dépôts Git à branches multiples sont exactement cela : de multiples fils de développement divergents dans un seul dépôt. Git ajoute ensuite des noms à ces branches et vous permet d'interroger ces noms à distance. Le site Signets pour Mercurial ajoute des noms locaux, et avec Mercurial 1.6, vous pouvez déplacer ces signets lorsque vous poussez/tirez .

J'utilise Linux, mais apparemment TortoiseHg est plus rapide et meilleur que l'équivalent Git sous Windows (en raison d'une meilleure utilisation du pauvre système de fichiers de Windows). Les deux http://github.com et http://bitbucket.org pour l'hébergement en ligne, le service de Bitbucket est excellent et réactif (je n'ai pas essayé github).

J'ai choisi Mercurial parce qu'il semble propre et élégant - j'étais rebuté par les scripts shell/Perl/Ruby que j'obtenais avec Git. Essayez de jeter un coup d'œil à la git-instaweb.sh fichier si vous voulez savoir ce que je veux dire : c'est une coquille script qui génère une Ruby script, qui je pense fait tourner un serveur web. Le shell script génère un autre shell script pour lancer le premier Ruby script. Il y a aussi un peu de Perl pour faire bonne mesure.

J'aime le article de blog qui compare Mercurial et Git à James Bond et MacGyver - Mercurial est en quelque sorte plus discret que Git. Il me semble que les personnes utilisant Mercurial ne sont pas si facilement impressionnées. Cela se reflète dans la façon dont chaque système fait ce que Linus a décrit comme étant "La fusion la plus cool du monde !" . Dans Git, vous pouvez fusionner avec un dépôt non lié en faisant :

git fetch <project-to-union-merge>
GIT_INDEX_FILE=.git/tmp-index git-read-tree FETCH_HEAD
GIT_INDEX_FILE=.git/tmp-index git-checkout-cache -a -u
git-update-cache --add -- (GIT_INDEX_FILE=.git/tmp-index git-ls-files)
cp .git/FETCH_HEAD .git/MERGE_HEAD
git commit

Ces commandes sont assez obscures à mes yeux. Dans Mercurial, c'est le cas :

hg pull --force <project-to-union-merge>
hg merge
hg commit

Remarquez que les commandes Mercurial sont simples et n'ont rien de spécial - la seule chose inhabituelle est la commande --force pour hg pull ce qui est nécessaire car Mercurial s'interrompt sinon lorsque vous tirez d'un dépôt non lié. Ce sont des différences comme celle-ci qui font que Mercurial me semble plus élégant.

73voto

Aristotle Pagaltzis Points 43253

Git est une plateforme, Mercurial est "juste" une application. Git est une plateforme de système de fichiers versionnés qui est livrée avec une application DVCS dans la boîte, mais comme il est normal pour les applications de plateforme, elle est plus complexe et a des bords plus rugueux que les applications ciblées. Mais cela signifie également que le VCS de git est immensément flexible, et qu'il y a une énorme profondeur de choses non liées au contrôle des sources que vous pouvez faire avec git.

C'est l'essence même de la différence.

La meilleure façon de comprendre Git est de partir de la base - du format du dépôt vers le haut. Le Git Talk de Scott Chacon est une excellente introduction à ce sujet. Si vous essayez d'utiliser git sans savoir ce qui se passe sous le capot, vous finirez par être confus à un moment donné (à moins que vous ne vous en teniez qu'aux fonctionnalités de base). Cela peut sembler stupide quand tout ce que vous voulez est un DVCS pour votre routine de programmation quotidienne, mais le génie de git est que le format du dépôt est en fait très simple et que vous pouvez l'utiliser à votre guise. peut comprendre l'ensemble du fonctionnement de git assez facilement.

Pour des comparaisons plus techniques, les meilleurs articles que j'ai personnellement vus sont ceux de Dustin Sallings :

Il a en fait utilisé les deux DVCS de manière intensive et les comprend bien tous les deux - et a fini par préférer git.

51voto

mmiika Points 3027

La grande différence se situe au niveau de Windows. Mercurial est supporté nativement, Git ne l'est pas. Vous pouvez obtenir un hébergement très similaire à github.com avec bitbucket.org (en fait, c'est encore mieux car vous bénéficiez d'un dépôt privé gratuit). J'ai utilisé msysGit pendant un certain temps, mais je suis passé à Mercurial et j'en suis très satisfait.

38voto

Maurice Flanagan Points 2950

Si vous êtes un développeur Windows à la recherche d'un contrôle de révision déconnecté de base, optez pour Hg. J'ai trouvé que Git était incompréhensible alors que Hg était simple et bien intégré au shell Windows. J'ai téléchargé Hg et suivi ce tutoriel (hginit.com) - Dix minutes plus tard, j'avais un dépôt local et j'étais de retour au travail sur mon projet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X