
Andrew Hanna

Andrew Hanna

باختصار: تعارض الدمج هو تغييران متنافسان على نفس الجزء من الملف وما ينفعش نظام إدارة الإصدارات يوفّق بينهم لوحده. وفي Salesforce، معظمها مش حقيقي: ده ضجيج ترتيب في الـ XML المفروض دمج واعي بالبيانات الوصفية يحسمه من غير ما يسأل حد. السؤال المهم هو اللي بيحصل للتعارضات اللي بتنجو من الفلتر ده، وده أول مكان في خط الإصدار الذكاء الاصطناعي بيستحق فيه مكانه فعلًا.
سببان هيكليان، ومش غلطة حد فيهم.
الأول إن الملفات ضخمة. الـ Profile بيوصف الصلاحيات في المؤسسة كلها، فمطوّرين بيشتغلوا على كائنين مالهمش علاقة ببعض ممكن ينتجوا تعديلات متجاورة في ملف واحد. الـ Profiles ومجموعات الصلاحيات وتخطيطات الصفحات وصفحات Lightning والتسميات المخصصة هما المتهمون المعتادون.
والتاني إن ترتيب العناصر جوه الملفات دي مش ثابت. اسحب نفس الـ Profile مرتين وممكن ترجع لك عناصر القائمة بترتيب مختلف. Git بيشوف سطور اتعاد ترتيبها فيعتبرها تغييرًا، حتى لو معنى الصلاحيات متطابق. وكده بيلاقي فريق نفسه ضيّع بعد ظهر الخميس في حل تعارض مش موجود أصلًا.
التفرقة دي هي المقال كله، فخلينا نقولها بوضوح.
التعامل مع الاتنين كمشكلة واحدة هو سبب السمعة السيئة لأدوات التعارض. كل واحد محتاج آلية مختلفة.
الدمج الواعي بالبيانات الوصفية بيحلل الـ XML لعناصر بمفاتيح ثابتة ويدمج عنصرًا عنصرًا بدل سطرًا سطرًا. مشروع مشغّل دمج Git الخاص بـ Salesforce مفتوح المصدر مرجع عام كويس للنهج ده: بيحدد مفاتيح فريدة جوه عناصر البيانات الوصفية، ويدمج المدخلات المفردة بدل المصفوفات كاملة، ويتعامل مع إعادة الترتيب بشكل حتمي في الأنواع المرتبة فعلًا زي قوائم القيم وتعيينات أنواع السجلات، وما بيرجعش لتعارض خام إلا لما ما يعرفش المفتاح. والأدوات التجارية بتعمل نفس الحاجة؛ Gearset مثلًا بتوصف خوارزمية دمج دلالي واعية بالبيانات الوصفية للسبب ده بالظبط.
وده مش ذكاء اصطناعي ولا المفروض يكون. ده تحليل نصي، والتحليل المفروض يفضل حتميًا وسريعًا ومملًا. ولما يتعمل صح بيشيل الأغلبية العظمى من تعارضات Salesforce قبل ما أي إنسان يشوفها.
اللي ما يقدرش يعمله هو إنه ياخد قرار. لما الفرعين يحطوا نفس المفتاح على قيم مختلفة، الدمج الحتمي السليم بيرفض، ورفضه في محله.
عند الرفض ده بالظبط. حل التعارضات مهمة أولى ممتازة للذكاء الاصطناعي في التسليم، لأربعة أسباب.
قارن ده بإنك تطلب من نموذج يكتب Apex: مدخل غير محدود، وسياق ملتبس، والتحقق هو الجزء الغالي. حل التعارضات شكله معكوس تمامًا، وعلشان كده هو نقطة البداية المعقولة.
أيوه، وبسرعة. DevOps Center من Salesforce نفسها بقت بتوفر حل تعارضات الدمج عبر أدوات MCP، وبتستخدم نماذج لغوية كبيرة لتحليل التعارضات وشرحها بلغة طبيعية واقتراح حلول من جوه بيئة التطوير. ولما مزود المنصة نفسه يحط تحليل التعارض بالنماذج اللغوية في الصندوق، يبقى النقاش حول انتماء ده لخط الإصدار خلص.
Serpent جاي من نفس الاتجاه. هو خادم MCP الأصلي الوحيد في
Salesforce DevOps، وفيه resolve_metadata_conflict جنب
plan_deploy وcreate_pull_request
وtrigger_pipeline، فنفس الحل ينفع يتشغّل من Claude أو Cursor أو Windsurf
أو Agentforce، مع فحوصات مسبقة وموافقة بشرية إلزامية. ومراجعة الكود بالذكاء الاصطناعي
شغالة في كل الخطط بما فيها المجانية، لأن المراجعة والتعارض هما نفس النقاش حول نفس
التغيير.
هل ينفع الذكاء الاصطناعي يدمج التعارضات تلقائيًا من غير مراجعة؟
لأ. يقترح ويشرح، وبعدين موافقة بشرية إلزامية، خصوصًا في الـ Profiles ومجموعات الصلاحيات اللي دمج غلط فيها بيغير وصول كل مستخدم مرتبط بيها.
هل الدمج الدلالي بيلغي الحاجة للذكاء الاصطناعي؟
العكس. هو بيشيل التعارضات الوهمية، فاللي بيفضل هو بالظبط قرارات التقدير اللي السياق الزيادة بيفيد فيها.
ليه الـ Profiles أسوأ الحالات؟
لأنها ملفات ضخمة واحدة بتغطي المؤسسة كلها، فشغل مالوش علاقة ببعضه بينزل في سطور متجاورة، وترتيب قوائمها مش مضمون يفضل ثابتًا بين عملية سحب وتانية.
الحلّال الذكي محتاج أي سياق؟
الفرق الثلاثي، والتذكرة المرتبطة، ورسائل الـ commits، وحالة المؤسسة المستهدفة. من غيرهم بيخمّن بثقة أعلى من الإنسان.
نعرف إزاي إن الحل كان صح؟
اعمل تحقق من النتيجة المدموجة مقابل المؤسسة المستهدفة قبل ما الدمج يوصل، واحتفظ بسجل لكل اقتراح ومين وافق عليه.
بدون التزام.