2011-06-30 13 views
5

में ब्रांचिंग के लाभों को समझने में सहायता करें मैंने यह समझने के लिए संघर्ष किया है कि शाखा कैसे फायदेमंद है। मैं दो सिर, या 2 शाखाओं के साथ एक रेपो को धक्का नहीं दे सकता ... तो मुझे कभी उनकी आवश्यकता क्यों होगी?Mercurial

उत्तर

9

सबसे पहले, आप दो सिर के साथ भी धक्का दे सकते हैं, लेकिन चूंकि आप शायद ऐसा नहीं करना चाहते हैं, तो डिफ़ॉल्ट व्यवहार आपको ऐसा करने से रोकने के लिए है। हालांकि, आप धक्का को आगे बढ़ने के लिए मजबूर कर सकते हैं।

अब, ब्रांचिंग के लिए, चलिए एक गैर-वितरित संस्करण नियंत्रण प्रणाली, जैसे सबवर्जन में एक साधारण परिदृश्य लेते हैं।

मान लीजिए कि आपके पास एक सहयोगी है जो आपके जैसा ही प्रोजेक्ट में काम कर रहा है। सबवर्जन रिपॉजिटरी में वर्तमान नवीनतम परिवर्तन 100 संशोधन है, आप दोनों स्थानीय रूप से इस पर अपडेट करते हैं ताकि अब आपके दोनों में एक ही फाइल हो।

ठीक है, अब आपका सहयोगी पहले से ही कुछ घंटों के लिए अपने बदलावों पर काम कर रहा है, और इसलिए वह काम करता है। यह केंद्रीय भंडार को संशोधन 101 तक लाता है। आप अभी भी स्थानीय रूप से 100 पर संशोधन कर रहे हैं, और आप अभी भी अपने परिवर्तनों पर काम कर रहे हैं।

किसी बिंदु पर, आप पूरा करते हैं, और आप प्रतिबद्ध करना चाहते हैं, लेकिन सबवर्सन आपको नहीं जाने देगा। यह कहता है कि आपको पहले अपडेट करना होगा, इसलिए आप अपडेट प्रक्रिया शुरू करें।

अद्यतन प्रक्रिया आपके परिवर्तनों को लेना चाहती है, और दिखाती है कि आपने वास्तव में 100 के बजाय संशोधन 101 के साथ शुरुआत की है। यदि आपके परिवर्तन आपके सहयोगी के साथ संघर्ष में नहीं हैं, तो सभी डरावनी डोरि हैं, लेकिन यदि आपके परिवर्तन संघर्ष में हैं, आपको एक समस्या है।

अब आपको अपने परिवर्तनों के साथ अपने परिवर्तनों को मर्ज करना होगा, और चीजें खराब हो सकती हैं। उदाहरण के लिए, आप एक फ़ाइल को ठीक कर सकते हैं ठीक है, दूसरी फ़ाइल ठीक है, या तो आप सोचते हैं, और फिर तीसरी फ़ाइल, और अचानक आप पाते हैं कि आपके पास कुछ विवरण गलत हैं, तो यह बेहतर होगा दूसरी फाइल को अलग-अलग मिलाएं।

जब तक आप अपडेट करने से पहले अपने परिवर्तनों का बैकअप नहीं ले लेते, और जितनी जल्दी या बाद में आप भूल जाएंगे, आपको कोई समस्या है।

अब, उपरोक्त परिदृश्य वास्तव में काफी आम है। खैर, शायद विलय करने वाला हिस्सा नहीं, यह इस बात पर निर्भर करता है कि एक ही समय में एक ही क्षेत्र या फाइलों में कितने काम कर रहे हैं, लेकिन "भाग लेने से पहले अपडेट होना चाहिए" भाग सबवर्सन के साथ काफी आम है।

तो Mercurial यह कैसे करता है?

ठीक है, Mercurial स्थानीय रूप से काम करता है, यह किसी भी दूरस्थ भंडार से बात नहीं करता है, इसलिए यह आपको काम करने से नहीं रोक देगा।

तो, चलिए इस बार फिर से Mercurial में उपरोक्त परिदृश्य को आजमाएं।

दूरस्थ भंडार में tipmost changeset संशोधन 100 आप दोनों इस नीचे क्लोन है है, और आप दोनों परिवर्तन पर काम करने के लिए, संशोधन 100

आपका सहयोगी उसके परिवर्तन पूरा करता है और करता है से शुरू कर रहे हैं, स्थानीय स्तर पर। उसके बाद वह अपने परिवर्तन को केंद्रीय भंडार तक पहुंचाता है, जिसमें 101 को संशोधित करने के लिए टिप लाया जाता है।

फिर आप अपने परिवर्तनों को पूरा करते हैं, और स्थानीय रूप से भी प्रतिबद्ध करते हैं, और फिर आप धक्का देना चाहते हैं, लेकिन आपको त्रुटि संदेश मिल जाता है पहले से ही खोजा गया है, और इसके बारे में पूछ रहा है।

तो यह अलग कैसे है?

ठीक है, आपके परिवर्तन अब प्रतिबद्ध हैं, कोई रास्ता नहीं है, जब तक कि आप गलती से उन्हें खोने या नष्ट करने के लिए वास्तव में कठिन आज़माएं।

यहाँ खेलने में 3 खजाने और अपनी वर्तमान स्थिति है:

Colleague  ---98---99---100---A 

Central   ---98---99---100---A 

You    ---98---99---100---B 

आप धकेला था, और मध्य भंडार इस प्रकार दिखाई देगा यह (के माध्यम से धक्का या बल) करने के लिए अनुमति दी गई थी, तो:

Central   ---98---99---100---A 
           \ 
           +--B 

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

तो इसके बजाय आप खींचते हैं, और आप उपरोक्त स्थिति में अपने भंडार प्राप्त करते हैं।

दूसरे शब्दों में, आप अपने स्वयं के भंडार को प्रभावित करने और वहां कई सिर बनाने का चयन कर सकते हैं, लेकिन आप किसी और को पर उस समस्या को लागू नहीं कर रहे हैं।

फिर आप विस्फोट में उसी प्रकार के ऑपरेशन को मर्ज करते हैं, जो आपके परिवर्तन को सुरक्षित रखते हुए, यह प्रतिबद्ध था, और आप इसे गलती से भ्रष्ट या नष्ट नहीं करेंगे। यदि, मध्य विलय, आप शुरू करना चाहते हैं, तो आप कुछ खो सकते हैं, कोई नुकसान नहीं हुआ।

You    ---98---99---100---A----M 
           \  /
           +--B--+ 

यह अब पुश करने के लिए सुरक्षित है, और अगर आपके सहयोगी अब खींचती है, वह जानता है कि वह एम changeset से जारी रखने के लिए है, एक:

मर्ज करने के बाद, अपने स्थानीय भंडार इस तरह दिखता है जिसने उसे और आपके परिवर्तनों को विलय कर दिया।

उपर्युक्त वर्णन Mercurials वितरित प्रकृति के कारण होता है।

आप उन्हें अधिक स्थायी बनाने के लिए शाखाओं का नाम भी दे सकते हैं। उदाहरण के लिए, आप एक शाखा "स्थिर" नाम दे सकते हैं, यह संकेत करने के लिए कि उस शाखा के किसी भी बदलाव का पूरी तरह से परीक्षण किया गया है और ग्राहकों को रिहाई के लिए सुरक्षित है या उत्पादन में डाल दिया गया है। परीक्षण के पूरा होने पर आप केवल उस शाखा में बदलावों को मर्ज करेंगे।

प्रकृति, उपरोक्त विवरण के समान ही है। जब भी एक से अधिक व्यक्ति Mercurial के साथ एक परियोजना पर काम करता है, तो आप शाखाएं प्राप्त करेंगे, और यह एक अच्छी बात है।

+0

आप एक से अधिक सिर, जो एक तुम पर काम कर रहे बनाते हैं? – Webnet

+0

यदि * मैं * कई सिर बना देता हूं, तो यह * मेरी * ज़िम्मेदारी है जिसके बारे में पता होना चाहिए। यदि मैं * ट्रैक करने का प्रबंधन भी नहीं करता हूं कि मैं किस सिर पर काम कर रहा हूं, तो * मुझे * कई सिर नहीं बनाना चाहिए। संभवतः जब आप रिमोट रिपोजिटरी से परिवर्तनों को खींचते हैं, ताकि आपके पास एकाधिक सिर हों, मेरे परिवर्तनों को स्पॉट करना आसान है क्योंकि उनके पास मेरा नाम है। –

+0

मुझे शाखा बनाने के लाभों को काफी समझ में नहीं आता है ... यदि आप केवल 1 सिर पर अपडेट कर सकते हैं, तो दो क्यों हैं?क्या आप हमेशा कई सिर के बजाय एक और भंडार नहीं बनाएंगे? – Webnet

1

जब भी रेपो के एक से अधिक क्लोन बनाए जाते हैं और उन क्लोनों में काम किया जाता है, तो शाखाएं होती हैं, चाहे आप उन्हें hg branch कमांड का उपयोग करके नाम दें या नहीं। मेरा दर्शन है, आप उन्हें एक नाम भी दे सकते हैं। यह चीजों को कम भ्रमित करता है।

तेज शाखाओं का एक अच्छा विवरण: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/

+0

मैंने उस मार्गदर्शिका में से कुछ के माध्यम से पढ़ा है, मुझे अभी भी समझ में नहीं आ रहा है कि आप एक रिपो की प्रतिलिपि बनाने के बजाय कभी भी शाखा क्यों करेंगे ... – Webnet

+0

एक ही भंडार में शाखाओं का नाम रखने से उन्हें एकाधिक होने से अधिक निकटता से जोड़ा जाता है क्लोन। हो सकता है कि आप चाहते हैं कि आपकी टीम को हमेशा एक रिलीज शाखा तक पहुंच हो, या जब वे आपके भंडार को क्लोन करते हैं तो एक नई फीचर शाखा हो, या आप बस जगह पर कई क्लोन का ट्रैक नहीं रखना चाहते हैं। – krupan