2010-10-25 20 views
5

Imagínese este escenario:Mercurial, conflicto, fusión, conflictos posteriores más adelante, ¿Mercurial recuerda la resolución inicial?

  1. Alice y Bob ambos clones un master repositorio central mercurial, que contiene 1 archivo de texto
  2. Tanto Alice y Bob realiza un cambio en la misma línea en el archivo, y se compromete
  3. Bob empuja de nuevo al depósito central, pero no Alice
  4. Alice ahora se detiene en su repositorio, avisos que ahora tiene dos cabezas, y se funde
  5. Dado que la fusión se produce un conflicto, se resuelve el conflicto
  6. Alice luego confirma pero no empuja
  7. Bob ahora realiza más cambios en el archivo, en alguna otra ubicación del archivo (es decir. en ninguna parte cerca de los cambios iniciales) y confirma, y ​​empuja
  8. Alicia, en su archivo fusionado, hace un cambio similar en la misma ubicación que Bob acaba de cambiar, y confirma
  9. Alicia tira, y descubre otro repositorio de doble cabeza, se fusiona

Aquí es una visión diferente de la situación anterior

(los números después de "CAMBIO" significa que la persona ha cambiado "porción X" del archivo. Si los usuarios cambian la misma porción, tenemos un conflicto de fusión por delante, si cambiaron diferente, no tanto)

 
    Alice     Bob 
    CLONE MASTER    CLONE MASTER 
    ----------------------------------------- 
    CHANGE 1        <-----+ 
    COMMIT          +-- upcoming merge conflict 
    ----------------------------------------- | 
          CHANGE 1  <-----+ 
          COMMIT 
          PUSH 
    ----------------------------------------- 
    PULL         <-- Bob's change +1 head 
    MERGE         <-- Attempt to get rid of extra head 
    RESOLVE CONFLICT      <-- Resolve merge conflict 
    COMMIT 
    ----------------------------------------- 
          CHANGE 2  <-----+ 
          COMMIT    +-- yet another merge 
          PUSH    | conflict ahead 
    ----------------------------------------- | 
    CHANGE 2        <-----+ 
    COMMIT 
    PULL         <-- Bob's change, again +1 head 
    MERGE         <-- Attempt to get rid of extra head 
    RESOLVE ??? 

En este punto, mi pregunta es la siguiente:

  • ¿Las herramientas para fusionar llevarla primera resolución de combinación en cuenta? Como Bob nunca hizo los cambios de Alice, su copia sigue sin tener en cuenta los cambios que Alice hizo, su cambio inicial (que estaba en conflicto con Bob), su fusión y su último cambio, que está en conflicto con el último cambio de Bob. .

Si simplemente hubiera tomado la versión de Bob del archivo, y la versión de Alice del archivo, y dado a cualquier programa de fusión, marcaría ambos cambios como en conflicto.

En otras palabras, ¿la herramienta de conflicto intentará pedirle a Alice que resuelva tanto el conflicto original como el nuevo, o solo el último?

Supongo ( No he intentado esto, todavía intento construir algún tipo de script de prueba para probar este problema ) que Mercurial solo le pedirá a Alice que resuelva el último conflicto.

¿Qué sucede si configuro Mercurial para utilizar un programa de difusión/combinación de terceros? ¿Esto todavía se aplicará? Por ejemplo, he configurado mi instalación para usar Beyond Compare, ¿los dos archivos (Bob con solo sus cambios y los de Alice con sus cambios + la resolución de fusión) se darán con o sin la resolución inicial presente? En otras palabras, si usa Beyond Compare, ocurrirá lo correcto aquí (suponiendo que lo haga)

Respuesta

5

Mercurial solo requerirá que se resuelva el último conflicto, y que funcionará bien con las herramientas de cambio externas.

Cuando Alice realiza su segunda fusión, está fusionando su propia combinación anterior con el nuevo delta de bob y solo ese cambio debe integrarse de nuevo.

Diagrama realmente claro, por cierto. Gracias

+0

Bien, entonces el escenario no representará ningún problema, ¿no será cada vez más difícil fusionar los cambios en archivos "ocupados"? –

+0

@Lasse V. Karlsen en absoluto. – msarchet

+0

Sí, es un flujo de trabajo bastante normal. Lo ideal es que Bob mejore haciendo su parte de tirar y fusionar, pero cuando bob es un proyecto externo, no siempre es posible. Funciona genial. –

2

Solo va a pedirle a Alice que cambie el último conflicto.

La razón de esto es la siguiente:

Ella ya tiene CAMBIO 1 de Bob es en su historia para que no se trate de cambiar el código de nuevo. Funciona.

Cuestiones relacionadas