
Serpent Team

Andrew Hanna

Kurze Antwort: Die meisten Salesforce-Merge-Konflikte sind keine echten Widersprüche. Es sind zwei Personen, die Unabhängiges in dieselbe überdimensionierte XML-Datei schreiben, oder dieselben Elemente, die in anderer Reihenfolge zurückkommen. Bei additiven Metadaten wie Profilen, Permission Sets, Layouts und Labels führen Sie beide Seiten zusammen; generiertes XML wie Flows dagegen niemals von Hand mergen: eine Version wählen und die andere Änderung im Flow Builder erneut vornehmen.
Vier Eigenheiten der Plattform erklären fast alles.
Die schlimmsten Fälle, und fast immer additiv. Zwei Branches fügen je einen
objectPermissions- oder fieldPermissions-Block hinzu, und
die Ergänzungen landen nebeneinander. Beide Seiten übernehmen, dann anhand des
Schlüsselelements (field, object, apexClass)
entdoppeln und neu sortieren. Lösen Sie ein Profil nie, indem Sie eine Seite komplett
übernehmen.
Gut zu wissen: Salesforce hat die Abschaffung von Berechtigungen in Profilen zurückgenommen (Salesforce-Help-Artikel 003834041). Profile verschwinden also nicht zu einem festen Termin, und das Problem löst sich nicht von selbst. Salesforce empfiehlt weiterhin ein Least-Privilege-Modell auf Basis von Permission Sets, und Berechtigungen aus Profilen herauszulösen verkleinert die Konfliktfläche tatsächlich, weil Permission Sets kleine Dateien pro Feature sind.
Nicht von Hand mergen. Das XML enthält generierte Elementnamen und Canvas-Koordinaten, ein zeilenweiser Merge erzeugt also etwas, das plausibel aussieht und falsch läuft. Wählen Sie eine Version als Sieger und wiederholen Sie die andere Änderung im Flow Builder.
Layout-XML listet jedes Element in Positionsreihenfolge, zwei Personen, die Felder in
verschiedene Abschnitte einfügen, kollidieren also trotzdem, wenn die Abschnitte
benachbart sind. Beide Seiten zusammenführen und danach prüfen, ob jedes
layoutItem aus beiden Elternversionen überlebt hat. Reicht ein Konflikt
in einer Lightning-Record-Seite über mehr als ein paar Zeilen, bauen Sie sie im
Lightning App Builder neu, statt zu mergen.
Speichert Ihr Repository ein Objekt als eine Datei, berührt jede Feldänderung genau diese Datei. Dekomponiertes Source-Format gibt jedem Feld eine eigene Datei und beseitigt die meisten dieser Konflikte, bevor sie entstehen.
Behandeln Sie sie als gewöhnliche Code-Konflikte, denn das sind sie. Logik auflösen, Tests erneut laufen lassen, und danach prüfen, ob die Klasse in den referenzierenden Profilen und Permission Sets weiterhin freigegeben ist.
Einzelne alphabetische Dateien, rein additiv. Beide Seiten übernehmen und neu sortieren.
Dieser Leitfaden ist Teil unserer Salesforce-DevOps-Guides.
Kann Git Salesforce-Metadatenkonflikte allein auflösen?
Nur textuell. Git kann nicht erkennen, dass zwei Profilblöcke unabhängig sind oder dass eine umsortierte Datei unverändert ist, meldet also Falschkonflikte und akzeptiert bereitwillig einen inhaltlich falschen Merge.
Was ist ein Falschkonflikt?
Ein Konflikt, bei dem beide Seiten dieselben Metadaten in anderer Reihenfolge enthalten. Die Metadata API garantiert keine Elementreihenfolge, zwei Abrufe können sich also ohne echte Änderung unterscheiden.
Darf man Flow-XML zur Konfliktlösung von Hand bearbeiten?
Nein. Eine Version wählen, die andere Änderung im Flow Builder wiederholen und das Abgerufene committen.
Warum kollidieren Profile, obwohl wir an ganz verschiedenen Features gearbeitet haben?
Ein Profil ist eine einzige Datei mit Berechtigungen für jedes Objekt, Feld und jede Klasse der Org, unabhängige Features landen deshalb auf benachbarten Zeilen.
Wie prüfe ich, dass beim Merge nichts verloren ging?
Die zusammengeführte Datei gegen beide Elternversionen diffen, bestätigen, dass jedes Schlüsselelement beider Seiten überlebt hat, und vor dem Merge das Deployment gegen die Ziel-Org validieren.
Unverbindlich.