mercurial: كيفية الاندماج مع التحكم اليدوي في التغييرات والملفات؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

ملاحظة: لا يجيب السيناريو الذي أصف به هنا فائض المكدس: دمج merury اليدوي تماما.

سأشرح استفستي بمثال. افترض أنني أبدأ مستودع مرتكي لتصميم السيارات:

C:\Car$ dir
Car.cpp
Car.h

أنا أعمل على تصميم السيارة لفترة طويلة، ويبدو المستودع:

r0-r1-...-r100-(default)

في مرحلة ما في الوقت المناسب أنا فرع إفتراضي ل solarcarbranch. للعمل على سيارة تعمل بالطاقة الشمسية بالتوازي:

C:\SolarCar$ dir
Car.cpp
Car.h
Solar.cpp
Solar.h

بعد بعض الوقت، يبدو المستودع:

r0-r1-...-r100-...-r200-(default)
            \--r101-...-r201-(SolarCarBranch)

كيف أقوم بالدمج solarcarbranch. ارجع الى إفتراضي?

يحيط علما بالمضاعفات التالية في الدمج الذي أريد:

  1. يجب أن أكون قادرا على مواصلة العمل على كليهما إفتراضي و solarcarbranch. بعد الدمج.
  2. قد يكون هناك إصلاحات كفاءة استهلاك الوقود Car.cpp و Car.h في solarcarbranch. أنني أريد سحبها إفتراضي, ومع ذلك، لا أريد كل التغييرات في تلك الملفات. لذلك، أريد الكرز اختيار التغييرات التي أريد أن أدرجها إفتراضي أثناء الدمج (AKA دمج اليدوي).
  3. أنا افعل ليس يريد Solar.cpp و Solar.h الظهور في إفتراضي. وبعد قد لا يكون العالم جاهزا بعد لسيارة تعمل بالطاقة الشمسية. ؛-)

ما تعلمته:

  1. هذا ممكن من قبل hg merge SolarCarBranch
  2. هذا يمكن تحقيق ذلك عن طريق الإعداد kdiff3.premerge=False في Mercurial.ini
  3. أنا لا أعرف كيفية تحقيق هذا منذ premerge=False لا تزال دمج / نسخ Solar.cpp و Solar.h إلى إفتراضي دون أن يسألني للحصول على إذن.
هل كانت مفيدة؟

المحلول

أنت قريب حقا ولا تحتاج إلى اللجوء إلى زرع (Yuck) أو اختيار الكرز بشكل عام. إيقاف تشغيل Premerge هو الخطوة الأولى، ثم قم فقط بإزالة الملفات التي لا تريدها في الفرع الرئيسي بعد دمجها ولكن قبل الالتزام. عليك فقط أن تفعل ذلك مرة واحدة.

إليك إعداد:

o  changeset:   3:343d531512a3
|  branch:      solar
|  tag:         tip
|  parent:      1:cb26642f8db5
|  user:        Ry4an Brase <ry4an@msi.umn.edu>
|  date:        Wed Mar 10 11:16:48 2010 -0600
|  files:       afile
|  description:
|  solar-change
|
|
| @  changeset:   2:c5d14e34db07
| |  parent:      0:56465175b2fc
| |  user:        Ry4an Brase <ry4an@msi.umn.edu>
| |  date:        Wed Mar 10 11:05:44 2010 -0600
| |  files:       other-main-file
| |  description:
| |  moremain
| |
| |
o |  changeset:   1:cb26642f8db5
|/   branch:      solar
|    user:        Ry4an Brase <ry4an@msi.umn.edu>
|    date:        Wed Mar 10 11:04:32 2010 -0600
|    files:       solar-only
|    description:
|    solar-initial
|
|
o  changeset:   0:56465175b2fc
   user:        Ry4an Brase <ry4an@msi.umn.edu>
   date:        Wed Mar 10 11:04:14 2010 -0600
   files:       afile
   description:
   initial

يمكنك أن ترى أن التغييرات 1 يضيف ملف إلى فرع الطاقة الشمسية - ملف لا نريده افتراضيا. في حين أن التغييرات 3 تعديل ملف موجود أيضا في Main، BACHE، ونريد التحكم يدويا ما إذا كان هذا التغيير يحدث أم لا.

القيام بذلك hg update default ; hg merge -r solar. وبعد سوف أداة دمج المنبثقة ل afile ونقرر أن نقرر الخط عبر الخط أو جزء من الجسر إذا كنا نريد هذه التغييرات. بعد حفظ القيام hg stat:

% hg stat
M afile
M solar-only

ونحن نرى أن الطاقة الشمسية فقط هي قائمة الانتظار للاشتراك في الافتراضي. فقط قم بإزالته (مع if).

% hg rm -f solar-only

حاليا hg stat يظهر ذلك كما تمت إزالته:

% hg stat
M afile
R solar-only

وعندما نلتزم، سيكون لدينا ما نريده في التغييرات الجديدة.

نصائح أخرى

حالك الأول، لتتمكن من مواصلة العمل على كل من الفروع، راض عن طريق عدم إغلاق الفرع (الذي تفعله مع --close-branch الخيار ل hg commit).

يمكنك اختيار المشجيع الكرز للاندماج باستخدام امتداد زرع. وبعد سيتيح لك ذلك اختيار مشكلات محددة فقط للاندماج في الافتراضي.

الشرط الثالث راض عن فكرة أن تقدمك لا تخلط التغييرات في كل من سيارتك العادية وسيارتك بالطاقة الشمسية في نفس الالتزام، يمكنك سحب مشكلات مرة أخرى من الفرع الشمسي مع الإفلات من العقاب، وليس هذا ما يدعو للقلق خلط أنواع سيارتك.

قد ترغب في إلقاء نظرة على internal إشارات الخيار في دمج مستندات التكوين جدا.

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