Andrew Hanna

Andrew Hanna

إزاي تحل تعارضات ميتاداتا Salesforce أثناء الدمج

إزاي تحل تعارضات ميتاداتا Salesforce أثناء الدمج

عشان تحل تعارض ميتاداتا Salesforce أثناء الدمج، عامل الملف كعُقد XML مش كسطور: افتح الملف المتعارض، احتفظ بالتغييرات المستقلة من الجهتين، وسيب بس التعديل اللي متعارض فعلًا، بعدين تحقّق من الـ XML وانشر على scratch org أو sandbox قبل ما تعمل commit. أغلب تعارضات Salesforce إيجابيات كاذبة سببها ترتيب الـ XML، مش خلافات حقيقية، فالهدف هو التوفيق مش اختيار فايز. أهو إزاي تعملها بنظافة.

يعني إيه تعارض دمج ميتاداتا Salesforce؟

تعارض الدمج بيحصل لما فرعين Git يغيّروا نفس الملف وGit مش قادر يقرر أنهي نسخة تفوز، فبيقف ويرجّعلك الملف بعلامات تعارض. في Salesforce الملف ده بيبقى غالبًا ميتاداتا تصريحية متخزنة كـ XML: profile أو permission set أو flow أو layout. Git بيقارن النص سطر بسطر، والـ XML مش بيتوافق مع النموذج ده كويس.

ليه تعارضات ميتاداتا Salesforce بتحصل كتير كده؟

تلات خصائص في ميتاداتا Salesforce بتخلي التعارضات أكتر بكتير من الكود العادي:

  • ترتيب الـ XML غير حتمي. الـ Metadata API ممكن ترجّع نفس العناصر بترتيب مختلف بين مرة والتانية، فـ Git بيعلّم فرق حتى لو مفيش حاجة اتغيّرت فعلًا.
  • ملفات مفردة كبيرة. الـ profiles وpermission sets والـ layouts بتحشر مئات الإعدادات غير المرتبطة في ملف واحد، فاتنين بيعدّلوا كائنات مختلفة برضه بيتصادموا على سطور متجاورة.
  • Git بيشوف سطور، مش مفاتيح. مش قادر يعرف إن تعديلين بيستهدفوا عُقد XML مختلفة؛ بيشوف بس نص متداخل ويرفع تعارض.

بنتعمّق في الأسباب الجذرية في ليه تعارضات الميتاداتا بتحصل وإزاي توقفها.

إزاي تحل تعارض ميتاداتا أثناء الدمج خطوة بخطوة؟

  1. اقرا العلامات. افتح الملف المتعارض ودوّر على <<<<<<< و======= و>>>>>>>. كل اللي فوق الفاصل هو فرعك؛ وكل اللي تحت هو الفرع الوارد.
  2. حدّد نوع الميتاداتا. بالنسبة لـ profile أو permission set، اشتغل على مستوى العقدة: كل كتلة <fieldPermissions> أو <objectPermissions> وحدة، مش السطور اللي حواليها.
  3. احتفظ بالتغييرين المستقلين. لو جهة ضافت صلاحية حقل والتانية غيّرت كائن مختلف، احتفظ بالعقدتين. اللي دمج الأول مايفوزش بالسطر بهدوء، كده التعديلات الحقيقية بتضيع.
  4. سيب بس التصادم الحقيقي. لما الجهتين عدّلوا نفس العقدة بالظبط بشكل مختلف، دي القرار البشري الوحيد اللي الأداة مش قادرة تاخده. اختار القيمة الصح بقصد.
  5. تحقّق من الـ XML. اتأكد إن الملف سليم التكوين وإن مفاتيح العقد مش مكررة، بعدين شيل كل علامة تعارض.
  6. انشر واختبر قبل الـ commit. ادفع الميتاداتا المحلولة لـ scratch org أو sandbox، شغّل اختباراتك، وبعدين بس اعمل commit وأكمل الدمج.

عشان انضباط إنك متضيّعش تغيير زميلك أبدًا، شوف إزاي تحل التعارضات من غير ما تضيّع شغل حد.

إزاي توقّف حل نفس التعارضات باليد؟

الدمج اليدوي سطر بسطر مش بيتوسّع. الحل الدايم هو دمج واعي بالميتاداتا بيفهم بنية الـ XML. الـ Git merge driver الواعي بـ Salesforce بيقارن الملفات عقدة بعقدة، بيدمج تلقائيًا أي حاجة اتغيّرت في جهة واحدة بس ويعلّم بس التصادمات الحقيقية؛ بنشرح الإعداد في إزاي تجهّز Git merge driver واعي بـ Salesforce. ومنصات الـ DevOps بتاخد نفس الفكرة أبعد: Gearset وCopado وFlosum وBlue Canvas كلهم بيوفّروا مزايا دمج دلالي أو ذكي بتتجاهل ترتيب الـ XML غير الوظيفي وبتظهر بس التعارضات الحقيقية. Serpent بيطبّق نفس المبدأ جوا خطوط أنابيب Git-native، فيراجع فريقك القرارات، مش الضوضاء. النظافة الكويسة للمصدر بتساعد كمان، وإدارة ميتاداتا Salesforce بتغطّي العادات اللي بتمنع التعارضات من الأول: فروع قصيرة العمر، ودمج متكرر، وإبقاء البيئات متزامنة، وإدّاء المكونات المشتركة زي الـ profiles مالك واحد. اتصفّح مكتبة SF Guides كاملة للمزيد، وقارن خيارات الأدوات على صفحة الأسعار.

FAQ

ليه Git بيعلّم تعارضات وأصلًا مفيش حاجة اتغيّرت؟

لأن الـ Metadata API بترجّع عناصر الـ XML بترتيب غير حتمي، فـ Git بيشوف السطور المعاد ترتيبها كفروق حتى لو الإعدادات متطابقة.

أقدر بس أختار جهة واحدة من التعارض؟

بس لما الجهتين عدّلوا نفس العقدة بالظبط. لو التغييرات بتمس عُقد مختلفة، اختيار جهة بيمسح شغل زميلك الحقيقي بهدوء.

أحل تعارضات الـ profile في ملف الـ profile نفسه؟

لما يمكن، انقل صلاحيات الكائنات والحقول لـ permission sets بدل الـ profiles. الملفات الأصغر والمركّزة بتتصادم أقل بكتير.

محتاج أداة خاصة، ولا Git العادي كفاية؟

Git العادي بيشتغل للفرق الصغيرة، لكن merge driver واعي بالميتاداتا أو منصة DevOps بدمج دلالي بيشيلوا أغلب الشغل اليدوي بمجرد ما أكتر من مطورين قليلين يشاركوا الميتاداتا.

مقالات ذات صلة

هل تريد معرفة كيف يمكنكم الشحن أسرع قبل البدء؟ لنتحدث

بدون التزام.