727 votes

Quelle est la Différence Entre Mercurial et Git?

J'ai été en utilisant git pour un certain temps maintenant sur Windows (avec msysGit) et j'aime l'idée de source distribué de contrôle. Tout récemment, j'ai été en regardant Mercurial (hg) et il semble intéressant. Cependant, je ne peut pas envelopper la tête autour de l'différences entre le hg et git.

Quelqu'un a fait un side-by-side de comparaison entre git et hg? Je suis curieux de savoir ce qui diffère de hg et git sans avoir à sauter dans un fanboy de discussion.

345voto

jfs Points 13605

Ces articles peuvent vous aider:

Edit: Comparaison de Git et Mercurial célébrités, semble être une tendance. En voici une de plus:

238voto

Martin Geisler Points 44779

Je travaille sur Mercurial, mais, fondamentalement, je crois que les deux systèmes sont équivalents. Ils travaillent tous les deux avec le même abstractions: une série de clichés (révisions) qui composent l'histoire. Chaque révision sait d'où il vient (le parent de l'ensemble de modifications) et peuvent avoir de nombreux enfants les révisions. La récente hg-git extension fournit un pont à deux voies entre Mercurial et Git et une sorte de montre à ce point.

Git a un fort accent sur la mutation de ce graphe (avec toutes les conséquences que cela implique) alors qu'Mercurial n'encourage pas la réécriture de l'histoire, mais il est facile de le faire de toute façon et les conséquences sont exactement ce que vous devriez vous attendre à être (qui est, si je modifie un ensemble de modifications que vous avez déjà, votre client pourra de nouveau, si vous tirez de moi). Alors Mercurial a un préjugé à l'égard des non-destructive des commandes.

Comme pour la lumière-poids des branches, puis Mercurial a pris en charge des référentiels avec plusieurs branches depuis... toujours je pense. Dépôts Git avec de multiples branches sont exactement cela: plusieurs ont divergé brins de développement dans un référentiel unique. Git puis ajoute les noms de ces fils, et vous permettent d'interroger ces noms à distance. Les Signets extension pour Mercurial ajoute des noms locaux, et avec Mercurial 1.6, vous pouvez déplacer ces signets autour de quand vous poussez/tirez..

J'utilise Linux, mais apparemment TortoiseHg est plus rapide et mieux que le Git équivalent sur Windows (grâce à une meilleure utilisation des pauvres système de fichiers Windows). Les deux http://github.com et http://bitbucket.org fournir de l'hébergement en ligne, le service à Bitbucket est grande et réactif (je n'ai pas essayé github).

J'ai choisi Mercurial puisqu'il se sent propre et élégant-j'ai été mis hors tension par le shell/Perl/Ruby scripts que j'ai obtenu avec Git. Essayez de prendre un coup d'oeil à l' git-instaweb.sh le fichier si vous voulez savoir ce que je veux dire: c'est un shell script qui génère un Ruby script, qui, je pense, exécute un serveur web. Le shell script génère un autre script shell pour lancer le premier script Ruby. Il est aussi un peu de Perl, pour faire bonne mesure.

J'aime le post de blog qui compare Mercurial et Git avec James Bond et MacGyver -- Mercurial est en quelque sorte plus faible que les clés de Git. Il me semble que les gens qui utilisent Mercurial ne sont pas facilement impressionné. Cela se reflète dans la manière dont chaque système de faire ce que Linus décrit comme "le plus cool de fusion JAMAIS!". Dans Git, vous pouvez le fusionner avec un autre référentiel 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 ont l'air assez arcanes de mon oeil. Dans Mercurial-nous faire:

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

Remarquez comment l'Mercurial commandes sont simples et pas spécial à tous, c'est la seule chose inhabituelle est l' --force le drapeau en hg pull, ce qui est nécessaire, car Mercurial abandonner sinon, lorsque vous tirez à partir d'un autre référentiel. Il est des différences, comme ce qui rend Mercurial semble plus élégant de moi.

73voto

Aristotle Pagaltzis Points 43253

Git est une plate-forme, Mercurial est "juste" une application. Git est un système de fichiers versionnés plate-forme qui se sont livrés avec un DVCS application dans la boîte, mais comme normal pour la plate-forme des applications, il est plus complexe et a une rugosité des bords de cibler les applications ne. Mais cela signifie aussi git de la VCS est extrêmement flexible, et il y a une énorme profondeur de non-source-contrôler les choses que vous pouvez faire avec git.

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

Git est mieux compris à partir du sol en place – à partir du référentiel du format. Scott Chacon Git du Talk est une excellente introduction pour cette. Si vous essayez d'utiliser git sans savoir ce qui se passe sous le capot, vous aurez confondu à un certain point (sauf si vous restez uniquement des fonctionnalités de base). Cela peut sembler stupide, quand tout ce que vous voulez, c'est un DVCS pour vos activités quotidiennes de routine, mais le génie de git, c'est que le référentiel format est en fait très simple et vous pouvez comprendre git de l'ensemble de l'opération assez facilement.

Pour un peu plus de technicité orientée vers les comparaisons, les meilleurs articles personnellement, j'ai vu sont Dustin Sallings':

Il a effectivement utilisé à la fois DVCSs largement et comprend à la fois bien et fini vers le haut préférant git.

51voto

mmiika Points 3027

La grande différence est que sur Windows. Mercurial est pris en charge nativement, Git n'est pas. Vous pouvez obtenir de très similaire à l'hébergement github.com avec bitbucket.org (en réalité, même mieux que vous obtenir gratuitement un repository privé). J'ai été en utilisant msysGit pendant un certain temps, mais a déménagé en Mercurial et a été très heureux avec elle.

38voto

Maurice Flanagan Points 2950

Si vous êtes un développeur Windows à la recherche de base déconnecté de contrôle de révision, aller avec Hg. J'ai trouvé Git d'être incompréhensible alors que Hg est simple et bien intégré au shell de Windows. J'ai téléchargé Hg et suivi ce tutoriel (hginit.com) - dix minutes plus tard, j'ai eu un local repo et était de retour à travailler 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