External Sync / How to... / Konflikte beheben / Gleichzeitige Änderungen an einer Vorlage / Unterschiedliche Bereiche (Disjunktion)

Gleichzeitige Änderung an einer Vorlage, unterschiedliche Bereiche (Disjunktion)

Inhaltsverzeichnis

In diesem Szenario wird die Vorgehensweise der Konfliktbehandlung illustriert, wenn die gleichzeitige Arbeit an einer Vorlage durch mehrere Entwickler zu unterschiedlichen Änderungen an den jeweils lokalen Arbeitsversionen der Vorlage führt.

Bei konfliktären Änderungen an unterschiedlichen Stellen derselben Datei wird der Konflikt außerhalb von FirstSpirit, beim Überführen der lokalen Änderungen in das Git-Repository, vom Git-Client per Merge behoben.

Ausgangssituation

Im FirstSpirit-Projekt existiert eine Seitenvorlage page_text, dessen Ausgabekanaldefinition „HTML“ folgenden Text enthält:

Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5

Diese Seitenvorlage ist in den Projektinstanzen beider Entwickler im gleichen Stand vorhanden.

Auftreten des Konfliktfalls

Entwickler A

  1. Modifikation eines FirstSpirit-Elements
    Entwickler A ändert den Inhalt des Ausgabekanals in der Seitenvorlage page_text
    Zeile 1
    Zeile 2 A
    Zeile 3
    Zeile 4
    Zeile 5
  2. Export der Änderungen ins Dateisystem
    Entwickler A exportiert per fs-cli den Projektstand ins lokale Dateisystem (Git-Repository)
    fs-cli -p DevProject -sd "D:\Git\DevProject" export templatestore
  3. Änderungen ins Git-Repository überführen
    Entwickler A überträgt die Änderungen ins Git-Repository
    git commit -a -m "changed page_text"
    git push

Entwickler B

  1. Modifikation eines FirstSpirit-Elements
    Inhalt des Ausgabekanals verändern an anderer Stelle als Entwickler A
    Zeile 1
    Zeile 2
    Zeile 3
    Zeile 4 B
    Zeile 5
  2. Export der Änderungen ins Dateisystem
    Entwickler B exportiert per fs-cli den Projektstand ins lokale Dateisystem (Git-Repository)
    fs-cli -p DevProject -sd "D:\Git\DevProject" export templatestore
  3. Änderungen ins Git-Repository überführen
    Entwickler B überträgt die Änderungen ins Git-Repository
    git commit -a -m "export page_text"
    git push

Er erhält folgende Log-Meldung:

$ git push
To ssh://firstspirit.example/externalsync
! [rejected] myBranch -> ts/sync-test (non-fast-forward)
error: failed to push some refs to 'ssh://fsgit@ssh://test.domain.com/git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Diese Meldung zeigt an, dass ein Konflikt aufgetreten ist: Im Repository ist an einer anderen Stelle der einzucheckenden Datei eine weitere Änderung (von Entwickler A) vorhanden, die in der lokalen Version (aus Projekt B) nicht vorliegt.

Konfliktlösung

Update

Die Behandlung dieses Konfliktfalls kann in diesem Fall automatisch durch den Git-Client erfolgen.

Aktualisierung des lokalen Git-Repositorys
Entwickler B führt eine Aktualisierung der Projektdaten gegen das Git-Repository aus
git pull

Beim Pull-Vorgang führt der Git-Client automatisch einen Merge durch. Meldung des Git-Client auf der Kommandozeile, z. B.:

Auto-merging TemplateStore/PageTemplates/page_text/ChannelSource_HTML_html.html
Merge made by the 'recursive' strategy.

Import

Entwickler B sollte das Ergebnis des durchgeführten Auto-Merge nun fachlich prüfen und danach die Änderungen an der Seitenvorlage in das Repository überführen.

Import der Inhalte aus dem Dateisystem ins FirstSpirit-Projekt
Entwickler B
fs-cli -p DevProject -sd "D:\Git\DevProject" import

Nach dem Import sollte Entwickler B das Ergebnis fachlich prüfen.

Export

Export der Änderungen ins Dateisystem
Entwickler B exportiert per fs-cli den Projektstand ins lokale Dateisystem
fs-cli -p DevProject -sd "D:\Git\DevProject" export templatestore

Commit / Push

Änderungen ins Git-Repository überführen
Entwickler B überträgt die Änderungen ins Git-Repository
git push

Weiteres Vorgehen

Der Konflikt ist aufgelöst. Entwickler B muss zu diesem Zeitpunkt keine weiteren Schritte vornehmen.

Entwickler A

Wenn Entwickler A zu einem späteren Zeitpunkt wieder in die Entwicklung einsteigt, dann geht dieser wie folgt vor:

  1. Aktualisierung des lokalen Git-Repositorys
    Entwickler A
    Die lokale Arbeitsversion auf den Stand des Repositorys bringen:
    git pull
  2. Import der Inhalte aus dem Dateisystem ins FirstSpirit-Projekt
    Entwickler A
    fs-cli -p DevProject -sd "D:\Git\DevProject" import

Sowohl im lokalen Projekt von Entwickler A als auch im Projekt von Entwickler B ist nun die Seitenvorlage page_text in der zusammengeführten Version der Ausgabekanaldefinition vorhanden

Zeile 1
Zeile 2 A
Zeile 3
Zeile 4 B
Zeile 5

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.5 | Datenschutz