¿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).