Mercurial, Konflikte, Zusammenführung, weitere Konflikte später, wird Mercurial erinnern anfängliche Auflösung?

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

Frage

Stellen Sie sich folgendes Szenario vor:

  1. Alice und Bob beide Klone ein zentrales Master-Mercurial-Repository, mit 1 Textdatei
  2. Sowohl Alice und Bob macht eine Änderung an der gleichen Zeile in der Datei, und Commits
  3. Bob schiebt zurück zur zentralen Repository, aber nicht Alice
  4. Alice zieht jetzt in ihr Repository, bemerkt sie zwei Köpfe jetzt hat, und verschmilzt
  5. Da die Zusammenführung ein Konflikt ist, löst sie den Konflikt
  6. Alice begeht dann aber nicht schieben
  7. Bob macht nun weitere Änderungen an der Datei, in einem anderen Speicherort der Datei (dh. Nirgendwo in der Nähe der ersten Veränderungen) und Commits und drückt
  8. Alice in ihrer Datei zusammengefügt, hat eine ähnliche Änderung in der gleichen Position Bob gerade geändert, und Commits
  9. Alice zieht, und noch eine weitere zweiköpfige Repository zu entdecken, sie verschmilzt

Hier ist eine andere Sicht auf die oben beschriebene Szenario

(die Zahlen nach „CHANGE“ bedeutet, dass die Person geändert „Teil X“ der Datei. Wenn beide Benutzer denselben Teil geändert, wir haben einen merge Konflikt voraus, wenn sie unterschiedlich verändert, nicht so viel)

    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 ???

An diesem Punkt meine Frage lautet:

  • Werden die fusionierenden Werkzeuge nehmen ihre erste merge Auflösung berücksichtigt? Da Bob nie in Alices Änderungen gezogen, ist sein Exemplar noch frei von jedem der Alice verändert hat, ihre erste Änderung (die mit Bobs in Konflikt war), sie verschmelzen, und ihre letzte Änderung, die mit Bobs letzter Änderung in Konflikt .

Wenn ich hatte einfach Bob Version der Datei genommen, und Alices Version der Datei, und da in jedes Merge-Programm, es würde Flag beiden Änderungen in Konflikt.

Mit anderen Worten, wird das Konflikt-Tool versucht Alice fragt sowohl den ursprünglichen Konflikt und die neuen zu lösen, oder nur die neuesten ein?

Ich vermute ( Ich habe nicht versucht, noch eine Art von Testskript zu bauen versuche, dieses Problem zu testen ), dass Mercurial nur Alice fragt den neuesten Konflikt zu lösen.

Was passiert, wenn ich konfigurieren Mercurial eine 3rd-Party-diff / merge-Programm verwenden? Wird dies noch bewerben? Zum Beispiel habe ich meine Installation konfiguriert Beyond Compare zu verwenden, werden die beiden Dateien (Bob seine Änderungen mit nur ist und Alices mit ihr die Zusammenführung Auflösung Änderungen +) mit oder ohne die anfängliche Auflösung vorhanden gegeben werden? Mit anderen Worten, bei Verwendung von Beyond Compare , wird die richtige Sache auch hier passieren (vorausgesetzt, es überhaupt tut.)

War es hilfreich?

Lösung

Mercurial nur verlangen, dass der letzte Konflikt gelöst werden, und das wird gut funktionieren mit externen Wechselwerkzeugen.

Wenn Alice ihre zweite merge tut, sie verschmelzen ihre eigene frühere Zusammenführung mit Bobs neuen Delta und nur, dass der Wandel Bedürfnisse neu integriert werden.

Wirklich klar Diagramm, BTW. Dank

Andere Tipps

Es wird nur Alice fragen, den neuesten Konflikt zu ändern.

Der Grund hierfür ist wie folgt:

Sie hat bereits CHANGE 1 von BOB es in ihrer Geschichte ist, damit es nicht wieder versuchen, diesen Code zu ändern. Es funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top