Mercurial, les conflits, la fusion, les conflits plus tard, ne se souvient Mercurial résolution initiale?

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

Question

Imaginez ce scénario:

  1. Alice et Bob clones Un dépôt Mercurial maître central, contenant le fichier texte 1
  2. Alice et Bob fait un changement à la même ligne dans le fichier, et commits
  3. Bob pousse dans le dépôt central, mais pas Alice
  4. Alice tire maintenant dans son dépôt, elle remarque a maintenant deux têtes, et se confond
  5. Depuis la fusion est un conflit, elle résout le conflit
  6. Alice engage alors, mais ne pousse pas
  7. Bob fait maintenant d'autres modifications du fichier, dans un autre emplacement du fichier (ie. Loin des changements initiaux) et archivages, et expulse
  8. Alice, dans son dossier fusionné, fait un changement similaire dans le même endroit Bob a juste changé, et commits
  9. Alice tractions, et de découvrir encore un autre dépôt bicéphale, elle fusionne

Voici une vue différente du scénario ci-dessus

(les chiffres après « changement » signifie que la personne a changé « partie X » du fichier. Si les utilisateurs ont changé la même partie, nous avons avant un conflit de fusion, s'ils ont changé différents, pas autant)

    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 ce moment, ma question est la suivante:

  • Est-ce que les outils à la fusion prendre sa première résolution de fusion en compte? Depuis Bob n'a jamais tiré dans les changements d'Alice, sa copie est encore vide de l'une des modifications Alice a fait, son changement initial (qui était en conflit avec Bob), sa fusion et son dernier changement, qui est en conflit avec le dernier changement de Bob .

Si j'avais simplement pris la version de Bob du fichier, et la version d'Alice du fichier, et donné à toute fusion-programme, il signalerais les changements que dans les conflits.

En d'autres termes, sera l'essai de l'outil de conflit pour demander à Alice de résoudre à la fois le conflit d'origine et le nouveau, ou seulement le dernier?

Je devine ( Je n'ai pas essayé, en essayant toujours de construire une sorte de script de test pour tester ce problème ) que Mercurial ne demandera Alice de résoudre le dernier conflit.

Que faire si je configure Mercurial utiliser un programme 3ème partie diff / fusion? Est-ce que cela s'applique encore? Par exemple, j'ai configuré mon installation à utiliser Beyond Compare , est-ce les deux fichiers (Bob est avec seulement ses changements et Alice avec elle change + la résolution de fusion) être donné avec ou sans la résolution initiale présente? En d'autres termes, si vous utilisez Beyond Compare , sera la bonne chose arriver ici aussi (en supposant qu'il fait à tout.)

Était-ce utile?

La solution

Mercurial exigera seulement que le dernier conflit soit résolu, et cela fonctionne très bien avec des outils de changement externes.

Quand Alice fait son deuxième fusion, elle fusionnant sa fusion possède précédente avec le nouveau delta de bob et seulement que les besoins de changement à intégrer à nouveau.

diagramme vraiment clair, BTW. Merci

Autres conseils

Il va seulement demander à Alice de changer le dernier conflit.

La raison est comme suit:

Elle a déjà CHANGEMENT 1 de BOB est dans son histoire afin de ne pas essayer de changer ce code. Il fonctionne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top