Quelles sont les forces et les faiblesses relatives de Git, Mercurial et Bazaar? [fermé]
Qu'est-ce que les gens ici voient comme les forces et les faiblesses relatives de Git, Mercurial, et Bazaar?
en considérant chacun d'eux les uns avec les autres et par rapport aux systèmes de contrôle de version comme SVN et Perforce, quels problèmes devraient être considérés?
lors de la planification de la migration de SVN vers L'un de ces systèmes de contrôle de version distribués, quels facteurs prendriez-vous en considération?
16 réponses
Git est très rapide, se balance très bien, et est très transparent sur ses concepts. L'inconvénient est que la courbe d'apprentissage est relativement raide. Un port Win32 est disponible, mais pas tout à fait un citoyen de première classe. Git affiche les hashs sous forme de numéros de version pour les utilisateurs, ce qui offre des garanties (en ce sens qu'un simple hashs renvoie toujours au même contenu; 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 le contenu du fichier, même si ce contenu se déplace entre les fichiers, et affiche les fichiers comme des objets de premier niveau, mais ne trace pas les répertoires. Un autre problème avec git est qu'il y a beaucoup d'opérations (comme rebase ) qui rendent facile de modifier l'histoire (dans un sens -- le contenu auquel fait référence un hash ne changera jamais, mais les références à ce hash peuvent être perdues); certains puristes (moi inclus) n'aiment pas beaucoup cela.
Bazaar est raisonnablement rapide (très rapide pour il est facile à apprendre pour ceux qui sont familiers avec les interfaces en ligne de commande des MSC traditionnels (CVS, SVN, etc.). Win32 est considéré comme une cible de premier ordre par son équipe de développement. Il a une architecture connectable 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 des concepts différents)) et améliorer les performances. L'équipe de Bazaar considère le suivi de répertoire et le soutien de renommer la fonctionnalité de première classe. Alors que des identificateurs de révision uniques à l'échelle mondiale sont disponibles pour toutes les révisions, des revnos arborescents locaux (numéros de révision standard, plus semblables à 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 a le soutien pour les "checkouts légers", dans lequel l'histoire est conservée sur un serveur distant au lieu de copié vers le bas à la locale système et est renvoyé automatiquement sur le réseau en cas de besoin, à l'heure actuelle, ce qui est unique parmi DSCMs.
ont tous les deux une certaine forme D'intégration SVN disponible; cependant, bzr-svn est considérablement plus capable que git-svn, en grande partie en raison des révisions de format d'arrière-plan introduites à cet effet. [mise à jour, à partir de 2014: le sous-Git produit commercial tiers fournit une interface bidirectionnelle entre SVN et Git qui est comparable dans la fidélité à BZR-svn, et beaucoup plus poli; I fortement recommande son utilisation au-dessus de celle de git-svn lorsque les contraintes de budget et de licence 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 une adresse de hachage de contenu pour les révisions; aussi 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 n'importe quel autre DSCM à l'exception de Git, et a une bien meilleure intégration IDE (en particulier pour Eclipse) que l'un de ses concurrents. Compte tenu de ses caractéristiques de performance (qui ne sont que légèrement inférieures à celles de Git) et de son support supérieur multiplateforme et IDE, Mercurial peut être convaincant pour les équipes ayant un nombre important de membres centrés sur le win32 ou liés à IDE.
une des préoccupations de la migration à partir de SVN est que les interfaces graphiques et L'intégration des IDE de SVN sont plus matures que celles de n'importe quelle distribué Mec. En outre, si vous utilisez actuellement beaucoup l'automatisation des scripts précommit avec SVN (i.e. nécessitant des tests unitaires pour passer avant qu'une propagation puisse avoir lieu), vous voudrez probablement utiliser un outil similaire à PQM pour automatiser les requêtes de fusion à vos branches partagées.
SVK est un DSCM qui utilise Subversion comme support de stockage, et qui a une très bonne intégration avec les outils SVN-centric. Cependant, sa performance et son évolutivité sont bien pires. les projets qui sont susceptibles de prendre de l'ampleur en termes de longueur de l'histoire ou de nombre de dossiers devraient être évités.
[au sujet 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 -- il ressemblait à GNU Arch dans la mesure où il s'agissait d'un environnement lourd de concept, par opposition à des boîtes à outils construites pour se conformer au choix des flux de travail de l'utilisateur -- mais je suis depuis venu à être assez à l'aise avec cela].
Steve Streeting of the Ogre 3D project just (9/28/2009) a publié une entrée de blog sur ce sujet où il fait une grande et même main comparaison de Git, Mercurial et Bazaar .
à la fin, il trouve des forces et des faiblesses avec les trois et aucun gagnant clair. Du côté positif, il donne une grande table pour vous aider à décider avec qui aller.
C'est une courte lecture et je vous le recommande fortement.
Qu'est-ce que les gens ici voient comme les forces et les faiblesses relatives de Git, Mercurial, et Bazaar?
à mon avis Git la force est son propre design sous-jacent et très riche ensemble de caractéristiques. Il a également je pense que le meilleur soutien pour les dépôts multi-branches et la gestion des flux de travaux lourds de branche. Il est très rapide et a une petite taille de dépôt.
il a quelques des fonctionnalités qui sont utiles, mais qui demandent des efforts pour être utilisées. Il s'agit de visible étape intermédiaire ara (index) entre la zone de travail et la base de données de dépôt, ce qui permet une meilleure résolution de fusion dans les cas plus compliqués, comitting incrémental, et comitting avec dirty tree; détection renames et copies utilisant heuristique de similarité plutôt que de les suivre en utilisant une sorte de fichier-ids, qui fonctionne bien et qui permet de blâmer (annoter) qui peut suivre le mouvement du code entre les fichiers et pas seulement les renommages en gros.
L'un de ses inconvénients est que le support MS Windows est en retard et n'est pas complet. Un autre inconvénient perçu est qu'elle n'est pas aussi bien documentée que par exemple Mercurial, et est moins conviviale que la concurrence, mais elle change.
à mon avis Mercurial la force réside dans sa bonne performance et la petite taille du dépôt, dans son bon soutien de MS Windows.
le principal inconvénient est à mon avis le fait que les branches locales (plusieurs branches dans un seul dépôt) sont encore des citoyens de seconde classe, et de manière étrange et compliquée il implémente des tags. Aussi la façon dont il traite les renommages de fichiers était sous-optimale (mais ce migth a changé). Mercurial ne supporte pas les fusions de poulpes (avec plus de deux parents).
D'après ce que j'ai entendu et lu main Bazaar avantages sont il le soutien facile pour le flux de travail centralisé (qui est aussi l'inconvénient, avec des concepts centralisés visibles où il ne devrait pas), le suivi des renames de dossiers et de répertoires.
ses principaux inconvénients sont la performance et la taille du dépôt pour les grands dépôts avec une longue histoire non linéaire (la performance améliorée au moins pour les dépôts pas trop grands), le fait que le paradigme par défaut est un ranch par dépôt (vous pouvez le configurer pour partager des données, bien que), et des concepts centralisés (mais cela aussi à partir de 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 la performance) 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 les uns avec les autres et contre les systèmes de contrôle de version comme SVN et Perforce, quelles questions devraient être prises en compte?Les systèmes de contrôle de Version
comme Subversion (SVN), Perforce ou ClearCase sont des systèmes de contrôle de version centralisés . 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 flux de travail. Ils permettent d'utiliser des "publier quand tout est prêt". Ils ont un meilleur soutien pour brancher et fusionner, et pour les flux de travaux lourds de la branche. Vous n'avez pas besoin de faire confiance aux personnes qui ont accès à commit pour être en mesure d'obtenir des contributions de leur part d'une manière facile.
lors de la planification de la migration de SVN vers L'un de ces systèmes de contrôle de version distribués, quels facteurs prendriez-vous en compte?
L'un des facteurs que vous pourriez vouloir considérer est le support pour l'interaction avec SVN; Git a git-svn, Bazaar a BZR-svn, et Mercurial a l'extension hgsubversion.
avertissement: je suis un utilisateur de Git et un petit contributeur de temps, et regarder (et participer sur) Git mailing list. Je ne connais Mercurial et Bazaar que par leur documentation, diverses discussions sur IRC et les listes de diffusion, et des billets de blogs et des articles comparant divers systèmes de contrôle de version (dont certains sont listés sur GitComparison page sur le Wiki de Git).
Mercurial et Bazaar se ressemblent beaucoup à la surface. Ils fournissent tous les deux le contrôle de base de la version distribuée, comme dans la propagation hors ligne et la fusion de plusieurs branches, sont tous les deux écrits en python et sont tous les deux plus lents que git. Il y a de nombreuses différences une fois que vous plongez dans le code, mais, pour vos tâches quotidiennes de routine, ils sont effectivement les mêmes, bien que le Mercurial semble avoir un peu plus d'élan.
Git, enfin, 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 c'est aussi le plus puissant des trois, par une marge. Les outils de manipulation log et commit de Git sont inégalés. Cependant, il est aussi le plus compliqué et le plus dangereux à utiliser. Il est très facile de perdre une validation ou la ruine d'un référentiel, surtout si vous ne comprenez pas le fonctionnement interne de git.
regardez 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 raisons importantes:
le choix D'aller avec Mercurial a été fait pour trois raisons importantes:
- selon un petit sondage, les développeurs Python sont plus intéressés à utiliser Mercurial qu'à Bazaar ou Git.
- Mercurial est écrit en Python, ce qui est congruent avec le python-dev tendance à "manger leur propre dogfood'.
- Mercurial est significativement plus rapide que bzr (il est plus lent que git, bien que par une différence beaucoup plus faible).
- Mercurial est plus facile à apprendre pour les utilisateurs de SVN que Bazaar.
C'est une grande question qui dépend beaucoup du contexte qui vous prennent beaucoup de temps à taper dans l'une de ces petites boîtes de texte. En outre, ces trois éléments semblent essentiellement similaires lorsqu'ils sont utilisés pour les tâches habituelles de la plupart des programmeurs, de sorte que 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 décomposer votre analyse de ces outils vers le bas au point où vous avez plus spécifique question.
Bazaar est plus facile à apprendre que git. Git a un bon support en github.com.
je pense que vous devriez essayer d'utiliser les deux et décider ce qui vous convient le plus.
que voient les gens ici comme les forces et les faiblesses relatives de Git, Mercurial, et Bazaar?
C'est une question très ouverte, à la limite de la flamme.
Git est le plus rapide, mais tous les trois sont assez rapides. Bazaar est le plus flexible (Il dispose d'un support transparent en lecture-écriture pour les dépôts SVN) et se soucie beaucoup de l'expérience utilisateur. Mercurial est quelque part au milieu.
tous trois systèmes ont beaucoup de fanboys. Je suis personnellement un fan de Bazaar.
en considérant chacun d'eux les uns avec les autres et par rapport aux systèmes de contrôle de version comme SVN et Perforce, quels problèmes devraient être considérés?
les premiers sont des systèmes distribués. Ces derniers sont des systèmes centralisés. En outre, Perforce est propriétaire tandis que tous les autres sont libres comme dans la parole .
La centralisation ou la décentralisation est un choix beaucoup plus important que tous les systèmes que vous avez mentionnés dans cette catégorie.
lors de la planification de la migration de SVN vers L'un de ces systèmes de contrôle de version distribués, quels facteurs prendriez-vous en considération?
tout d'abord, l'absence d'un bon substitut pour TortoiseSVN. Bien que Bazaar travaille sur leur propre variante de tortue , mais il n'est pas encore là, à partir de En septembre 2008.
ensuite, former les 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, tels que les trackers de problèmes, le système de construction nocturne, le système de test automatisé, etc.
très importante manquant chose dans le bazar de cp. Vous ne pouvez pas avoir plusieurs fichiers partageant la même histoire, comme dans SVN, voir par exemple ici et ici . Si vous n'avez pas l'intention d'utiliser cp, bzr est un excellent (et très facile à utiliser) remplacement pour svn.
J'utilisais Bazaar pendant un temps que j'aimais beaucoup mais c'était seulement des projets plus petits et même alors c'était assez lent. Si facile à apprendre, mais pas super rapide. Il est très x-plate-forme.
j'utilise actuellement Git que j'aime beaucoup car la version 1.6 l'a rendu beaucoup plus similaire aux autres VCS en termes de commandes à utiliser.
je pense que la principale différence pour mon expérience dans L'utilisation de DVCS est ceci:
- Git a la communauté la plus dynamique et il est fréquent de voir des articles sur Git
- GitHub vraiment roches. Launchpad.net est ok, mais rien comme le plaisir de Github
- le nombre d'outils de flux de travail pour Git a été grand. Il est intégré dans tous les sens. Il y en a pour Bzr mais pas autant ou aussi bien entretenu.
en résumé Bzr était grand quand je coupais mes dents sur DVCS mais Je suis maintenant très heureux avec Git et Github.
les systèmes de contrôle de version distribués (DVCSs) résolvent des problèmes différents de ceux des VCSs centralisés. Comparer, c'est comme comparer des marteaux et tournevis.
systèmes VCS centralisés sont conçus avec l'intention qu'il ya une Source véritable qui est béni, et donc bon. Tous les développeurs travaillent (checkout) à partir de cette source, puis ajoutent (commit) leurs modifications, qui deviennent alors également bénies. La seule différence réelle entre CVS, Subversion, ClearCase, Perforce, VisualSourceSafe et tous les autres CVCSes sont dans le flux de travail, la performance et l'intégration que chaque produit offre.
les systèmes VCS distribués sont conçus dans le but qu'un dépôt soit aussi bon qu'un autre, et que les fusions d'un dépôt à un autre ne soient qu'une autre forme de communication. Toute valeur sémantique quant au référentiel auquel il faut faire confiance est imposée de l'extérieur par le processus, et non par le par le logiciel lui-même.
le véritable choix entre l'utilisation d'un type ou l'autre est organisationnel -- si votre projet ou votre organisation veut un contrôle centralisé, alors un DVCS est un non-démarreur. Si vos développeurs sont censés travailler partout dans le pays/monde, sans connexion à haut débit sécurisée vers un dépôt central, alors DVCS est probablement votre salut. Si vous avez besoin des deux, vous êtes fsck.
votre problème principal va être que ce sont distribué SCMs, et en tant que tel exigent un peu d'un changement dans l'état d'esprit de l'utilisateur. Une fois que les gens se seront habitués à l'idée, les détails techniques et les modes d'utilisation tomberont en place, mais ne sous-estimez pas cet obstacle initial, surtout dans un contexte d'entreprise. Rappelez-vous, tous les problèmes sont des problèmes humains.
ddaa.myopenid.com Je l'ai mentionné en passant, mais je pense que cela vaut la peine de le mentionner à nouveau: Bazaar peut lire et écrire dans des dépôts SVN distants. Cela signifie que vous pouvez utiliser Bazaar localement comme preuve de concept alors que le reste de l'équipe utilise encore Subversion.
EDIT: à peu près tous les outils ont maintenant quelque façon d'interagir avec SVN, mais j'ai maintenant une expérience personnelle que git svn
fonctionne extrêmement bien. Je l'utilise depuis des mois, avec un minimum de hoquet.
il y a une bonne vidéo de Linus Torvalds sur git. Il est créateur de Git donc c'est ce qu'il promeut mais dans la vidéo, il explique ce que sont les SCM distribués et pourquoi ils sont meilleurs que les SCM centralisés. Il y a beaucoup de comparaison entre git (mercurial est considéré comme correct) et cvs/svn/perforce. Il y a aussi des questions de l'auditoire concernant la migration vers la GCA distribuée.
j'ai trouvé ce matériel instructif et je suis vendu à distributed SCM. Mais en dépit de Les efforts de Linus mon choix est impitoyable. La raison est bitbucket.org je l'ai trouvé mieux (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 outre, la vidéo est super si vous êtes nouveau sur SCMS distribués et pensez à move from SVN.