Skip to main content

Merge-Konflikte, "Relationship Issues"

Ein Merge-Vorgang führt die Inhalte zweier Branches zusammen, die einen gemeinsamen Vorfahren haben, aber unterschiedliche Änderungen erhalten haben. Gezieltes Mergen von Branches wird in erster Linie in der Ansicht Git-Branches mit dem Befehl Merge durchgeführt. Ein Merge-Vorgang ist außerdem in einer Pull-Aktion beinhaltet.

Unterschiedliche Stände von Quell- und Zielbranch werden beim Merge-Vorgang festgestellt und als Konflikt bezeichnet. Eine durch das Mergen entstandene unzulässige Projektstruktur wird als "Relationship Issue" festgestellt. Je nach eingestellter Option versucht CODESYS Git diese Konflikte soweit möglich automatisch zu lösen, oder wird diese Lösung dem Anwender überlassen.

Nach erfolgter Konfliktlösung versucht CODESYS Git immer ein Resynchronisieren, also ein erneutes Einlesen des Projekts aus der Projektablage. Dazu wird das in CODESYS geöffnete Projekt geschlossen und ein neues aus der Ablage erstellt.

CODESYS Git unterscheidet zwei Typen von aufzulösenden Problemen, die beim Mergen auftreten können:

  • Konflikte: Reine Git-Konflikte: Ein oder mehrere Objekte erhielt(en) konkurrierende Änderungen. Es kann sich um unterschiedliche Änderungen im Inhalt eines Objekts handeln.

    Die grundlegende "Merge-Konflikt-Strategie" ist in den Git-Merge-Optionen in der Ansicht Git-Branches festgelegt. Davon abhängig läuft entweder eine soweit möglich automatische Konfliktlösung, oder eine grundsätzliche Übernahme in eine bestimmte Richtung, oder eine händisch vorzunehmende Behandlung der Konflikte.

    Im Fall der händischen Konfliktlösung werden die konfliktbehafteten Objekte in der AnsichtStatus & Vormerken als solche dargestellt. Durch einen Doppelklick auf ein konfliktbehaftetes Objekt wird eine Vergleichsansicht geöffnet. In der Vergleichsansicht sind die aus den beiden Branches stammenden Änderungen einander gegenüber gestellt. Inhaltliche Unterschiede können Sie durch gezieltes Übernehmen bereinigen. Wenn es sich um reine Namensraumkonflikte handelt, müssen Sie diese durch Umbenennen oder Löschen im Projektbaum lösen. Mit Anwenden wird die Konfliktlösung durchgeführt. Danach wird das zuvor konfliktbehaftete Objekt automatisch in den Bereich Vorgemerkte Änderungen verschoben.

  • "Relationship Issues": Konkurrierende Änderungen haben zu einer unzulässigen Projektstruktur in CODESYS geführt, was nicht durch die Git-Merge-Funktion behandelt werden kann. Möglicherweise wurde extern im Dateisystem mit externen Werkzeugen geändert. Oder es wurde aus verschiedenen Branches eine konkurrierende Erzeugung eines Objekts gleichen Typs und/oder gleichen Namens committet, das daraufhin im CODESYS-Projekt im gleichen Namensraum zu liegen kommt. Dies ist in einem CODESYS-Projekt nicht erlaubt. Oder es entstand eine unzulässige Vater-Kindobjekt-Beziehung. Eine weitere Möglichkeit: Relationship Issues stammen noch aus früheren Merges, bei denen sie bewusst ignoriert wurden, um zunächst weiterarbeiten zu können.

    Beispielsweise entsteht die Situation, dass 2 Alarmkonfigurationen unter einem Gerät eingehängt sind, was nicht zulässig ist.

    Der Benutzer muss die Projektstruktur mit den verfügbaren Mitteln (Mergen eines Objekts in ein anderes, Löschen, Umbenennen, Verschieben) händisch korrigieren, um wieder ein konsistentes Projekt zu erhalten.

    Wichtig

    Ab Version 1.2.0.0 kann ein Projekt auch mit vorliegenden Relationship Issues weiter bearbeitet werden (Ignorieren). Achtung: In Folge werden in einem solchen Fall Änderungen am Projekt durch ein späteres Resynchronisieren wieder verworfen. Grund: Der Resynchronisierungsvorgang lädt aus dem Dateisystem diejenige Projektversion, die vor dem Ignorieren des Relationship Issues abgelegt worden war.

In der Ansicht Status & Vormerken können Sie als Anwender einen Konflikt folgendermaßen prüfen und bearbeiten:

  • Im Kontextmenü eines konfliktbehafteten Objekts gibt es hilfreiche Befehle. Die aktuelle Auswahl hängt von der Situation ab:

    Alle betroffenen Objekte anzeigen / Dieses Objekt anzeigen: Die Objekte/das Objekt werden/wird in der Ansicht Geräte des Projekts markiert.

    Auflösen mit ihrem: Der Stand des Quell-Branches wird übernommen

    Auflösen mit Unserem: Der Stand des Ziel-Branches wird übernommen.

    Automatisch auflösen: CODESYS Git versucht die Änderungen selbst zu konsolidieren.

    Als aufgelöst markieren: Das aktuell im Projekt vorhandene Objekt wird übernommen und als Lösung den Konflikts betrachtet. Das entsprechende Objekt wurde vorgemerkt.

    Relationship Issue ignorieren: Der Relationship Issue wird bis zur nächsten Resynchronisation ignoriert. Das kann sinnvoll sein, wenn es zunächst nur darum geht, an einem Projekt weiterarbeiten zu können und der Konflikt dabei keine Rolle spielt.

  • Ein Doppelklick auf ein konfliktbehaftetes Objekt öffnet die Vergleichsansicht von Quell- und Zielbranchinhalt. Im Fall von konkurrierenden Inhalten kann hier wie gewünscht von einem Branch in den anderen übernommen werden.

In der Ansicht Meldungen können Sie mit Doppelklick auf eine Fehlermeldung zu einem Konflikt das betroffene Objekt öffnen.