2012-02-06 10 views
6

में बुकमार्क विलय करने के बाद कल this question पूछने के बाद Mercurial में शाखाओं के बारे में पूछने के बाद, मैंने नीचे दिखाए गए अनुसार अल्पकालिक शाखाओं (विशेषताओं) के लिए बुकमार्क करने का निर्णय लिया है।
लेकिन अब जब मैं अपने बुकमार्क किए गए सिर विकास संशोधन में एक साथ विलय करने के लिए कोशिश कर रहा हूँ, मैं त्रुटि नीचे मिल:Mercurial

hg update dev-1.1 
hg merge feature1 
abort: nothing to merge 

क्या मैं गलत कर रहा हूँ?

मेरी रेपो की चित्रमय प्रतिनिधित्व:

o changeset: 5:fa2b19961b46 
| bookmark: feature1 
| description: Work on feature 1 finished. 
| 
| o changeset: 4:6ea0155d4d89 
| | bookmark: feature2 
| | description: Work on feature 2 started. 
| | 
o | changeset: 3:44e335b5426c 
| | bookmark: feature1 
|/ description: Work on feature#1 started. 
| 
@ changeset: 2:407b3b94624f 
| tag:   dev-1.1 
| description: Development for release 1.1 started. 

उत्तर

11

की तरह यह कहते हैं, वहाँ विलय करने के लिए कुछ भी नहीं है - आप अद्यतन के बजाय का उपयोग करना चाहिए:

$ hg update feature1 

आप केवल इतिहास के अलग-अलग हिस्सों विलय कर सकते हैं, और यहां dev-1.1 परिवर्तनसेट feature1 परिवर्तनसेट का पूर्व पूर्वज है। Mercurial 2.1 कहते हैं

$ hg merge feature1 
abort: nothing to merge 
(use 'hg update' or check 'hg heads') 

इस मामले में और हमें आशा है कि इससे त्रुटि स्पष्ट हो जाएगी।

आप dev-1.1 changeset बुकमार्क किया है (बजाय यह टैग करने की) है, तो एक सादे

$ hg update 

अब (मर्क्युरियल 2.1 के साथ) एक अद्यतन dev-1.1 बुकमार्क की का परिणाम देगा। तो अगर आप

$ hg bookmarks 
* dev-1.1     0:b1163a24728f 
    feature1     3:c84f04513651 
    feature2     2:e60dd08af282 

और उसके बाद के साथ शुरू अद्यतन:

$ hg update 
2 files updated, 0 files merged, 0 files removed, 0 files unresolved 
updating bookmark dev-1.1 

फिर बुकमार्क अद्यतन किया जाता है:

$ hg bookmarks 
* dev-1.1     3:c84f04513651 
    feature1     3:c84f04513651 
    feature2     2:e60dd08af282 
पिछले संस्करणों के साथ

, तुम क्या करने के लिए होता है

$ hg update feature1 
$ hg bookmark -f dev-1.1 

यह अभी भी लागू होता है यदि एक सादा hg update आपको सही परिवर्तन में नहीं लेता है, उदाहरण के लिए, यदि आप इसके बजाय feature2 के साथ "विलय" करना चाहते थे।


प्रयोग का विचार विलय जब इतिहास वास्तव में से भिन्न नहीं है Git से आता है। उस प्रणाली में, फास्ट-फॉरवर्ड विलय की एक धारणा है, जिसे हम को को Mercurial में अपडेट करते हैं।

+0

ओह।इसलिए मुझे 'dev-1.1'-revision से उतरने वाली प्रत्येक सुविधा के लिए 'hg update feature1 && hg merge सुविधा 2' चलाने की आवश्यकता है? – Industrial

+1

'सुविधा 1' और' सुविधा 2 'विलय करना एक अलग मामला है। लेकिन हां, जब सुविधाओं को समानांतर में बनाया जाता है (जैसे आपके मामले में), तो आपको उन्हें अपने 'dev-1.1' ट्रैक में विलय करने की आवश्यकता है। यदि आपके पास केवल 'सुविधा 1' था, तो कोई समांतर विकास नहीं चल रहा है और इसलिए 'एचजी अपडेट' सही उत्तर है। –

+0

यह मदद नहीं करता है (कम से कम Mercurial 2.7), 'hg merge --preview सुविधा 1' सभी उचित परिवर्तनों को सूचीबद्ध करेगा ... लेकिन फिर वास्तविक विलय अभी भी यहां चर्चा की गई त्रुटि देगा। –

3

changesets सार्वजनिक किए गए हैं, तो आप किसी मर्ज करने के लिए मर्क्युरियल मजबूर करता है, तो आप भंडार में किसी मर्ज के रूप में प्रत्येक सुविधा होने पर जोर देते करना चाहते हैं कर सकते हैं:

$ hg update feature1 
$ hg debugsetparents dev-1.1 feature1 
$ hg commit -m 'Feature 1 reviewed by me.' 
$ hg bookmark -d feature1 

changesets बनाया नहीं किया गया है सार्वजनिक, आप परिवर्तनों को एक में बदल सकते हैं:

$ hg update feature1 
$ hg rebase --dest dev-1.1 --collapse 
$ hg bookmark -d feature1