enhancement
major
minor
major
minor
major
#30017
Build: Git-Merge-Treiber für die generierten Ressourcendateien, damit parallele Pull-Requests nicht bei jedem neuen Schlüssel in Konflikt geraten
Problem
Fast jeder Pull-Request fügt Schlüssel zu denselben sortierten Ressourcendateien hinzu (META-INF/messages_en.properties, messages_de.properties, WEB-INF/conf/resources/*.properties). Zwei Branches, die an benachbarten Stellen derselben Datei einen Schlüssel einfügen, geraten beim Merge in einen Textkonflikt, obwohl sich ihre Schlüssel nicht überschneiden. com.top_logic.layout.view/src/main/java/META-INF/messages_en.properties wurde in sieben Tagen von 74 Commits auf master geändert. Jeder dieser Konflikte erfordert einen Master-Merge von Hand und einen neuen CI-Build.
Lösung
Ein Git-Merge-Treiber, der diese Dateien als sortierte Listen von Schlüssel = Wert-Zeilen zusammenführt. Er führt Schlüssel für Schlüssel einen Drei-Wege-Merge aus:
- Ein Schlüssel, den nur eine Seite hinzufügt, ändert oder löscht, wird übernommen.
- Zwei Seiten, die denselben Schlüssel auf unterschiedliche Werte setzen, sind ein echter Konflikt.
Bei einem echten Konflikt fällt der Treiber auf den normalen Textmerge mit Konfliktmarkern zurück, ebenso bei einer Datei, die nicht diese Form hat.
- Die Zuordnung steht in .gitattributes: merge=tl-properties.
- Den Treiber selbst registriert jeder Klon einmalig in seiner Git-Konfiguration.
- Ohne Registrierung verwendet Git den normalen Textmerge, das Verhalten ändert sich dann also nicht.