يعطي GNU Diff3 (دمج ثلاثي) نتيجة غير متوقعة
سؤال
افترض أن الملفات الخاصة بك وملفاتك من أحفاد القديم.
file_mine =
abc def ghi
file_old =
abc jkl ghi
file_yours =
abc def ghi
يأمر diff3 -m MIND OLD YOURS
يعطي:
abc <<<<<<< OLD jkl ======= def >>>>>>> YOURS ghi
لا يمكن لـ DIFF3 حل هذا المنجم وقمك بإجراء تغييرات متطابقة.
لماذا ا؟ وهل هناك طريقة لحل هذه المشكلة؟
دغدغ عقلك بهذا:
diff OLD MIND
و diff OLD YOURS
لديهم أشكال متطابقة في إنتاجها.
2c2 < jkl --- > def
هل يجب ألا "الإلغاء" خلال الاندماج ثلاثي الاتجاه؟
المحلول
ماذا كنت تتوقع أن يكون؟
كما مقالة تصف الأداة المساعدة Diff3 يقول:
... هذا (دمج) فشل في أن يكون صحيحا عندما تختلف جميع ملفات الإدخال الثلاثة أو عندما يختلف كبار السن فقط; ؛ نسمي هذا أ نزاع. عندما تختلف جميع ملفات الإدخال الثلاثة ، نسمي الصراع تداخل
لذلك ، يتم التعامل مع الحالة التي وصفتها على أنها صراع. 'لما ذلك؟' ربما تسال. بسبب خوارزمية DIFF3. الوصف يمكنك العثور عليه في نفس الصفحة:
يمكنك التفكير في هذا (الدمج) كطرح اكبر سنا من لك وإضافة النتيجة إلى مِلكِي, ، أو كما تم دمج التغييرات التي ستتحول إلى أقصى درجة من العمر
لا يمكن حل الاختلافات بشكل صحيح لأنه لا يحتوي على سياق مناسب للتغييرات التي يتم إجراؤها.
أتفق معك إذا كنت ستقول أنه ينبغي أن يعمل باستخدام طريقة أخرى. لكن هذا ما هو عليه. Diff3 ليس مثاليًا ، أوصي باستخدام أدوات أخرى إذا كنت تريد القيام بذلك بشكل صحيح كما هو موضح في مقالة - سلعة