SVN admite fusiones históricas, entonces, ¿cómo es mejor Mercurial?

Posible duplicado:
Fusión: hg / git vs. svn

Hola,

Soy un usuario de SVN desde hace mucho time y he estado escuchando mucho de brou ha ha con respecto a los sistemas de control de versiones descentralizados y mercuriales en general. La principal característica que conozco es que fusionarse en Mercurial es mucho más fácil porque registra información para cada fusión, por lo que cada fusión sucesiva es consciente de las anteriores.

Ahora, como se indica en el libro rojo , en la sección relacionada con la fusión, SVN ya lo admite con mergeinfo. Ahora no he usado esta característica (aunque quería, nuestra versión de repos no era lo suficientemente reciente) pero ¿esta característica SVN es particularmente diferente a la que ofrece Mercurial?

Para cualquiera que no sepa, el flujo de trabajo sugerido para la fusión histórica en svn es este:

  1. twig desde el tronco de desarrollo para hacer su propia cosa.

  2. Combine regularmente los cambios del tronco en su sucursal para mantenerse actualizado.

  3. Combina cuando hayas terminado con mergeinfo para suavizar el process.

Sin fusión de datos históricos, esto es una pesadilla porque la comparación se basa estrictamente en las diferencias en los files y no tiene en count los pasos que se toman en el path. Por lo tanto, cada cambio en el tronco de desarrollo te pone en un posible conflicto cuando te fusionas.

Ahora lo que me gustaría saber es:

¿La fusión con Mercurial proporciona una ventaja significativa cuando se compara con mergeinfo en SVN o es solo una gran cantidad de air caliente sobre nada?

¿Alguien ha usado la function mergeinfo en SVN y qué tan buena es en realidad en la práctica?

Como mencioné en los comentarios, esta pregunta SO casi lo resume, pero vale la pena señalar la documentation exacta de Subversion (1.6 más reciente) que establece la limitación de fusión:

  • Fusión básica (sic) / Reintegración de una sucursal :
     svn merge --reintegrate ^ / branches / my-calc-branc

una vez que se realiza una fusión de --reintegrate de una twig a otra, la twig ya no se puede usar para realizar más trabajos. No es capaz de absorber correctamente los nuevos cambios en el tronco, ni puede reintegrarse adecuadamente al tronco nuevamente.

¿Qué? Si trabajó un poco más en esa twig desde la última fusión al tronco, ya no puede hacer una segunda fusión --reintegrate .
Tienes que crear otra twig o usar una syntax de recolección de cerezas con otra opción para mantenerla viva.

  • Fusión anticipada

La conclusión te dice todo lo que necesitas saber:

La conclusión es que la function de seguimiento de fusión de Subversion tiene una implementación interna extremadamente compleja , y la propiedad svn:mergeinfo es la única window que el usuario tiene en la maquinaria. Debido a que la function es relativamente nueva, pueden aparecer una cantidad de casos extremos y posibles comportamientos inesperados.

Por ejemplo, a veces mergeinfo se generará al ejecutar un simple command svn copy o svn move .

  • Algunas veces mergeinfo aparecerá en files que no esperaba que fueran tocados por una operación.
  • Algunas veces mergeinfo no se generará en absoluto, cuando usted lo espera.

Además, la gestión de los metadatos mergeinfo tiene:

  • un set completo de taxonomías y comportamientos a su alnetworkingedor, como mergeinfo "explícito" frente a "implícito", revisiones "operativas" frente a "inoperativas",
  • mecanismos específicos de mergeinfo "elisión"
  • e incluso "inheritance" de directorys padre a hijo.

Comparemos eso con un DVCS:

Simplemente fusiona ya;)

Eso no significa que SVN no sepa cómo fusionarse (para el flujo de trabajo de fusión simple, hará el trabajo), pero la complejidad de su mecanismo subyacente restringirá en efecto el uso de twigs y fusiones, haciendo que las pocas se fundan de manera justa. trivial.
Por el contrario, la facilidad de fusionar operaciones en DVCS boostá el uso de las sucursales y la complejidad del escenario de fusión, que ya no es un problema.