mercurial: كيفية الاندماج مع التحكم اليدوي في التغييرات والملفات؟
سؤال
ملاحظة: لا يجيب السيناريو الذي أصف به هنا فائض المكدس: دمج 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. ارجع الى إفتراضي?
يحيط علما بالمضاعفات التالية في الدمج الذي أريد:
- يجب أن أكون قادرا على مواصلة العمل على كليهما إفتراضي و solarcarbranch. بعد الدمج.
- قد يكون هناك إصلاحات كفاءة استهلاك الوقود
Car.cpp
وCar.h
في solarcarbranch. أنني أريد سحبها إفتراضي, ومع ذلك، لا أريد كل التغييرات في تلك الملفات. لذلك، أريد الكرز اختيار التغييرات التي أريد أن أدرجها إفتراضي أثناء الدمج (AKA دمج اليدوي). - أنا افعل ليس يريد
Solar.cpp
وSolar.h
الظهور في إفتراضي. وبعد قد لا يكون العالم جاهزا بعد لسيارة تعمل بالطاقة الشمسية. ؛-)
ما تعلمته:
- هذا ممكن من قبل
hg merge SolarCarBranch
- هذا يمكن تحقيق ذلك عن طريق الإعداد
kdiff3.premerge=False
فيMercurial.ini
- أنا لا أعرف كيفية تحقيق هذا منذ
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
إشارات الخيار في دمج مستندات التكوين جدا.