web-dev-qa-db-fra.com

Quelles sont les forces et les faiblesses relatives de Git, Mercurial et Bazaar?

Que voient les gens ici comme les forces et les faiblesses relatives de Git, Mercurial et Bazaar?

En considérant chacun d'eux entre eux et contre les systèmes de contrôle de version comme SVN et Perforce, quels problèmes devraient être pris en compte?

Lors de la planification d'une migration de SVN vers l'un de ces systèmes de contrôle de version distribués, quels facteurs prendriez-vous en compte?

135
Jordan Dea-Mattson

Git est très rapide, évolue très bien et est très transparent sur ses concepts. L'inconvénient est qu'il a une courbe d'apprentissage relativement abrupte. Un port Win32 est disponible, mais pas tout à fait un citoyen de première classe. Git expose les hachages sous forme de numéros de version aux utilisateurs; cela fournit des garanties (en ce qu'un seul hachage fait toujours référence au même contenu exact; un attaquant ne peut pas modifier l'historique sans être détecté), mais peut être lourd pour l'utilisateur. Git a un concept unique de suivi du contenu des fichiers, même lorsque ces contenus se déplacent entre les fichiers, et affiche les fichiers comme des objets de premier niveau, mais ne suit pas les répertoires. Un autre problème avec git est qu'il a de nombreuses opérations (telles que rebaser) qui facilitent la modification de l'historique (dans un sens - le contenu auquel fait référence un hachage ne changera jamais, mais les références à ce hachage peuvent être perdues); certains puristes (moi y compris) n'aiment pas beaucoup ça.

Bazaar est raisonnablement rapide (très rapide pour les arbres avec une histoire peu profonde, mais évolue actuellement mal avec la longueur de l'histoire), et est facile à apprendre pour ceux qui connaissent les interfaces de ligne de commande des SCM traditionnels (CVS, SVN, etc.). Win32 est considéré comme une cible de premier ordre par son équipe de développement. Il a une architecture enfichable pour différents composants et remplace fréquemment son format de stockage; cela leur permet d'introduire de nouvelles fonctionnalités (comme une meilleure prise en charge de l'intégration avec des systèmes de contrôle de révision basés sur différents concepts) et d'améliorer les performances. L'équipe Bazaar prend en compte le suivi des répertoires et renomme la fonctionnalité de première classe. Alors que des identifiants d'ID de révision globalement uniques sont disponibles pour toutes les révisions, des revnos arborescents locaux (numéros de révision standard, plus proches de ceux utilisés par svn ou d'autres SCM plus conventionnels) sont utilisés à la place des hachages de contenu pour identifier les révisions. Bazaar prend en charge les "extractions légères", dans lesquelles l'historique est conservé sur un serveur distant au lieu d'être copié sur le système local et est automatiquement référencé sur le réseau en cas de besoin; à l'heure actuelle, cela est unique parmi les DSCM.

Les deux ont une forme d'intégration SVN disponible; cependant, bzr-svn est considérablement plus performant que git-svn, en grande partie à cause des révisions du format backend introduites à cet effet. [Mise à jour, à partir de 2014: le produit commercial tiers SubGit fournit une interface bidirectionnelle entre SVN et Git qui est comparable en fidélité à bzr-svn, et considérablement plus raffinée; je fortement recommande son utilisation par rapport à celle de git-svn lorsque le budget et les contraintes de licence le permettent].

Je n'ai pas beaucoup utilisé Mercurial, et je ne peux donc pas le commenter en détail - sauf pour noter qu'il, comme Git, a un adressage de hachage de contenu pour les révisions; également comme Git, il ne traite pas les répertoires comme des objets de première classe (et ne peut pas stocker un répertoire vide). Il est cependant plus rapide que tout autre DSCM, à l'exception de Git, et a une bien meilleure intégration IDE (en particulier pour Eclipse) que n'importe lequel de ses concurrents. Compte tenu de ses caractéristiques de performance (qui ne sont que légèrement en retard par rapport à ceux de Git) et sa plateforme multiplateforme supérieure et le support IDE, Mercurial peut être attrayant pour les équipes avec un nombre important de membres centrés sur win32 ou liés à l'IDE.

L'une des préoccupations lors de la migration à partir de SVN est que les interfaces graphiques de SVN et l'intégration IDE sont plus matures que celles de n'importe quel SCM distribué. De plus, si vous faites actuellement un usage intensif de l'automatisation de script de pré-validation avec SVN ( c.-à-d. exiger que les tests unitaires passent avant qu'une validation puisse continuer), vous voudrez probablement utiliser un outil similaire à PQM pour automatiser les demandes de fusion vers votre partage branches.

SVK est un DSCM qui utilise Subversion comme magasin de sauvegarde et a une assez bonne intégration avec les outils centrés sur SVN. Cependant, il présente des caractéristiques de performances et d'évolutivité nettement plus mauvaises que tout autre DSCM majeur (même Darcs), et doit être évité pour les projets qui sont susceptibles de grossir en termes de longueur d'historique ou de nombre de fichiers.

[À propos de l'auteur: j'utilise Git et Perforce pour le travail, et Bazaar pour mes projets personnels et comme bibliothèque intégrée; d'autres parties de l'organisation de mon employeur utilisent fortement Mercurial. Dans une vie antérieure, j'ai construit beaucoup d'automatisation autour de SVN; avant cela, j'ai de l'expérience avec GNU Arch, BitKeeper, CVS et autres. Git était assez rebutant au début - c'était comme GNU Arch dans la mesure où étant un environnement riche en concepts, par opposition aux boîtes à outils conçues pour se conformer au choix des flux de travail de l'utilisateur - mais je suis depuis devenu assez à l'aise avec cela].

142
Charles Duffy

Steve Streeting du projet Ogre 3D vient (le 28/09/2009) de publier une entrée de blog sur ce sujet où il fait un super et même rendu comparaison de Git, Mercurial et Bazaar .

En fin de compte, il trouve des forces et des faiblesses avec les trois et aucun gagnant clair. Sur le plan positif, il donne une excellente table pour vous aider à décider lequel choisir.

alt text

C'est une courte lecture et je le recommande vivement.

19
Michael La Voie

Que voient les gens ici comme les forces et les faiblesses relatives de Git, Mercurial et Bazaar?

À mon avis Git la force est sa conception sous-jacente épurée et son ensemble de fonctionnalités très riche. Il a également, je pense, le meilleur support pour les référentiels multi-branches et la gestion des flux de travail lourds. Il est très rapide et a une petite taille de référentiel.

Il a quelques fonctionnalités qui sont utiles mais demandent un certain effort pour y être habituées. Ceux-ci incluent visible ara intermédiaire (index) entre la zone de travail et la base de données du référentiel, ce qui permet une meilleure résolution de fusion dans les cas plus compliqués, la validation incrémentielle et la validation avec un arbre sale; détection renomme et copie en utilisant l'heuristique de similarité plutôt que de les suivre en utilisant une sorte d'ID de fichier, qui fonctionne bien et qui permet de blâmer (annoter) qui peut suivre le mouvement du code entre les fichiers et pas seulement en gros renomme.

L'un de ses inconvénients est que la prise en charge de MS Windows est en retard et n'est pas complète. Un autre inconvénient perçu est qu'il n'est pas aussi bien documenté que par exemple Mercurial, et est moins convivial que la concurrence, mais il change.

À mon avis La force de Mercurial réside dans ses bonnes performances et sa petite taille de référentiel, dans son bon support MS Windows.

Le principal inconvénient est à mon avis le fait que les succursales locales (plusieurs succursales dans un référentiel unique) sont toujours des citoyens de seconde classe, et de manière étrange et compliquée, elles implémentent des balises. De plus, la façon dont il traite les renommages de fichiers n'était pas optimale (mais cette migration a changé). Mercurial ne prend pas en charge les fusions de poulpes (avec plus de deux parents).

D'après ce que j'ai entendu et lu les principaux avantages Bazaar , il est facile de prendre en charge le flux de travail centralisé (ce qui est également un inconvénient, avec des concepts centralisés visibles là où ils ne devraient pas ), suivi des renommées des fichiers et des répertoires.

Son principal inconvénient est les performances et la taille du référentiel pour les grands référentiels avec un long historique non linéaire (les performances sont améliorées au moins pour les référentiels pas trop grands), le fait que le paradigme par défaut est un ranch par référentiel (vous pouvez cependant le configurer pour partager des données) , et des concepts centralisés (mais aussi d'après ce que j'ai entendu des changements).

Git est écrit en C, scripts Shell et Perl, et est scriptable; Mercurial est écrit en C (core, pour les performances) et Python, et fournit une API pour les extensions; Bazaar est écrit en Python et fournit une API pour les extensions.


En considérant chacun d'eux entre eux et contre les systèmes de contrôle de version comme SVN et Perforce, quels problèmes devraient être pris en compte?

Les systèmes de contrôle de version comme Subversion (SVN), Perforce ou ClearCase sont centralisés systèmes de contrôle de version. Git, Mercurial, Bazaar (et aussi Darcs, Monotone et BitKeeper) sont des systèmes de contrôle de version distribués. Les systèmes de contrôle de version distribués permettent une gamme beaucoup plus large de workflows. Ils permettent d'utiliser "publier quand c'est prêt". Ils prennent mieux en charge les branchements et les fusions, ainsi que les flux de travail lourds. Vous n'avez pas besoin de faire confiance aux personnes disposant d'un accès par validation pour pouvoir obtenir facilement des contributions de leur part.


Lors de la planification d'une migration de SVN vers l'un de ces systèmes de contrôle de version distribués, quels facteurs prendriez-vous en compte?

Un des facteurs que vous voudrez peut-être considérer est la prise en charge de l'intraction avec SVN; Git a git-svn, Bazaar a bzr-svn et Mercurial a l'extension hgsubversion.

Avis de non-responsabilité: Je suis un utilisateur de Git et un petit contributeur de temps, et je regarde (et je participe à) la liste de diffusion git. Je ne connais Mercurial et Bazaar que par leur documentation, diverses discussions sur IRC et listes de diffusion, et des articles de blog et des articles comparant divers systèmes de contrôle de version (dont certains sont répertoriés sur GitComparison page sur Git Wiki).

15
Jakub Narębski
14
Pat Notz

Mercurial et Bazaar se ressemblent beaucoup en surface. Ils fournissent tous deux un contrôle de base de la version distribuée, comme dans la validation hors ligne et la fusion de plusieurs branches, sont tous deux écrits en python et sont tous deux plus lents que git. Il existe de nombreuses différences une fois que vous explorez le code, mais , pour vos tâches quotidiennes de routine, ils sont effectivement les mêmes, bien que Mercurial semble avoir un peu plus d'élan.

Git, eh bien, n'est pas pour les non-initiés. Il est beaucoup plus rapide que Mercurial et Bazaar et a été écrit pour gérer le noyau Linux. Il est le plus rapide des trois et il est aussi le plus puissant des trois, de loin. Les outils de manipulation du journal et de la validation de Git sont inégalés. Cependant, c'est aussi le plus compliqué et le plus dangereux à utiliser. Il est très facile de perdre un commit ou de ruiner un référentiel, surtout si vous ne comprenez pas le fonctionnement interne de git.

7
Herge

Jetez un oeil à la comparaison faite récemment par les développeurs Python: http://wiki.python.org/moin/DvcsComparison . Ils ont choisi Mercurial sur la base de trois importants les raisons:

Le choix d'aller avec Mercurial a été fait pour trois raisons importantes:

  • Selon une petite enquête, les développeurs de Python sont plus intéressés à utiliser Mercurial que dans Bazaar ou Git.
  • Mercurial est écrit en Python, ce qui correspond à la tendance des pythons à "manger leur propre nourriture pour chien".
  • Mercurial est nettement plus rapide que bzr (il est plus lent que git, mais avec une différence beaucoup plus petite).
  • Mercurial est plus facile à apprendre pour les utilisateurs SVN que Bazaar.

(depuis http://www.python.org/dev/peps/pep-0374/ )

6
Martin Geisler

Sun a évalué git , Mercurial et Bazaar comme candidats pour remplacer Sun Teamware VCS pour la base de code Solaris. Je l'ai trouvé très intéressant.

5
DGentry

Une chose très importante manquante dans Bazaar est cp. Vous ne pouvez pas avoir plusieurs fichiers partageant la même histoire, comme vous l'avez dans SVN, voir par exemple ici et ici . Si vous ne prévoyez pas d'utiliser cp, bzr est un excellent remplacement (et très facile à utiliser) de svn.

2
Davide

J'utilisais Bazaar depuis un moment que j'aimais beaucoup mais ce n'était que des projets plus petits et même alors c'était assez lent. Si facile à apprendre, mais pas super rapide. Il s'agit cependant d'une plateforme très x.

J'utilise actuellement Git que j'aime beaucoup depuis la version 1.6 qui le rend beaucoup plus similaire aux autres VCS en termes de commandes à utiliser.

Je pense que les principales différences de mon expérience dans l'utilisation du DVCS sont les suivantes:

  1. Git a la communauté la plus dynamique et il est courant de voir des articles sur Git
  2. GitHub vraiment rock. Launchpad.net est ok, mais rien de tel que le plaisir de Github
  3. Le nombre d'outils de workflow pour Git a été formidable. Il est intégré partout. Il y en a pour Bzr mais pas autant ou aussi bien entretenus.

En résumé, Bzr était super quand je me suis coupé les dents sur DVCS mais je suis maintenant très content de Git et Github.

2
sh1mmer

Votre problème majeur va être que ce sont distribués SCM, et en tant que tels nécessitent un peu de changement dans l'état d'esprit de l'utilisateur. Une fois que les gens s'habitueront à l'idée, les détails techniques et les modèles d'utilisation se mettront en place, mais ne sous-estimez pas cet obstacle initial, en particulier dans un cadre d'entreprise. N'oubliez pas que tous les problèmes sont des problèmes humains.

1
David Plumpton

Bazaar est à mon humble avis plus facile à apprendre que git. Git a un support Nice sur github.com.

Je pense que vous devriez essayer d'utiliser les deux et décider lequel vous convient le mieux.

1
Rafał Rawicki

C'est une grande question qui dépend beaucoup du contexte qui vous prendrait beaucoup de temps à taper dans l'une de ces petites zones de texte. En outre, tous les trois semblent sensiblement similaires lorsqu'ils sont utilisés pour les tâches habituelles de la plupart des programmeurs, donc même la compréhension des différences nécessite des connaissances assez ésotériques.

Vous obtiendrez probablement de bien meilleures réponses si vous pouvez casser votre analyse de ces outils au point où vous avez des questions plus spécifiques.

1
jfm3

Que voient les gens ici comme les forces et les faiblesses relatives de Git, Mercurial et Bazaar?

Il s'agit d'une question très ouverte, à la limite de l'amorce de flamme.

Git est le plus rapide, mais les trois sont assez rapides. Bazaar est le plus flexible (il prend en charge la lecture-écriture transparente pour les référentiels SVN) et se soucie beaucoup de l'expérience utilisateur. Mercurial est quelque part au milieu.

Les trois systèmes ont beaucoup de fanboys. Je suis personnellement un fanboy de Bazaar.

En considérant chacun d'eux entre eux et contre les systèmes de contrôle de version comme SVN et Perforce, quels problèmes devraient être pris en compte?

Les premiers sont des systèmes distribués. Ces derniers sont des systèmes centralisés. De plus, Perforce est propriétaire tandis que tous les autres sont gratuits comme dans le discours .

Centralisé contre décentralisé est un choix beaucoup plus important que tous les systèmes que vous avez mentionnés dans sa catégorie.

Lors de la planification d'une migration de SVN vers l'un de ces systèmes de contrôle de version distribués, quels facteurs prendriez-vous en compte?

Tout d'abord, le manque d'un bon substitut pour TortoiseSVN. Bien que Bazaar travaille par lui-même variante Tortoise , mais il n'est pas encore là, en septembre 2008.

Ensuite, la formation des personnes clés sur la façon dont l'utilisation d'un système décentralisé va affecter leur travail.

Enfin, l'intégration avec le reste du système, comme les trackers de problèmes, le système de construction nocturne, le système de test automatisé, etc.

1
ddaa

ddaa.myopenid.com l'a mentionné en passant, mais je pense qu'il vaut la peine de le mentionner à nouveau: Bazaar peut lire et écrire dans des référentiels SVN distants. Cela signifie que vous pouvez utiliser Bazaar localement comme preuve de concept pendant que le reste de l'équipe utilise toujours Subversion.

EDIT: Presque tous les outils ont maintenant une manière d'interagir avec SVN, mais j'ai maintenant une expérience personnelle qui git svn fonctionne extrêmement bien. Je l'utilise depuis des mois, avec un minimum de hoquet.

1
Hank Gay

Il y a une bonne vidéo de Linus Torvalds sur git. Il est le créateur de Git, c'est donc ce qu'il promeut, mais dans la vidéo, il explique ce que sont les SCM distribués et pourquoi ils sont meilleurs que ceux centralisés. Il y a beaucoup de comparaison entre git (Mercurial est considéré comme OK) et cvs/svn/perforce. Il y a aussi des questions de l'auditoire concernant la migration vers SCM distribué.

J'ai trouvé ce matériel instructif et je suis vendu à SCM distribué. Mais malgré les efforts de Linus, mon choix est Mercurial. La raison est bitbucket.org, je l'ai trouvé meilleur (plus généreux) que github.

Je dois dire ici un mot d'avertissement: Linus a un style assez agressif, je pense qu'il veut être drôle mais je n'ai pas ri. En dehors de cela, la vidéo est géniale si vous êtes nouveau dans les SCM distribués et pensez à passer de SVN.

http://www.youtube.com/watch?v=4XpnKHJAok8

1
k1udge

Les systèmes de contrôle de version distribués (DVCS) résolvent des problèmes différents de ceux des VCS centralisés. Les comparer, c'est comme comparer des marteaux et des tournevis.

VCS centralisé les systèmes sont conçus avec l'intention qu'il y ait une seule vraie source qui est bénie, et donc bonne. Tous les développeurs travaillent (extraction) à partir de cette source, puis ajoutent (valident) leurs modifications, qui deviennent alors de la même manière Blessed. La seule vraie différence entre CVS, Subversion, ClearCase, Perforce, VisualSourceSafe et tous les autres CVCS réside dans le flux de travail, les performances et l'intégration qu'offre chaque produit.

VCS distribué les systèmes sont conçus avec l'intention qu'un référentiel soit aussi bon que les autres, et que la fusion d'un référentiel à un autre ne soit qu'une autre forme de communication. Toute valeur sémantique quant au référentiel auquel faire confiance est imposée de l'extérieur par le processus, et non par le logiciel lui-même.

Le vrai choix entre l'utilisation d'un type ou de l'autre est organisationnel - si votre projet ou organisation veut un contrôle centralisé, alors un DVCS n'est pas un démarreur. Si vos développeurs sont censés travailler dans tout le pays/monde, sans connexions sécurisées à large bande à un référentiel central, alors DVCS est probablement votre salut. Si vous avez besoin des deux, vous êtes fsck.

0
Craig Trader