2011-02-09 10 views
16

एक साधारण उदाहरण लें: मैं डिफ़ॉल्ट शाखा पर काम कर रहा हूं, कुछ बदलाव स्थानीय रूप से प्रतिबद्ध हैं, और मैंने मास्टर रिपोजिटरी से कुछ और खींच लिया है। मैं अपने अलग स्थानीय भंडार में कुछ दिनों के लिए काम कर रहा हूं, इसलिए मेरे परिणामों को मास्टर में वापस धक्का देने से पहले विलय करने में काफी बदलाव हुए हैं।Mercurial में दिशा पदार्थ मर्ज करता है?

default ---o-o-o-o-o-o-o-o-o-o-o (pulled stuff) 
      \ 
      o----o------------o (my stuff) 

अब मैं दो चीजें कर सकता हूं।

विकल्प # 1:

hg pull 
hg merge 

परिणाम # 1:

default ---o-o-o-o-o-o-o-o-o-o-o 
      \     \ 
      o----o------------o-O 

विकल्प # 2:

hg pull 
hg update 
hg merge 

परिणाम # 2:

default ---o-o-o-o-o-o-o-o-o-o-o-O 
      \     /
      o----o------------o 

ये दो परिणाम मेरे लिए आइसोमोर्फिक दिखते हैं, लेकिन व्यावहारिक रूप से ऐसा लगता है कि विकल्प # 2 के परिणामस्वरूप छोटे बदलाव होते हैं (क्योंकि यह केवल मेरे कुछ बदलावों को लागू करने के बजाय मेनलाइन में कुछ बदलावों को लागू करता है)।

मेरा सवाल है: क्या इससे कोई फर्क पड़ता है? क्या मुझे अपने विलय की दिशा की परवाह करनी चाहिए? क्या मैं अंतरिक्ष बचा रहा हूं अगर मैं ऐसा करता हूं? (मर्ज के बाद hg log --patch --rev tip कर रहा है।)

उत्तर

14

वे (प्रभावी रूप से) समान हैं। आप hg log --patch --rev X आउटपुट आकार में एक अंतर देखते हैं क्योंकि लॉग परिणाम के अंतर को दिखाता है और (मनमाने ढंग से) इसके 'बाएं' पैरेंट (आधिकारिक तौर पर पी 1) दिखाता है, लेकिन ऐसा नहीं है कि यह कैसे संग्रहीत किया जाता है (Mercurial में बाइनरी डिफ स्टोरेज प्रारूप है जो पैच नहीं है/diff आधारित) और अब यह गणना की गई है (पी 1, पी 2, और सबसे हालिया-आम-पूर्वज सभी का उपयोग किया जाता है)।

एकमात्र वास्तविक अंतर यह है कि, यदि आप नामित शाखाओं का उपयोग कर रहे हैं, तो शाखा का नाम बाएं माता-पिता का होगा।

2

यदि आप बुकमार्क का उपयोग कर रहे हैं तो एक अंतर भी है। विलय करते समय, आप जिस शाखा में हैं वह शाखा है जो परिवर्तन प्राप्त कर रही है, इसलिए नया परिवर्तन उस शाखा का हिस्सा होगा। Supose आप इस स्थिति है:

default ---o-o-o-o-o-o-o-o-o-o-o -- Head: Rev 200 
      \ 
      o----o------------o -- Head: Rev 195, Bookmark: my-stuff 

आप रेव 195 में रेव 200 विलय हैं, तो बुकमार्क my-stuff पर 201 फिरना करने के लिए, पर आ जाएगा के रूप में आप एक ही शाखा बुकमार्क है कि में एक नया changeset पैदा कर रहे हैं।

दूसरी ओर, यदि आप 1 9 5 में 200 में विलय करते हैं, तो आप उस शाखा में एक परिवर्तन उत्पन्न कर रहे हैं जिसमें बुकमार्क नहीं है। my-stuff बुकमार्क रेव 195 में रहेगा।

+1

यह विशेष रूप से महत्वपूर्ण है यदि आप [एचजी-गीट] (http://hg-git.github.com/) का उपयोग कर रहे हैं, क्योंकि यह वर्चुअल गिट शाखाओं की स्थिति को ट्रैक करता है बुकमार्क का उपयोग कर। यदि आप गलत तरीके से विलय करते हैं, तो गिट शाखा बुकमार्क नहीं बढ़ेगा, और आपके पास धक्का देने के लिए कुछ भी नहीं होगा। –

+0

200 9 में विलय करने के लिए बुकमार्क को 201 तक आगे बढ़ने की गारंटी नहीं है। यदि आप मेरी सामग्री को अपडेट करते हैं; एचजी मर्ज 200 'यह होगा, लेकिन अगर आप 1 9 5 अद्यतन करते हैं; एचजी मर्ज 200 'यह नहीं होगा। बुकमार्क नाम द्वारा अपडेट इसे * सक्रिय * बनाता है। –

संबंधित मुद्दे