
Serpent Team

Andrew Hanna

Kort antwoord: de meeste Salesforce-mergeconflicten zijn geen echte meningsverschillen. Het zijn twee mensen die losstaande dingen toevoegen aan hetzelfde veel te grote XML-bestand, of dezelfde elementen die in een andere volgorde terugkomen. Combineer bij additieve metadata zoals profielen, permission sets, layouts en labels beide kanten, en merge gegenereerde XML zoals Flows nooit met de hand: kies één versie en breng de andere wijziging opnieuw aan in Flow Builder.
Vier eigenaardigheden van het platform veroorzaken bijna alles.
De grootste boosdoeners, en bijna altijd additief. Twee branches voegen elk een
objectPermissions- of fieldPermissions-blok toe en die
toevoegingen komen naast elkaar te staan. Neem beide kanten, ontdubbel daarna op het
sleutelelement (field, object, apexClass) en
sorteer opnieuw. Los een profiel nooit op door één kant integraal te accepteren.
Goed om te weten: Salesforce heeft het uitfaseren van rechten in profielen geannuleerd (Salesforce Help-artikel 003834041), dus profielen verdwijnen niet op een vaste datum en dit probleem lost zichzelf niet op. Salesforce adviseert nog steeds een least-privilege-model op basis van permission sets, en rechten uit profielen halen verkleint het conflictoppervlak daadwerkelijk, omdat permission sets kleine bestanden per feature zijn.
Merge ze niet met de hand. De XML bevat gegenereerde elementnamen en canvascoördinaten, dus een merge op regelniveau levert iets op dat er aannemelijk uitziet en zich verkeerd gedraagt. Kies één versie als winnaar en breng de andere wijziging opnieuw aan in Flow Builder.
Layout-XML somt elk item op volgorde van positie op, dus twee mensen die velden aan
verschillende secties toevoegen botsen alsnog als die secties naast elkaar liggen.
Combineer beide kanten en controleer daarna of elk layoutItem uit beide
ouders bewaard is gebleven. Loopt een conflict in een Lightning record page over meer
dan een paar regels, bouw hem dan opnieuw in de Lightning App Builder in plaats van te
mergen.
Slaat je repo een object op als één bestand, dan raakt elke veldwijziging dat bestand. Gedecomposeerd source format geeft elk veld een eigen bestand en haalt de meeste van deze conflicten weg voordat ze ontstaan.
Behandel deze als gewone codeconflicten, want dat zijn ze. Los de logica op, draai de tests opnieuw, en controleer daarna of de klasse nog steeds is toegekend in de profielen en permission sets die ernaar verwijzen.
Enkele alfabetische bestanden, puur additief. Neem beide kanten en sorteer opnieuw.
Deze gids maakt deel uit van onze Salesforce DevOps-gidsen.
Kan Git Salesforce-metadataconflicten zelf oplossen?
Alleen tekstueel. Git kan niet zien dat twee profielblokken los van elkaar staan of dat een herordend bestand ongewijzigd is, dus meldt het valse conflicten en accepteert het zonder morren een merge die inhoudelijk fout is.
Wat is een vals conflict?
Een conflict waarbij beide kanten dezelfde metadata in een andere volgorde bevatten. De Metadata API garandeert geen elementvolgorde, dus twee ophaalacties kunnen verschillen zonder dat er iets veranderd is.
Mag ik Flow-XML ooit met de hand aanpassen om een conflict op te lossen?
Nee. Kies één versie, breng de andere wijziging opnieuw aan in Flow Builder en commit wat je ophaalt.
Waarom conflicteren profielen terwijl we aan totaal verschillende features werkten?
Een profiel is één bestand met rechten voor elk object, veld en elke klasse in de org, dus losstaande features schrijven naar aangrenzende regels.
Hoe controleer ik dat er bij de merge niets verloren is gegaan?
Vergelijk het gemergede bestand met beide ouderversies, bevestig dat elk sleutelelement van beide kanten bewaard is, en valideer de deployment tegen de doel-org voordat je merget.
Vrijblijvend.