Git: Zusammenführen und Submodule

8

Sagen wir, ich habe zwei Zweige in RepoX namens BranchA und BranchB. RepoX hat auch ein Submodul namens SubmoduleY.

BranchA hat SubmoduleY bei Revision 'abc', BranchB hat SubmoduleY bei Revision 'def'.

Angenommen, ich möchte BranchA in BranchB zusammenführen, aber ich möchte BranchBs SubmoduleY auf seine ursprüngliche Revision von 'def' verweisen lassen. Ich sehe ein paar Möglichkeiten, dies zu tun:

Methode 1:

  1. Ausleihe BranchB.
  2. Verschieben Sie SubmoduleY in die Revision 'abc', um die eigentliche Zusammenführung schmerzlos zu machen (wir wollen jetzt keine Zusammenführung auf Submodulebene vornehmen).
  3. Übergeben Sie die neue Revision für SubmoduleY (wir können sie nicht für die Zusammenführung schweben lassen).
  4. Fügen Sie BranchA in BranchB zusammen. Beheben Sie alle Konflikte.
  5. SubmodulY zurück zur Revision 'def' verschieben.
  6. Übergeben Sie die neue Revision für SubmoduleY.
  7. Push-Änderungen bis zum Hauptrepo.

Methode 2:

Wie Methode 1, aber anstatt Schritt 6 auszuführen, müssen Sie das zusätzliche Submodul-Commit aus Schritt 3 neu erstellen und entfernen.

Beide scheinen ärgerliche Nachteile zu haben:

Methode 1 schreibt zwei zusätzliche Commits in den Verlauf.

Methode 2 vergisst alle Änderungen, die mit Submodul-Revisionen vorgenommen werden, da diese Commits entfernt werden. Daher müssen spätere Zusammenführungen wieder mit einigen Problemen fertig werden.

Gibt es einen besseren Weg?

    
Ben 07.12.2010, 18:08
quelle

1 Antwort

7

Sie könnten eine Variante für Ihre Methode 1 machen, aber führen Sie das Commit durch, das die Änderung in die Submodulversion (in Ihrem Schritt 6) mit --amend einführt, so dass es den Zustand des Submoduls im Merge-Commit ändert. Mit anderen Worten, das wäre:

%Vor%

Beachten Sie, dass ich nicht versucht habe, zu vermeiden, die Submodule in verschiedenen Versionen vor dem Zusammenführen zu haben, wie Sie in Ihrer Frage vorgeschlagen haben. Wenn es einen Konflikt gibt, können Sie einfach das Submodul unter def hinzufügen, um es zu lösen. Wenn es keinen Konflikt gibt, sollten die oben genannten Schritte funktionieren.

    
Mark Longair 08.12.2010, 16:55
quelle

Tags und Links