Mercurial ، الصراع ، الدمج ، المزيد من النزاعات في وقت لاحق ، هل يتذكر الزئبق القرار الأولي؟
-
26-09-2019 - |
سؤال
تخيل هذا السيناريو:
- أليس وبوب كلا الاستنساخين مستودع مركزي ماجستير ، يحتوي على ملف نصي واحد
- يقوم كل من Alice و Bob بتغيير في نفس السطر في الملف ، ويرتكب
- يعود بوب إلى المستودع المركزي ، ولكن ليس أليس
- أليس الآن تسحب في مستودعها ، وتلاحظ أن لديها الآن رؤساء ، ودمج
- نظرًا لأن الدمج هو صراع ، فإنها تحل الصراع
- ثم تلتزم أليس لكنها لا تدفع
- يقوم بوب الآن بإجراء تغييرات أخرى على الملف ، في مكان آخر للملف (أي. لا يوجد مكان بالقرب من التغييرات الأولية) ويرتكب ، ويدفع
- أليس ، في ملفها المدمج ، تقوم بتغيير مماثل في نفس الموقع الذي تغير بوب للتو ، ويرتكب
- أليس تسحب ، واكتشاف مستودع آخر مزدوج الرؤوس ، تندمج
إليك عرض مختلف للسيناريو أعلاه
(تعني الأرقام بعد "التغيير" أن الشخص غير "الجزء X" من الملف. إذا قام كلا المستخدمين بتغيير الجزء نفسه ، فلدينا دمجًا متضارًا ، إذا تغير مختلفًا ، وليس كثيرًا)
Alice Bob CLONE MASTER CLONE MASTER ----------------------------------------- CHANGE 1 <-----+ COMMIT +-- upcoming merge conflict ----------------------------------------- | CHANGE 1 <-----+ COMMIT PUSH ----------------------------------------- PULL <-- Bob's change +1 head MERGE <-- Attempt to get rid of extra head RESOLVE CONFLICT <-- Resolve merge conflict COMMIT ----------------------------------------- CHANGE 2 <-----+ COMMIT +-- yet another merge PUSH | conflict ahead ----------------------------------------- | CHANGE 2 <-----+ COMMIT PULL <-- Bob's change, again +1 head MERGE <-- Attempt to get rid of extra head RESOLVE ???
في هذه المرحلة ، سؤالي هو:
- هل ستأخذ أدوات الدمج أول قرار دمجها في الاعتبار؟ نظرًا لأن بوب لم يسبق له مثيل في تغييرات أليس ، فإن نسخته لا تزال خالية من أي من التغييرات التي أجراها أليس ، وتغييرها الأولي (الذي كان يتعارض مع بوب) ، ودمجها ، وأحدث تغيير لها ، وهو يتعارض مع تغيير بوب الأخير الأخير .
إذا كنت قد أخذت ببساطة نسخة بوب من الملف ، وإصدار أليس من الملف ، ومنحه أي برنامج دمج ، فسيعلم كل من التغييرات كما في الصراع.
بمعنى آخر ، هل ستحاول أداة الصراع أن تطلب من أليس حل كل من الصراع الأصلي والذات الجديد ، أو فقط آخر الصراع؟
أخمن (لم أحاول هذا ، ما زلت أحاول بناء نوع من البرنامج النصي لاختبار هذه المشكلة) سوف يطلب هذا الزئبق من أليس فقط حل النزاع الأخير.
ماذا لو قمت بتكوين Mercurial لاستخدام برنامج Diff/Merge الطرف الثالث؟ هل سيظل هذا تطبيقًا؟ على سبيل المثال ، لقد قمت بتكوين التثبيت الخاص بي للاستخدام ما وراء المقارنة, ، هل سيتم إعطاء الملفان (بوب مع تغييراته فقط وأليس مع تغييراتها + دقة الدمج) مع أو بدون دقة أولية حاضرة؟ بمعنى آخر ، إذا كان يستخدم ما وراء المقارنة, ، هل سيحدث الشيء الصحيح هنا أيضًا (على افتراض أنه يفعل على الإطلاق.)
المحلول
سوف يتطلب Mercurial فقط حل النزاع الأخير ، وسيعمل ذلك بشكل جيد مع أدوات التغيير الخارجية.
عندما تقوم أليس بدمجها الثانية ، فإنها تقوم بدمج دمجها السابقة مع دلتا بوب الجديدة ، ولا يحتاج هذا التغيير إلا إلى دمج من جديد.
مخطط واضح حقا ، راجع للشغل. شكرًا
نصائح أخرى
سوف يطلب من أليس فقط تغيير أحدث الصراع.
السبب في ذلك هو على النحو التالي:
لديها بالفعل تغيير 1 من بوب في تاريخها ، لذلك لن تحاول تغيير هذا الرمز مرة أخرى. إنها تعمل.