Mercurial ، الصراع ، الدمج ، المزيد من النزاعات في وقت لاحق ، هل يتذكر الزئبق القرار الأولي؟

StackOverflow https://stackoverflow.com/questions/4016639

سؤال

تخيل هذا السيناريو:

  1. أليس وبوب كلا الاستنساخين مستودع مركزي ماجستير ، يحتوي على ملف نصي واحد
  2. يقوم كل من Alice و Bob بتغيير في نفس السطر في الملف ، ويرتكب
  3. يعود بوب إلى المستودع المركزي ، ولكن ليس أليس
  4. أليس الآن تسحب في مستودعها ، وتلاحظ أن لديها الآن رؤساء ، ودمج
  5. نظرًا لأن الدمج هو صراع ، فإنها تحل الصراع
  6. ثم تلتزم أليس لكنها لا تدفع
  7. يقوم بوب الآن بإجراء تغييرات أخرى على الملف ، في مكان آخر للملف (أي. لا يوجد مكان بالقرب من التغييرات الأولية) ويرتكب ، ويدفع
  8. أليس ، في ملفها المدمج ، تقوم بتغيير مماثل في نفس الموقع الذي تغير بوب للتو ، ويرتكب
  9. أليس تسحب ، واكتشاف مستودع آخر مزدوج الرؤوس ، تندمج

إليك عرض مختلف للسيناريو أعلاه

(تعني الأرقام بعد "التغيير" أن الشخص غير "الجزء 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 من بوب في تاريخها ، لذلك لن تحاول تغيير هذا الرمز مرة أخرى. إنها تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top