¿Cuáles son las fortalezas y debilidades relativas de Git, Mercurial y Bazar? [cerrado]


137

¿Qué ven las personas aquí como las fortalezas y debilidades relativas de Git, Mercurial y Bazar?

Al considerar cada uno de ellos entre sí y contra los sistemas de control de versiones como SVN y Perforce, ¿qué problemas deben considerarse?

Al planificar una migración de SVN a uno de estos sistemas distribuidos de control de versiones, ¿qué factores consideraría?


1
Para una comparación específica de Windows entre Mercurial y Git, vea esta pregunta: stackoverflow.com/questions/2550091/…
alexandrul

Por cierto, me gustaría ver el porcentaje de uso de diferentes sistemas DVCS.
sergiol

Respuestas:


145

Git es muy rápido, escala muy bien y es muy transparente sobre sus conceptos. El lado negativo de esto es que tiene una curva de aprendizaje relativamente empinada. Un puerto Win32 está disponible, pero no es un ciudadano de primera clase. Git expone hashes como números de versión a los usuarios; Esto proporciona garantías (ya que un solo hash siempre se refiere al mismo contenido exacto; un atacante no puede modificar el historial sin ser detectado), pero puede ser engorroso para el usuario. Git tiene un concepto único de rastrear el contenido de los archivos, incluso cuando esos contenidos se mueven entre archivos y ve los archivos como objetos de primer nivel, pero no rastrea directorios. Otro problema con git es que tiene muchas operaciones (como rebase) que facilitan la modificación del historial (en cierto sentido, el contenido al que hace referencia un hash nunca cambiará, pero las referencias a ese hash pueden perderse); A algunos puristas (incluido yo mismo) no les gusta mucho.

El bazar es razonablemente rápido (muy rápido para árboles con un historial poco profundo, pero actualmente se escala mal con la longitud del historial), y es fácil de aprender para aquellos familiarizados con las interfaces de línea de comandos de SCM tradicionales (CVS, SVN, etc.). Win32 es considerado un objetivo de primera clase por su equipo de desarrollo. Tiene una arquitectura conectable para diferentes componentes y reemplaza su formato de almacenamiento con frecuencia; Esto les permite introducir nuevas características (como un mejor soporte para la integración con sistemas de control de revisión basados ​​en diferentes conceptos) y mejorar el rendimiento. El equipo de Bazaar considera que el seguimiento de directorios y el cambio de nombre admiten una funcionalidad de primera clase. Si bien los identificadores de ID de revisión únicos a nivel mundial están disponibles para todas las revisiones, las revisiones locales de árbol (números de revisión estándar, más similares a los utilizados por svn u otros SCM más convencionales) se utilizan en lugar de hashes de contenido para identificar revisiones. Bazaar tiene soporte para "pagos ligeros", en los que el historial se guarda en un servidor remoto en lugar de copiarse en el sistema local y se hace referencia automáticamente a través de la red cuando es necesario; actualmente, esto es único entre los DSCM.

Ambos tienen alguna forma de integración SVN disponible; sin embargo, bzr-svn es considerablemente más capaz que git-svn, en gran parte debido a las revisiones de formato de backend introducidas para ese propósito. [Actualización, a partir de 2014: el producto comercial de terceros SubGit proporciona una interfaz bidireccional entre SVN y Git que es comparable en fidelidad a bzr-svn, y considerablemente más pulida; Recomiendo encarecidamente su uso sobre el de git-svn cuando el presupuesto y las restricciones de licencia lo permitan].

No he usado Mercurial ampliamente, por lo que no puedo comentarlo en detalle, excepto para notar que, como Git, tiene un direccionamiento de contenido hash para las revisiones; También como Git, no trata los directorios como objetos de primera clase (y no puede almacenar un directorio vacío). Sin embargo, es más rápido que cualquier otro DSCM, excepto Git, y tiene una integración IDE mucho mejor (especialmente para Eclipse) que cualquiera de sus competidores. Dadas sus características de rendimiento (que van un poco por detrás de las de Git) y su soporte multiplataforma e IDE superior, Mercurial puede ser atractivo para los equipos con un número significativo de miembros centrados en Win32 o con IDE.

Una preocupación al migrar desde SVN es que las interfaces de interfaz gráfica de usuario de SVN y la integración IDE son más maduras que las de cualquiera de los SCM distribuidos. Además, si actualmente hace un uso intensivo de la automatización de scripts previos a la confirmación con SVN (es decir, que requiere que se aprueben las pruebas unitarias antes de que pueda continuar una confirmación), es probable que desee utilizar una herramienta similar a PQM para automatizar las solicitudes de fusión a sus ramas compartidas.

SVK es un DSCM que usa Subversion como su almacén de respaldo y tiene una integración bastante buena con herramientas centradas en SVN. Sin embargo, tiene características de rendimiento y escalabilidad dramáticamente peores que cualquier otro DSCM importante (incluso Darcs), y debe evitarse para proyectos que puedan crecer en términos de longitud del historial o número de archivos.

[Sobre el autor: uso Git y Perforce para el trabajo, y Bazaar para mis proyectos personales y como una biblioteca incrustada; otras partes de la organización de mi empleador usan Mercurial en gran medida. En una vida anterior construí una gran cantidad de automatización en torno a SVN; antes de eso tengo experiencia con GNU Arch, BitKeeper, CVS y otros. Al principio, Git era bastante desagradable: se sentía como GNU Arch en la medida en que era un entorno de mucho concepto, a diferencia de los kits de herramientas creados para ajustarse a los flujos de trabajo elegidos por el usuario, pero desde entonces me he sentido bastante cómodo con eso].


Heya Solo quiero que sepan que cscvs todavía se está utilizando para ejecutar las importaciones de código Launchpad, y tuve la versión Canonical lanzada cuando trabajé allí.
ddaa

19

Steve Streeting del proyecto Ogre 3D acaba de (28/09/2009) publicó una entrada de blog sobre este tema en el que hace una gran comparación, incluso entregada, de Git, Mercurial y Bazaar .

Al final, encuentra fortalezas y debilidades con los tres y ningún ganador claro. En el lado positivo, le da una gran mesa para ayudarlo a decidir con qué ir.

texto alternativo

Es una lectura corta y lo recomiendo encarecidamente.


@gavenkoa, el bazar es intuitivo para la gente que viene de SVN. Si vienes de git, entonces tienes un modelo mental que está más cerca de los fundamentos del bazar pero muy, muy lejos de su interfaz. (... tener una capa de abstracción tan gruesa entre los fundamentos y la interfaz es lo que hace posible que bzr sea amigable con personas familiarizadas con el modelo SVN).
Charles Duffy

2
@CharlesDuffy Mercurial también tiene nombres intuitivos para comandos y no está muerto (el desarrollo del bazar se detuvo hace 2 años y Canonical lo rechazó, sí Git + github ganó el juego DVCS ). Nunca entiendo el esquema de nombres git, así que personalmente prefiero HG. Es demasiado difícil pelear con los amantes de Git ((
gavenkoa

@gavenkoa, los nombres de comandos principales de bzr coinciden con los SVN, así que de nuevo, no veo qué podría ser poco intuitivo sobre ellos (para un usuario de SVN). Sí, por supuesto, el desarrollo está muerto. No estoy argumentando que bzr es práctico para el uso, solo que la crítica específica hecha estaba fuera de lugar.
Charles Duffy

1
@gavenkoa, ... También se me ha sabido defender los aspectos de BitKeeper, a pesar de tener una bastante grande rencor a los desarrolladores del software / propietarios (sus bases documentado públicamente ... aunque Larry no me llama una vez para describir su final de lo sucedió, y concederé que ahora entiendo ambos lados). Solo porque defiendo un SCM no significa que realmente recomiendo que la gente lo use. :)
Charles Duffy

15

¿Qué ven las personas aquí como las fortalezas y debilidades relativas de Git, Mercurial y Bazar?

En mi opinión, la fortaleza de Git es su diseño subyacente limpio y un conjunto muy rico de características. También creo que es el mejor soporte para repositorios de varias sucursales y para administrar flujos de trabajo con muchas sucursales. Es muy rápido y tiene un tamaño de repositorio pequeño.

Tiene algunas características que son útiles pero requieren un poco de esfuerzo para acostumbrarse a ellas. Entre ellos se incluyen la etapa intermedia (índice) visible entre el área de trabajo y la base de datos del repositorio, que permite una mejor resolución de fusión en casos más complicados, comits incrementales y comits con árboles sucios; detectar cambios de nombre y copias usando heurística de similitud en lugar de rastrearlos usando algún tipo de identificación de archivo, que funciona bien y que permite culpar (anotar) que puede seguir el movimiento del código a través de los archivos y no solo los cambios de nombre al por mayor.

Una de sus desventajas es que el soporte de MS Windows se queda atrás y no está lleno. Otra desventaja percibida es que no está tan bien documentado como, por ejemplo, Mercurial, y es menos fácil de usar que la competencia, pero cambia.

En mi opinión, la fortaleza de Mercurial reside en su buen rendimiento y su pequeño tamaño de repositorio, en su buen soporte para MS Windows.

El principal inconveniente es, en mi opinión, el hecho de que las sucursales locales (sucursales múltiples en un único repositorio) siguen siendo ciudadanos de segunda clase, y de manera extraña y complicada implementa etiquetas. Además, la forma en que trata los cambios de nombre de los archivos no era óptima (pero esta migración ha cambiado). Mercurial no admite fusiones de pulpo (con más de dos padres).

Por lo que he escuchado y leído Bazar principal ventajas de son su fácil soporte para el flujo de trabajo centralizado (que también es una desventaja, con conceptos centralizados visibles donde no debería), el seguimiento de los cambios de nombre de archivos y directorios.

Su principal desventaja es el rendimiento y el tamaño del repositorio para repositorios grandes con un largo historial no lineal (el rendimiento mejoró al menos para repositorios no demasiado grandes), el hecho de que el paradigma predeterminado es un rancho por repositorio (aunque puede configurarlo para compartir datos) , y conceptos centralizados (pero eso también de lo que he escuchado cambios).

Git está escrito en C, scripts de shell y Perl, y es programable; Mercurial está escrito en C (núcleo, para rendimiento) y Python, y proporciona API para extensiones; Bazaar está escrito en Python y proporciona API para extensiones.


Al considerar cada uno de ellos entre sí y contra los sistemas de control de versiones como SVN y Perforce, ¿qué problemas deben considerarse?

Los sistemas de control de versiones como Subversion (SVN), Perforce o ClearCase son sistemas de control de versiones centralizados . Git, Mercurial, Bazaar (y también Darcs, Monotone y BitKeeper) son sistemas de control de versiones distribuidos . Los sistemas de control de versiones distribuidos permiten una gama mucho más amplia de flujos de trabajo. Permiten usar "publicar cuando esté listo". Tienen un mejor soporte para bifurcación y fusión, y para flujos de trabajo con muchas ramas. No necesita confiar en las personas con acceso de compromiso para poder obtener contribuciones de ellos de una manera fácil.


Al planificar una migración de SVN a uno de estos sistemas distribuidos de control de versiones, ¿qué factores consideraría?

Uno de los factores que es posible que desee considerar es el soporte para no interactuar con SVN; Git tiene git-svn, Bazaar tiene bzr-svn y Mercurial tiene la extensión hgsubversion.

Descargo de responsabilidad: soy usuario de Git y pequeño colaborador, y miro (y participo en) la lista de correo de git. Conozco Mercurial y Bazaar solo por su documentación, varios debates sobre IRC y listas de correo, y publicaciones de blog y artículos que comparan varios sistemas de control de versiones (algunos de los cuales se enumeran en la página de GitComparison en Git Wiki).


FYI - bzr-svn es mucho más capaz que git-svn, ya que es bidireccional: puedo ejecutar "bzr branch svn: // ...", y luego fusionar mis cambios nuevamente en el servidor svn - donde se almacenará con metadatos que otros clientes de bzr reconocerán.
Charles Duffy el

2
Soy un desarrollador hg y he estado mirando un poco el diseño de Git. Me alegra ver que ambos tratan la historia de la única manera sensata para una configuración distribuida: en un nivel alto, ambos son un gráfico acíclico de confirmaciones y, en un nivel inferior, ambos permiten confirmaciones de manifiesto que hacen referencia a archivos (blobs en Git ) Mercurial tiene ramas anónimas (que, AFAIK no existe en Git), tiene ramas marcadas (muy parecidas a las ramas de Git, pero no push / pull) y ha nombrado ramas (el nombre de la rama se registra en commit, esos tampoco en Git).
Martin Geisler el


7

Mercurial y Bazar se parecen mucho en la superficie. Ambos proporcionan un control de versión distribuido básico, como en el compromiso fuera de línea y la fusión de varias ramas, ambos están escritos en python y son más lentos que git. Hay muchas diferencias una vez que profundiza en el código, pero, para sus tareas diarias de rutina, son efectivamente las mismas, aunque Mercurial parece tener un poco más de impulso.

Git, bueno, no es para los no iniciados. Es mucho más rápido que Mercurial y Bazaar, y fue escrito para administrar el kernel de Linux. Es el más rápido de los tres y también es el más poderoso de los tres, por bastante margen. Las herramientas de manipulación de log y commit de Git no tienen comparación. Sin embargo, también es el más complicado y el más peligroso de usar. Es muy fácil perder un commit o arruinar un repositorio, especialmente si no comprende el funcionamiento interno de git.


10
Mercurial está realmente a la par con Git. El rendimiento no es una gran diferencia. Pero el bazar, es muuuucho más lento que Mercurial y Git.
Joshua Partogi el

@jpartogi: los números de rendimiento de Bazaar han mejorado mucho más rápido que sus competidores, por lo que sería cauteloso haciendo ese tipo de afirmación, particularmente con la refactorización de almacenamiento que está disponible como vista previa en las versiones actuales y programada para convertirse en predeterminada en 2.0.
Charles Duffy el

6

Eche un vistazo a la comparación realizada recientemente por los desarrolladores de Python: http://wiki.python.org/moin/DvcsComparison . Eligieron Mercurial por tres razones importantes:

La elección de ir con Mercurial se hizo por tres razones importantes:

  • Según una pequeña encuesta, los desarrolladores de Python están más interesados ​​en usar Mercurial que en Bazaar o Git.
  • Mercurial está escrito en Python, que es congruente con la tendencia python-dev de 'comer su propia comida para perros'.
  • Mercurial es significativamente más rápido que bzr (es más lento que git, aunque por una diferencia mucho menor).
  • Mercurial es más fácil de aprender para los usuarios de SVN que Bazaar.

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


1
Mozilla y Sun también usa Mercurial por la misma razón.
Joshua Partogi

2
bzr también está escrito en Python, de hecho es más lento que hg pero por un margen que se estrecha rápidamente, y como usuario de Bazaar y Mercurial, estoy / totalmente / en desacuerdo con la afirmación "más fácil de aprender".
Charles Duffy el

1
Todos siguen evolucionando. Me decidí por Bazaar para comenzar con un DCVS porque pensé que era más fácil (pero no mucho) y Launchpad.net. Fue bastante lento. Git en OSX parece estar bien, pero no es compatible con Windows. Dado que los proyectos de Python y Google ahora lo han adoptado, y debido a TortoiseHg, estoy cambiando a Mercurial. Creo que Mercurial está ganando una masa crítica sobre Bazar y lo hará allí. Y Git hará lo suyo, siempre centrado en Posix, por lo que nunca será verdaderamente dominante.
Nick

5

Sun hizo una evaluación de git , Mercurial y Bazaar como candidatos para reemplazar el Sun Teamware VCS para la base de código de Solaris. Me pareció muy interesante.


3
esas evaluaciones están algo desactualizadas, las versiones más nuevas han cambiado algunas de las desventajas establecidas allí.
hayalci

2

Una cosa muy importante que falta en el bazar es cp. No puede tener múltiples archivos compartiendo el mismo historial, como lo tiene en SVN, vea por ejemplo aquí y aquí . Si no planea usar cp, bzr es un gran reemplazo (y muy fácil de usar) para svn.


Esto falta en el diseño: no se puede agregar cp sin crear una serie de casos en los que es difícil o imposible asegurarse de hacer lo correcto al fusionarse entre una rama donde se produjo una copia y cambios y otra rama con cambios pero sin copia .
Charles Duffy

Claro, pero es algo a tener en cuenta, y sería una característica muy útil para muchos casos de uso (como dividir un archivo en dos diferentes y preservar el historial de ambos). En realidad, es la única razón por la que todavía uso la subversión para ciertos proyectos - en donde la fusión es irrelevante, pero la copia no es
Davide

2

Estuve usando Bazaar por un tiempo, lo que me gustó mucho, pero solo fueron proyectos más pequeños e incluso entonces fue bastante lento. Muy fácil de aprender, pero no súper rápido. Sin embargo, es una plataforma muy x.

Actualmente uso Git, que me gusta mucho, ya que la versión 1.6 lo hizo mucho más similar a otros VCS en términos de los comandos a usar.

Creo que las principales diferencias para mi experiencia en el uso de DVCS es esta:

  1. Git tiene la comunidad más vibrante y es común ver artículos sobre Git
  2. GitHub realmente es genial. Launchpad.net está bien, pero nada como el placer de Github
  3. La cantidad de herramientas de flujo de trabajo para Git ha sido excelente. Está integrado por todo el lugar. Hay algunos para Bzr pero no tantos o tan bien mantenidos.

En resumen, Bzr fue genial cuando me estaba cortando los dientes en DVCS, pero ahora estoy muy contento con Git y Github.


Te refieres a "ahora" muy feliz, en lugar de "no" muy feliz, ¿verdad?
Charles Duffy

Gracias Charles! Mordió un desliz freudiano allí :)
sh1mmer

1

Esta es una gran pregunta que depende mucho del contexto que le tomaría mucho tiempo escribir en uno de estos pequeños cuadros de texto. Además, los tres parecen sustancialmente similares cuando se usan para las cosas habituales que hacen la mayoría de los programadores, por lo que incluso comprender las diferencias requiere un conocimiento bastante esotérico.

Probablemente obtendrá respuestas mucho mejores si puede desglosar su análisis de estas herramientas hasta el punto en que tenga preguntas más específicas.


Entonces, tal vez una metapregunta: ¿cuáles son las preguntas que deberían formularse y los factores a considerar?
Jordan Dea-Mattson el

1

El bazar es en mi humilde opinión más fácil de aprender que git. Git tiene un buen soporte en github.com.

Creo que deberías intentar usar ambos y decidir cuál te conviene más.


1
Mercurial es tan fácil como Bazaar, relativamente rápido en comparación con git y tiene un buen soporte en Bitbucket. Entonces, ¿qué más puedes pedir?
Joshua Partogi

1

¿Qué ven las personas aquí como las fortalezas y debilidades relativas de Git, Mercurial y Bazar?

Esta es una pregunta muy abierta, lindando con el cebo de llamas.

Git es el más rápido, pero los tres son lo suficientemente rápidos. Bazaar es el más flexible (tiene soporte transparente de lectura y escritura para repositorios SVN) y se preocupa mucho por la experiencia del usuario. Mercurial está en algún lugar en el medio.

Los tres sistemas tienen muchos fanboys. Personalmente soy un fanático de Bazar.

Al considerar cada uno de ellos entre sí y contra los sistemas de control de versiones como SVN y Perforce, ¿qué problemas deben considerarse?

Los primeros son sistemas distribuidos. Estos últimos son sistemas centralizados. Además, Perforce es propietario, mientras que todos los demás son gratuitos, como en el discurso. .

Centralizado versus descentralizado es una opción mucho más importante que cualquiera de los sistemas que mencionó dentro de su categoría.

Al planificar una migración de SVN a uno de estos sistemas distribuidos de control de versiones, ¿qué factores consideraría?

Primero, la falta de un buen sustituto para TortoiseSVN. Aunque Bazaar está trabajando en su propia variante de tortuga , todavía no está allí, a partir de septiembre de 2008.

Luego, capacitar a las personas clave sobre cómo el uso de un sistema descentralizado afectará su trabajo.

Finalmente, la integración con el resto del sistema, como los rastreadores de problemas, el sistema de compilación nocturno, el sistema de prueba automatizado, etc.


1
Para el registro, la página actual dice: "Desde Bazaar versión 1.6, TortoiseBZR está incluido en el instalador oficial", por lo que parece haber madurado.
PhiLho

1

Su principal problema será que estos son SCM distribuidos y, como tales, requieren un pequeño cambio en la mentalidad del usuario. Una vez que las personas se acostumbren a la idea, los detalles técnicos y los patrones de uso encajarán, pero no subestimen ese obstáculo inicial, especialmente en un entorno corporativo. Recuerde, todos los problemas son problemas de personas.


1

ddaa.myopenid.com lo mencionó de pasada, pero creo que vale la pena mencionarlo nuevamente: Bazaar puede leer y escribir en repositorios SVN remotos. Eso significa que podrías usar Bazaar localmente como prueba de concepto mientras el resto del equipo todavía usa Subversion.

EDITAR: prácticamente todas las herramientas ahora tienen alguna forma de interactuar con SVN, pero ahora tengo una experiencia personal que git svnfunciona extremadamente bien. Lo he estado usando durante meses, con hipo mínimo.


git también tiene interfaz en SVN, pero no he tenido la oportunidad de utilizar adecuadamente todavía - utsl.gen.nz/talks/git-svn/intro.html
Cebjyre

1

Hay un buen video de Linus Torvalds en git. Él es el creador de Git, así que esto es lo que promueve, pero en el video explica qué son los SCM distribuidos y por qué son mejores que los centralizados. Hay una buena cantidad de comparación de git (se considera que mercurial está bien) y cvs / svn / perforce. También hay preguntas de la audiencia con respecto a la migración a SCM distribuido.

Encontré este material esclarecedor y me venden a SCM distribuido. Pero a pesar de los esfuerzos de Linus, mi elección es mercurial. La razón es bitbucket.org, lo encontré mejor (más generoso) que github.

Necesito decir una advertencia: Linus tiene un estilo bastante agresivo, creo que quiere ser divertido, pero no me reí. Aparte de eso, el video es excelente si eres nuevo en SCM distribuidos y piensas en moverte de SVN.

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


0

Los sistemas de control de versiones distribuidas (DVCS) resuelven diferentes problemas que los VCS centralizados. Compararlos es como comparar martillos y destornilladores.

VCS centralizado sistemas están diseñados con la intención de que haya una fuente verdadera que sea bendecida y, por lo tanto, buena. Todos los desarrolladores trabajan (finalizan) desde esa fuente y luego agregan (confirman) sus cambios, que luego se vuelven igualmente bendecidos. La única diferencia real entre CVS, Subversion, ClearCase, Perforce, VisualSourceSafe y todos los demás CVCSes está en el flujo de trabajo, el rendimiento y la integración que ofrece cada producto.

VCS distribuido sistemas están diseñados con la intención de que un repositorio sea tan bueno como cualquier otro, y que la fusión de un repositorio a otro sea solo otra forma de comunicación. Cualquier valor semántico en cuanto a qué repositorio se debe confiar se impone desde el exterior por el proceso, no por el software en sí.

La elección real entre usar un tipo u otro es organizacional: si su proyecto u organización desea un control centralizado, entonces un DVCS no es un iniciador. Si se espera que sus desarrolladores trabajen en todo el país / mundo, sin conexiones seguras de banda ancha a un repositorio central, entonces DVCS es probablemente su salvación. Si necesitas ambos, estás jodido.


Existen diferencias muy significativas entre CVS, SVN y VisualSourceSafe (por nombrar solo 3) que tienen un grave impacto en su utilidad, y estos no son solo problemas de flujo de trabajo y / o integración.
Murph

He usado los tres, y técnicamente estás en lo correcto, pero desde una perspectiva de alto nivel, mi respuesta también es válida. El control de versiones para más de un desarrollador es una herramienta organizativa; siempre que la herramienta satisfaga las necesidades de la organización, eso es todo lo que importa a largo plazo.
Craig Trader
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.