tortoise create svn

create - ¿Cuáles son las diferencias entre fusionar un rango de revisiones vs. reintegrar en SVN?



svn merge branch to trunk (3)

He leído documentación y blogs sobre la diferencia entre combinar una serie de revisiones y reintegrar, pero no obtuve una sola cosa.

¿Cuál es la diferencia en la fusión si elijo una u otra forma para fusionarme de una rama a otra? ¿Por qué fusionar un rango de revisiones no funciona en algunos casos, pero reintegra exitosamente fusiones de rama a troncal?


--reintegrate debe ser el predeterminado; si realmente hay alguna razón por la que quieras hacer una fusión de sincronización diferente a --reintegrat, simplemente podrían proporcionar una sincronización en su lugar. --reintegrate es lo que querrías casi todo el tiempo de todos modos, excepto en los casos en que quieras elegir. (Estos son solo mis 2 centavos, no me considero un experto en fusión, ni entiendo por qué su sincronización matemática sería diferente a la matemática de reintegración). Cuando me fusiono, casi siempre quiero y solo quiero los cambios en la rama de origen, que aún no se ha fusionado en la rama de destino ...


Por un lado, la forma en que SVN calcula las diferencias para aplicar es diferente entre los dos métodos. Normalmente, cuando aplica un rango de revisiones X a Y de un tronco a la rama en forma de selección, por ejemplo, SVN calcula las diferencias entre las revisiones de X a Y en el tronco y las aplica a la rama. También podría hacer lo mismo en la otra dirección, aplicando los cambios de la rama al tronco de esta manera.

Sin embargo, cuando reinserta una rama en el tronco, SVN realiza un tipo diferente de cálculo. En lugar de calcular la diferencia entre las revisiones X a Y en una rama y aplicar esos cambios al tronco, SVN simplemente calcula la diferencia entre toda la rama y el tronco. Suponiendo que ha sido diligente en mantener la rama actualizada con los cambios realizados en el tronco, la diferencia del cálculo de reintegración entre el tronco y la rama será exactamente todos los cambios realizados en la rama que aún no están en el baúl.

De la documentación de SVN 1.6 (Reintegración de una sucursal):

Sin embargo, al fusionar su rama de nuevo al tronco, las matemáticas subyacentes son bastante diferentes. Su rama de características ahora es una mezcolanza de cambios troncales duplicados y cambios de ramas privadas, por lo que no hay un rango contiguo simple de revisiones para copiar. Al especificar la opción --reintegrate , le está pidiendo a Subversion que replique cuidadosamente solo aquellos cambios exclusivos de su sucursal. (Y, de hecho, lo hace comparando el último árbol de troncos con el último árbol de ramificación: ¡la diferencia resultante es exactamente su rama de cambios!)

No estoy del todo seguro (lo he olvidado a lo largo de los años), pero creo que en versiones anteriores de SVN (como antes de 1.5?), No existía una opción de seguimiento de fusión y ninguna opción de reintegración de sucursales, por lo que si querías fusionarte una bifurcación completa en el tronco, tenía que hacerlo manualmente usando el método del rango de revisiones en su lugar. Estoy intentando buscar esto en los documentos, pero aún no he encontrado una referencia al respecto.

Lectura adicional

Ver también Re: ¿Por qué es necesario --reintegrate para svn 1.5 fusionar? , que fue señalado en este comentario .


reintegrate está destinado a ser utilizado cuando estaba trabajando en una rama de características, y está hecho. El siguiente paso debería ser eliminar la rama. Antes de la reintegración, debe fusionar el destino (la mayoría de las veces, el enlace troncal) en la sucursal utilizando el "rango de revisiones" para fusionar todas las revisiones elegibles a la sucursal. Esto se describe ligeramente arriba del párrafo de reintegrate .

La combinación de "rango de revisiones" está destinada a las revisiones de selección de cerezas que deberían ir a una determinada rama, por ejemplo, para corregir errores en una rama de versión estable.