tortoise tag realizar estructura create branches mercurial merge

mercurial - tag - svn merge branch to trunk



Mercurial: ¿cómo puedo ver solo los cambios introducidos por una fusión? (2)

La respuesta corta: no se puede hacer esto con ningún comando de Mercurial.

La ejecución de hg diff -c 3 le mostrará los cambios entre 3 y su primer padre, es decir, el conjunto de cambios en el que se encontraba cuando ejecutó hg merge .

Esto tiene sentido cuando piensa en las ramas como algo más que simples conjuntos de cambios. Cuando ejecuta hg up 1 && hg merge 2 le está diciendo a Mercurial: "Combinar el conjunto 2 cambios 2 en el conjunto 1 cambios 1 ".

Es más obvio si estás usando ramas con nombre. Diga que el conjunto 2 cambios 2 en su ejemplo estaba en una rama llamada rewrite-ui . Cuando ejecuta hg update 1 && hg merge rewrite-ui , está diciendo: "Combine todos los cambios en la rama rewrite-ui en la rama actual". Cuando luego ejecuta hg diff -c en este conjunto de cambios, se muestra todo lo que se introdujo en la rama default (o la rama 1 que se encuentre) mediante la combinación, lo cual tiene sentido.

De tu pregunta, sin embargo, parece que estás buscando una manera de decir:

Muéstrame todos los trozos en este conjunto de cambios que no estaba presente en ninguno de sus padres, y muéstreme todos los trozos presentes en cualquiera de sus padres que no esté también presente en 3 .

Esto no es una cosa simple de calcular (ni siquiera estoy seguro de haber obtenido la descripción correcta en este momento). Sin embargo, definitivamente puedo ver cómo sería útil, así que si puede definirlo sin ambigüedades, puede convencer a uno de los contribuyentes de Mercurial que leemos SO para implementarlo.

Estoy tratando de acostumbrarme a hacer revisiones de código, pero las fusiones han dificultado el proceso porque no sé cómo pedirle a Mercurial que "muestre solo los cambios introducidos por la fusión que no estaban presentes en ninguno de sus padres. . "

O, un poco más formal (gracias a Steve Losh):

Muéstreme todos los trozos de la fusión que no estaban presentes en ninguno de sus padres, y muéstreme todos los trozos presentes en cualquiera de sus padres que no estén también presentes en 3.

Por ejemplo, supongamos que tengo un repositorio con dos archivos, ay b. Si "a" se modifica en la revisión 1, "b" se modifica en la revisión 2 (que se encuentra en una rama separada) y estos dos cambios se combinan en la revisión 3, obtendré un historial similar al siguiente:

@ changeset: 3 |/ summary: Merged. | | | o changeset: 2 | | summary: Changing b | | o | changeset: 1 |/ summary: Changing a | o changeset: 0 summary: Adding a and b

Pero si pido ver los cambios introducidos por la revisión 3, hg di -c 3 , Mercurial me mostrará lo mismo que si pidiera ver los cambios introducidos en la revisión 1, hg di -c 1 :

$ hg di -c 3 --- a/a +++ b/a @@ -1,1 +1,1 @@ -a +Change to a $ hg di -c 1 --- a/a +++ b/a @@ -1,1 +1,1 @@ -a +Change to a

Pero, obviamente, esto no es muy útil; en cambio, me gustaría que me dijeran que la revisión 3 no introdujo ningún cambio nuevo (o, si hubo un conflicto durante la fusión, me gustaría ver solo la resolución de eso). conflicto). Algo como:

$ hg di -c 3 $

Entonces, ¿cómo puedo hacer esto?

pd : sé que puedo reducir el número de fusiones en mi repositorio utilizando rebase ... Pero ese no es mi problema, mi problema es averiguar qué se cambió con una fusión.


Para realizar revisiones de código realmente desea ver solo los cambios en el proyecto que está revisando. Para ello, utilizamos una nueva rama para cada historia y utilizamos solicitudes de extracción para resaltar los cambios, habiendo fusionado todos los cambios en la rama de la historia antes de crear la solicitud de extracción. Alojamos nuestro código en bitbucket y las herramientas de solicitud de revisión / extracción son realmente muy buenas, ofreciendo una diferencia lado a lado.

Tire de las solicitudes con diferencias lado a lado