2010-10-02 23 views
32

Estoy trabajando en un proyecto en el que tengo un compromiso que introdujo una función con problemas importantes que no se descubrieron inmediatamente. Ahora quiero eliminar por completo esa revisión mientras sigo con el trabajo, pero me está costando pasar por esta fusión de 3 vías. Aquí hay un gráfico simplificado de mi proyecto.¿Cómo funciona la combinación de 3 vías en Mercurial/Meld?

 
o changeset: 134:7f81764aa03a 
| tag:   tip 
| parent:  128:451d8a19edea 
| summary:  Backed out changeset 451d8a19edea 
| 
| @ changeset: 133:5eefa40e2a29 
| | summary:  (Change I need to keep keep) 
| | 
*snip 3 commits* 
| o changeset: 129:5f6182a97d40 
|/ summary:  (Change I need to keep keep) 
| 
o changeset: 128:451d8a19edea 
| summary:  (Change that introduced a major problem) 
| 
o changeset: 127:4f26dc55455d 
| summary:  (summary doesn't matter for this question) 

Si entiendo esto correctamente, r127 y r134 son exactamente lo mismo. Cuando yo hg up -C -r 133 y luego ejecuto hg merge, Meld aparece con tres formas de uno de mis archivos: local, base y otro. local parece ser r133, pero me está costando pasar por alto lo que significa "base" y "otro".

Respuesta

34

local es R133

Otros es R134

Base es R128 (el ancestro común a ambos R133 y R 134)

Al realizar una forma 3 fusionarla compara los tres juntos para ayudarlo a decidir qué llevar y de dónde. Al ver qué cambio hay en la otra revisión y cómo era el ancestro común, puede tomar una decisión mucho más informada sobre qué conservar y qué cambiar.

+0

¿Entonces estás diciendo que una gran parte de esto será una fusión manual? – Pacerier

10

Su pregunta es realmente confusa, pero aquí hay alguna información que puede ayudarlo.

  • ¿Qué es la base?

Base es la versión no modificada de la revisión que ha comprobado y trabajado actualmente. donde posiblemente otros cambios se hayan desviado (¡puede tener revisiones entre su local actual y la base!). es justo donde la revisión más cercana donde ninguna otra horquilla se ha desviado después (el mismo padre) (en su caso r128)

  • ¿Qué es la cabeza?

Head es la última revisión en control de versiones. si trabajas solo en una sola copia, probablemente sea la base. pero un compañero de trabajo podría haber modificado el mismo archivo y haberlo registrado en el control de la versión, entonces la cabecera es posterior a su base.

  • ¿Qué es el local?

local es su versión modificada (en su caso R133)

  • ¿Cuál es la otra?

otro es el tenedor alguna/sucursal que tiene también su base como padre (en su caso R134)

  • ¿Cómo funciona el trabajo de 3 vías de combinación?

La fusión de 3 vías funciona (al menos en fusión) jerárquicamente.generalmente de izquierda a derecha como esto:

locales> Base> otro/cabeza

locales/base es sobre todo trivial, ya que es sólo lo que ha modificado

entonces se puede fusionar los cambios en la revisión de cabecera o el de su compañero de trabajo o lo que sea.

Puede haber varias otras/revisiones de la cabeza, pero no es su trabajo combinarse y, por lo tanto, comparar más de 3 vías no tiene sentido.

+12

Su definición de cabeza no es precisa para mercurial. La última revisión en mercurial se llama 'consejo'. Un consejo es siempre una cabeza, pero una cabeza no siempre es una propina. En una combinación, 'cabeza' nunca es 'base' porque 'base' es el ancestro común más reciente de los dos conjuntos de cambios fusionados. –

Cuestiones relacionadas