
Serpent Team

Andrew Hanna

Réponse courte : la plupart des conflits de merge Salesforce ne sont pas de vrais désaccords. Ce sont deux personnes qui ajoutent des choses sans rapport au même fichier XML surdimensionné, ou les mêmes éléments qui reviennent dans un ordre différent. Pour les métadonnées additives comme les profils, permission sets, layouts et labels, combinez les deux côtés, et ne fusionnez jamais à la main du XML généré comme les Flows : choisissez une version et rejouez l'autre modification dans Flow Builder.
Quatre particularités de la plateforme expliquent presque tout.
Les pires, et presque toujours additifs. Deux branches ajoutent chacune un bloc
objectPermissions ou fieldPermissions, et les ajouts se
retrouvent côte à côte. Prenez les deux côtés, puis dédoublonnez sur l'élément clé
(field, object, apexClass) et retriez. Ne
résolvez jamais un profil en acceptant un côté en bloc.
À savoir : Salesforce a annulé la retraite des permissions dans les profils (article Salesforce Help 003834041), donc les profils ne disparaîtront pas à une date fixe et le problème ne se réglera pas tout seul. Salesforce recommande toujours un modèle de moindre privilège fondé sur les permission sets, et sortir les permissions des profils réduit réellement la surface de conflit, car les permission sets sont de petits fichiers par fonctionnalité.
Ne les fusionnez pas à la main. Le XML contient des noms d'éléments générés et des coordonnées de canevas : une fusion ligne à ligne produit quelque chose de plausible et faux. Choisissez une version gagnante et rejouez l'autre modification dans Flow Builder.
Le XML d'un layout liste chaque élément dans l'ordre des positions : deux personnes
qui ajoutent des champs à des sections différentes se percutent quand même si ces
sections sont voisines. Combinez les deux côtés, puis vérifiez que chaque
layoutItem des deux parents a survécu. Si un conflit sur une page
Lightning dépasse quelques lignes, refaites-la dans le Lightning App Builder au lieu
de la fusionner.
Si votre dépôt stocke un objet dans un seul fichier, chaque changement de champ y touche. Le format source décomposé donne un fichier par champ et supprime la plupart de ces conflits avant qu'ils n'existent.
Traitez-les comme des conflits de code ordinaires, parce que c'en sont. Résolvez la logique, relancez les tests, puis vérifiez que la classe est toujours accordée dans les profils et permission sets qui la référencent.
Fichiers uniques et alphabétiques, purement additifs. Prenez les deux côtés et retriez.
Ce guide fait partie de nos guides DevOps Salesforce.
Git peut-il résoudre seul les conflits de métadonnées Salesforce ?
Seulement au niveau du texte. Git ne peut pas savoir que deux blocs de profil sont indépendants ni qu'un fichier réordonné est inchangé : il lève de faux conflits et accepte volontiers une fusion sémantiquement fausse.
Qu'est-ce qu'un faux conflit ?
Un conflit où les deux côtés contiennent les mêmes métadonnées dans un ordre différent. La Metadata API ne garantit pas l'ordre des éléments : deux récupérations peuvent différer sans changement réel.
Faut-il parfois éditer le XML d'un Flow à la main pour résoudre un conflit ?
Non. Choisissez une version, rejouez l'autre modification dans Flow Builder, puis committez ce que vous récupérez.
Pourquoi les profils entrent-ils en conflit alors que nous travaillions sur des sujets différents ?
Un profil est un fichier unique couvrant les permissions de chaque objet, champ et classe de l'org : des fonctionnalités sans rapport finissent sur des lignes voisines.
Comment vérifier que la fusion n'a rien perdu ?
Comparez le fichier fusionné aux deux versions parentes, confirmez que chaque élément clé des deux côtés a survécu, et validez le déploiement contre l'org cible avant de fusionner.
Sans engagement.