Mercurial, il conflitto, la fusione, ulteriori conflitti più tardi, non Mercurial ricorda risoluzione iniziale?

StackOverflow https://stackoverflow.com/questions/4016639

Domanda

Immaginate questo scenario:

  1. Alice e Bob entrambi i cloni di un repository Mercurial centrale, contenente il file di testo 1
  2. Sia Alice e Bob apporta una modifica alla stessa riga nel file, e commit
  3. spinte Bob indietro al repository centrale, ma non Alice
  4. Alice ora tira nel suo repository, si accorge ora ha due teste, e si fonde
  5. Dal momento che l'unione è un conflitto, si risolve il conflitto
  6. Alice poi impegna, ma non spinge
  7. Bob rende ora ulteriori modifiche al file, in qualche altra posizione del file (es. In nessun posto vicino i cambiamenti iniziali) e si impegna, e spinge
  8. Alice, nel suo file di fusione, fa un cambiamento simile nella stessa posizione Bob appena cambiato, e commit
  9. tira Alice, e scoprire ancora un altro repository dual-headed, lei si fonde

Ecco una visione diversa dello scenario sopra

(i numeri dopo mezzo "cambiamento" che la persona cambiata "porzione X" del file. Se entrambi gli utenti hanno cambiato la stessa porzione, abbiamo un conflitto di unione avanti, se hanno cambiato diversi, non 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 ???

A questo punto, la mia domanda è questa:

  • Saranno gli strumenti che si fondono prendere la sua prima risoluzione si fondono in considerazione? Dal momento che Bob mai tirato in cambiamenti di Alice, la sua copia è ancora privo di qualsiasi dei cambiamenti Alice ha fatto, il suo cambiamento iniziale (che era in conflitto con Bob), la sua unione, e il suo ultimo cambiamento, che è in conflitto con l'ultima variazione di Bob .

Se avessi semplicemente preso la versione di Bob del file, e la versione di Alice del file, e dato a qualsiasi merge programma, sarebbe bandiera entrambi i cambiamenti come in conflitto.

In altre parole, sarà la prova strumento di conflitto di chiedere Alice per risolvere sia il conflitto originale e quello nuovo, oppure solo quello più recente?

sto cercando di indovinare ( Non ho provato questo, comunque tentare di costruire un qualche tipo di script di test per testare questo problema ) che Mercurial chiederà solo Alice per risolvere l'ultimo conflitto.

Che cosa succede se devo configurare Mercurial di usare un programma di terze parti diff / merge? Sarà questo si applicano ancora? Per esempio, ho configurato la mia installazione di utilizzare Beyond Compare , farò i due file (Bob è solo con i suoi cambiamenti e Alice con la sua Modifiche + la risoluzione merge) essere somministrato con o senza la risoluzione attuale iniziale? In altre parole, se si utilizza Beyond Compare , sarà la cosa giusta accadere anche qui (ammesso che fa a tutti.)

È stato utile?

Soluzione

Mercurial richiede solo che l'ultimo conflitto essere risolto, e che funziona bene con gli strumenti di cambiamento esterno.

Quando Alice fa la sua seconda unione, sta fondendo il suo proprio merge precedente con la nuova Delta di Bob e solo che le necessità di cambiamento da integrare nuovamente.

Schema davvero chiara, BTW. Grazie

Altri suggerimenti

E 'solo andando a chiedere Alice di cambiare l'ultimo conflitto.

La ragione di questo è la seguente:

Ha già MODIFICA 1 da BOB è nella sua storia in modo da non provare a cambiare ancora una volta che il codice. Esso funziona.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top