सबसे बड़ा अंतर यह है कि इतिहास में शाखा के नाम कैसे दर्ज किए जाते हैं। नामित शाखाओं के साथ शाखा का नाम प्रत्येक परिवर्तन में एम्बेडेड है और इस प्रकार इतिहास का एक अपरिवर्तनीय हिस्सा बन जाएगा। क्लोन के साथ कोई स्थायी रिकॉर्ड होगा जहां से कोई विशेष परिवर्तन आया था।
इसका मतलब है कि क्लोन त्वरित प्रयोगों के लिए बहुत अच्छे हैं जहां आप शाखा का नाम रिकॉर्ड नहीं करना चाहते हैं, और नामित शाखा लंबी अवधि की शाखाओं ("1.x", "2.x" और इसी तरह के लिए अच्छी हैं)।
ध्यान दें कि एक एकल भंडार Mercurial में आसानी से कई हल्के वजन वाली शाखाओं को समायोजित कर सकता है। ऐसी इन-रिपोजिटरी शाखाओं को बुकमार्क किया जा सकता है ताकि आप आसानी से उन्हें फिर से ढूंढ सकें। मान लीजिए कि आप कंपनी भंडार क्लोन है जब यह इस तरह लग रही थीं:
[a] --- [b]
आप दूर हैक और बनाने [x]
और [y]
:
[a] --- [b] --- [x] --- [y]
मीन किसी भंडार में [c]
और [d]
डालता है, जबकि, इसलिए जब आप खींचते हैं तो आपको इस तरह का इतिहास ग्राफ मिलता है:
[x] --- [y]
/
[a] --- [b] --- [c] --- [d]
यहां सी में दो सिर हैं नगल भंडार। आपकी कामकाजी प्रति हमेशा एक एकल बदलाव, तथाकथित काम करने वाली प्रतिलिपि अभिभावक परिवर्तन को प्रतिबिंबित करेगी। इसे जांचें:
% hg parents
मान लें कि यह [y]
की रिपोर्ट करता है। आप
% hg heads
के साथ सिर देख सकते हैं और इस [y]
और [d]
रिपोर्ट करेंगे।आप [d]
की एक साफ चेकआउट करने के लिए अपने भंडार को अद्यतन करने के लिए, तो बस ([d]
के लिए संशोधन संख्या के साथ स्थानापन्न [d]
) करना चाहते हैं:
% hg update --clean [d]
फिर आप देखेंगे कि hg parents
रिपोर्ट [d]
। इसका मतलब है कि आपकी अगली प्रतिबद्धता में [d]
माता-पिता के रूप में होगा। आप इस प्रकार एक बग आप मुख्य शाखा में देखा है ठीक कर सकते हैं और changeset [e]
बनाएँ:
[x] --- [y]
/
[a] --- [b] --- [c] --- [d] --- [e]
changeset [e]
पुश करने के लिए केवल, आप
% hg push -r [e]
जहां [e]
changeset हैश है की ज़रूरत है। डिफ़ॉल्ट रूप से hg push
बस रिपॉजिटरीज़ की तुलना करेगा और [x]
, [y]
, और [e]
गायब हैं, लेकिन हो सकता है कि आप अभी तक [x]
और [y]
साझा नहीं करना चाहें।
बग सुधार भी आप प्रभाव हैं, तो आप अपनी सुविधा शाखा के साथ मर्ज करना चाहते हैं:
% hg update [y]
% hg merge
कि आपके भंडार ग्राफ इस तरह लग रही छोड़ देंगे:
[x] --- [y] ----------- [z]
/ /
[a] --- [b] --- [c] --- [d] --- [e]
जहां [z]
मर्ज है [y]
और [e]
के बीच। तुम भी शाखा फेंक करने का विकल्प चुना सकता है:
% hg strip [x]
इस कहानी का मेरा मुख्य बिंदु यह है: एक एकल क्लोन आसानी से विकास के कई पटरियों का प्रतिनिधित्व कर सकते हैं। यह किसी भी एक्सटेंशन का उपयोग किये बिना हमेशा "सादा एचजी" के लिए सच रहा है। bookmarks extension हालांकि, एक बड़ी मदद है। यह आपको परिवर्तनों के लिए नाम (बुकमार्क) असाइन करने की अनुमति देगा। उपर्युक्त मामले में आप अपने विकास के सिर पर एक बुकमार्क और अपस्ट्रीम हेड पर एक बुकमार्क चाहते हैं। बुकमार्क को को मर्कुरियल 1.6 के साथ धक्का दिया और खींच लिया गया और Mercurial 1.8 में अंतर्निहित सुविधा बन गई है।
आप दो क्लोन बनाने का विकल्प चुना था, अपने विकास क्लोन [x]
और [y]
करने के बाद इस तरह दिख रही है |:
[a] --- [b] --- [x] --- [y]
और आपके अपस्ट्रीम क्लोन में शामिल होंगे:
[a] --- [b] --- [c] --- [d]
अब आप बग नोटिस करें और इसे ठीक करें। अपस्ट्रीम क्लोन उपयोग करने के लिए तैयार होने के बाद यहां आपको hg update
की आवश्यकता नहीं है।आप के लिए प्रतिबद्ध है और बनाने [e]
:
[a] --- [b] --- [c] --- [d] --- [e]
अपने विकास क्लोन में बग सुधार शामिल करने के लिए तुम वहाँ में खींच:
[a] --- [b] --- [x] --- [y]
\
[c] --- [d] --- [e]
और मर्ज:
[a] --- [b] --- [x] --- [y] --- [z]
\ /
[c] --- [d] --- [e]
ग्राफ पराक्रम अलग दिखता है, लेकिन इसकी एक ही संरचना है और अंतिम परिणाम वही है। क्लोन का उपयोग करके आपको थोड़ा कम मानसिक बहीखाता करना पड़ा।
नामित शाखाएं वास्तव में यहां तस्वीर में नहीं आईं क्योंकि वे काफी वैकल्पिक हैं। नामांकित शाखाओं का उपयोग करने के लिए स्विच करने से पहले कई वर्षों तक Mercurial खुद को दो क्लोन का उपयोग करके विकसित किया गया था। हम 'डिफ़ॉल्ट' शाखा के अलावा 'स्थिर' नामक एक शाखा बनाए रखते हैं और 'स्थिर' शाखा के आधार पर हमारी रिलीज करते हैं। अनुशंसित वर्कफ़्लो के विवरण के लिए विकी में standard branching पृष्ठ देखें।
यदि परिवर्तन एक अलग उपयोगकर्ता से आया है, जो रिकॉर्ड किया गया होता, तो क्लोन का उपयोग करना कुछ भी बुरा नहीं है। एक नई सुविधा को दबाते समय अक्सर यह जानना अनिच्छुक होता है कि आपने एक अलग रेपो से ऐसा किया था। एक स्थानीय ब्रांच एक्सटेंशन भी है, जो आपको स्थानीय स्थानीय शाखा देता है। रिपो क्लोनिंग करते समय उपयोगी उच्च लागत (समय/स्थान) से जुड़ा होता है। –
का संदर्भ: 'क्लोन त्वरित प्रयोगों के लिए बहुत अच्छे हैं' - नहीं, वे नहीं हैं! क्या होगा यदि आपके पास रेपो में कुछ हजार फाइलें हैं? क्लोनिंग में उम्र लग जाएगी (किसी भी समय 1 मिनट से ऊपर) जबकि शाखा केवल एक पल स्विचिंग (<1 सेकंड)। अभी भी नामित शाखाओं का उपयोग चेंजलॉग प्रदूषित करेगा। क्या यह एक मृत अंत नहीं है? या मुझे कुछ याद आ रहा है? – seler
ठीक है Seler; अपने मूल तर्क में संशोधन की तरह लगता है; क्लोन अच्छे होते हैं जहां कई पूर्ण प्रतियों का ओवरहेड आपके लिए महत्वपूर्ण नहीं होता है, या जब आप प्रति शाखा अलग-अलग स्थानीय कार्य प्रतियों की लागत को कम करने के लिए एचजी के सिम्लिंक/हार्डलिंक्स का उपयोग कर सकते हैं। –