سؤال

انتهيت من العمل على فرع ميزة feature-x. وبعد أريد دمج النتائج مرة أخرى إلى default فرع وإغلاق feature-x من أجل التخلص منه في إخراج hg branches.

توصلت إلى السيناريو التالي، لكن لديه بعض المشكلات:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

لذلك feature-x فرع (يغيرها 40-41) مغلق، ولكن هناك رئيس جديد واحد, ، وتشغيل الفرع الختامي 44, ، سيتم إدراج ذلك في hg heads كل مرة:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

تحديث: يبدو أنه منذ الإصدار 1.5 Mercurial لا يظهر رؤساء فروع مغلقة في إخراج hg heads أي أكثر من ذلك.

هل من الممكن إغلاق فرع مدمج دون مغادرة رأس واحد آخر؟ هل هناك طريقة أكثر صحة لإغلاق فرع ميزة؟

أسئلة ذات صلة:

هل كانت مفيدة؟

المحلول

إحدى الطرق هي مجرد مغادرة فروع ميزة مدمجة مفتوحة (وغير نشط):

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

طريقة أخرى هي إغلاق فرع ميزة قبل دمج استخدام الالتزام الإضافي:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

أول واحد أبسط، لكنه يترك فرع مفتوح. لا يترك المرتبة الثانية رؤساء / فروع مفتوحة، لكنه يتطلب ارتكاب آخر إضافي. يجوز للمرء أن يجمع بين الالتزام الفعلي الأخير إلى فرع الميزة مع هذا الالتزام الإضافي باستخدام --close-branch, ، ولكن ينبغي للمرء أن يعرف مقدما، والذين يرتكبون سيكون آخر واحد.

تحديث: منذ Mercurial 1.5 يمكنك إغلاق الفرع في أي وقت حتى لا تظهر في كليهما hg branches و hg heads أي أكثر من ذلك. الشيء الوحيد الذي يمكن أن يزعجك هو أن الرسم البياني للمراجعة سيظل تقنيا سيظل مراجعة أخرى دون إطفاء.

تحديث 2.: منذ الزئبق 1.8 إشارات مرجعية أصبحت سمة أساسية من mercurial. المرجعية هي أكثر ملاءمة للتفريع من الفروع المسماة. انظر أيضا هذا السؤال:

نصائح أخرى

IMHO هناك حالتان للفروع التي نسيت أن تغلق

الحالة 1: لم يتم دمج الفرع في الافتراضي

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

hg up myBranch
hg commit --close-branch

الحالة 2: تم دمج الفرع في الافتراضي

هذه الحالة ليست مختلفة بكثير عن الحالة 1 ويمكن حلها عن طريق إعادة إنتاج الخطوات للحالة 1 واثنين منهم.

في هذه الحالة، قمت بالتحديث إلى Changeset الفرع، هل ارتكاب آخر مع - فرع ودمج التغييرات الجديدة التي أصبحت الحافة في الافتراضي. تقوم العملية الأخيرة بإنشاء نصيحة جديدة موجودة في الفرع الافتراضي - Hooray!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

آمل أن يساعد هذا القراء في المستقبل.

تعديل أوتش، بعد فوات الأوان ... أعرف قراءة تعليقك تفيد بأنك تريد الاحتفاظ بميزة التشغيل X Aggaryet حولها، وبالتالي فإن نهج الاستنساخ هنا لا يعمل.

ما زلت أترك الإجابة هنا قد يساعد الآخرين.

إذا كنت ترغب في التخلص تماما من "ميزة X"، لأنه، على سبيل المثال، لم ينجح ذلك، يمكنك استنساخ. هذه هي واحدة من هذه الطريقة التي تم تفسيرها في المقال وتستمر في العمل وتحدث عن رؤساء الرؤوس.

بقدر ما أفهم أن لديك هذا وأريد التخلص من رأس "ميزة-X" مرة واحدة وإلى الأبد:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

إذن أنت تفعل هذا:

hg clone . ../cleanedrepo --rev 7

ولديك ما يلي، وسترى أن الميزة-X قد ولدت بالفعل:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

قد أكون قد أسيء فهم ما تريده ولكن من فضلك لا وزارة الدفاع، استغرقت وقتا استنساخ حالة استخدامك :)

من الغريب أن أي شخص قد اقترح بعد الطريقة الأكثر قوة لإغلاق فروع ميزة ... يمكنك فقط يجمع دمج الالتزام مع العلم - فرع النطاق (أي ارتكاب الملفات المعدلة وإغلاق الفرع في وقت واحد):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

لذلك، هذا كل شيء. لا يوجد رأس واحد إضافي على Revgraph. لا ارتكاب إضافي.

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