
Andrew Hanna

Andrew Hanna

عشان تحل تعارض ميتاداتا Salesforce أثناء الدمج، عامل الملف كعُقد XML مش كسطور: افتح الملف المتعارض، احتفظ بالتغييرات المستقلة من الجهتين، وسيب بس التعديل اللي متعارض فعلًا، بعدين تحقّق من الـ XML وانشر على scratch org أو sandbox قبل ما تعمل commit. أغلب تعارضات Salesforce إيجابيات كاذبة سببها ترتيب الـ XML، مش خلافات حقيقية، فالهدف هو التوفيق مش اختيار فايز. أهو إزاي تعملها بنظافة.
تعارض الدمج بيحصل لما فرعين Git يغيّروا نفس الملف وGit مش قادر يقرر أنهي نسخة تفوز، فبيقف ويرجّعلك الملف بعلامات تعارض. في Salesforce الملف ده بيبقى غالبًا ميتاداتا تصريحية متخزنة كـ XML: profile أو permission set أو flow أو layout. Git بيقارن النص سطر بسطر، والـ XML مش بيتوافق مع النموذج ده كويس.
تلات خصائص في ميتاداتا Salesforce بتخلي التعارضات أكتر بكتير من الكود العادي:
بنتعمّق في الأسباب الجذرية في ليه تعارضات الميتاداتا بتحصل وإزاي توقفها.
<<<<<<< و=======
و>>>>>>>. كل اللي فوق الفاصل هو فرعك؛ وكل اللي تحت
هو الفرع الوارد.
<fieldPermissions> أو
<objectPermissions> وحدة، مش السطور اللي حواليها.
عشان انضباط إنك متضيّعش تغيير زميلك أبدًا، شوف إزاي تحل التعارضات من غير ما تضيّع شغل حد.
الدمج اليدوي سطر بسطر مش بيتوسّع. الحل الدايم هو دمج واعي بالميتاداتا بيفهم بنية الـ XML. الـ Git merge driver الواعي بـ Salesforce بيقارن الملفات عقدة بعقدة، بيدمج تلقائيًا أي حاجة اتغيّرت في جهة واحدة بس ويعلّم بس التصادمات الحقيقية؛ بنشرح الإعداد في إزاي تجهّز Git merge driver واعي بـ Salesforce. ومنصات الـ DevOps بتاخد نفس الفكرة أبعد: Gearset وCopado وFlosum وBlue Canvas كلهم بيوفّروا مزايا دمج دلالي أو ذكي بتتجاهل ترتيب الـ XML غير الوظيفي وبتظهر بس التعارضات الحقيقية. Serpent بيطبّق نفس المبدأ جوا خطوط أنابيب Git-native، فيراجع فريقك القرارات، مش الضوضاء. النظافة الكويسة للمصدر بتساعد كمان، وإدارة ميتاداتا Salesforce بتغطّي العادات اللي بتمنع التعارضات من الأول: فروع قصيرة العمر، ودمج متكرر، وإبقاء البيئات متزامنة، وإدّاء المكونات المشتركة زي الـ profiles مالك واحد. اتصفّح مكتبة SF Guides كاملة للمزيد، وقارن خيارات الأدوات على صفحة الأسعار.
ليه Git بيعلّم تعارضات وأصلًا مفيش حاجة اتغيّرت؟
لأن الـ Metadata API بترجّع عناصر الـ XML بترتيب غير حتمي، فـ Git بيشوف السطور المعاد ترتيبها كفروق حتى لو الإعدادات متطابقة.
أقدر بس أختار جهة واحدة من التعارض؟
بس لما الجهتين عدّلوا نفس العقدة بالظبط. لو التغييرات بتمس عُقد مختلفة، اختيار جهة بيمسح شغل زميلك الحقيقي بهدوء.
أحل تعارضات الـ profile في ملف الـ profile نفسه؟
لما يمكن، انقل صلاحيات الكائنات والحقول لـ permission sets بدل الـ profiles. الملفات الأصغر والمركّزة بتتصادم أقل بكتير.
محتاج أداة خاصة، ولا Git العادي كفاية؟
Git العادي بيشتغل للفرق الصغيرة، لكن merge driver واعي بالميتاداتا أو منصة DevOps بدمج دلالي بيشيلوا أغلب الشغل اليدوي بمجرد ما أكتر من مطورين قليلين يشاركوا الميتاداتا.
بدون التزام.