2010-01-21 11 views
7

मैं एक सबवर्सन उपयोगकर्ता हूं, और मुझे लगता है कि अब मेरे सिर को ज्यादातर इसके आसपास मिल गया है। तो निश्चित रूप से अब हम Mercurial में स्विच करने की सोच रहे हैं, और मुझे फिर से शुरू करने की जरूरत है।एक सबवर्जन उपयोगकर्ता की विचारधारा: Mercurial शर्तों में "शाखा" क्या है?

हमारे एकल भंडार में, हमारे पास विशिष्ट branches, tags, trunk लेआउट है। मैं एक फीचर शाखा बनानी हो तो मैं:

  • branches/Features/[FeatureName] को trunk कॉपी करने के लिए रेपो ब्राउज़र का उपयोग करें।
  • branches/Features/[FeatureName] से एक नई कार्यशील प्रतिलिपि चेकआउट करें।
  • इस पर काम करना शुरू करें।
  • कभी-कभी प्रतिबद्ध, विवादों को हल करने और प्रतिबद्ध करने में trunk विलय करें।
  • पूर्ण होने पर, trunk का एक और विलय, फिर सुविधा शाखा को ट्रंक में "पुन: व्यवस्थित करें"।

(कृपया ध्यान दें कि यह प्रक्रिया सरल है क्योंकि यह खाता रिलीज उम्मीदवार शाखाओं आदि में नहीं लेती है)।

तो मैं मैं कैसे एक ही आवश्यकताओं को पूरा करता हूँ के बारे में प्रश्न पूछना चाहते हैं (यानी सुविधा शाखाओं के बजाय ट्रंक पर काम कर) मर्क्युरियल में:

  • मर्क्युरियल में, भंडार के भीतर एक शाखा अब भी है, या है यह एक पूरी नई स्थानीय भंडार है?
  • यदि हम सभी के पास संपूर्ण भंडार की एक प्रति है, तो क्या इसका मतलब है कि हम सभी की एक-दूसरे की विभिन्न विशेषताओं की प्रतियां हैं (यह बहुत अधिक डेटा हस्तांतरण है)?
  • मुझे पता है कि Mercurial एक डीसीवीएस है, लेकिन क्या इसका मतलब है कि हम एक सर्वर पर एक सहकर्मी भंडार के बजाय, एक-दूसरे से सीधे परिवर्तन/पुल खींचते हैं?

उत्तर

7

मर्क्युरियल में, भीतर एक शाखा अभी भी भंडार है, या यह एक पूरी नई स्थानीय भंडार है?

काम करने के विचलन के तरीके के समतुल्य मेरकोरियल में multiple heads के साथ एक भंडार होगा। हालांकि, यह चीजों को करने का बेवकूफ तरीका नहीं है। आम तौर पर आपके पास किसी दिए गए भंडार में केवल एक ही सिर होगा, इसलिए प्रत्येक शाखा के लिए अलग-अलग भंडार।

हम एक पूरी भंडार की एक प्रति है, तो इसका मतलब यह है कि हम सब एक दूसरे को विभिन्न की सुविधा शाखाओं के प्रतियां (उस डेटा का एक बहुत हस्तांतरण है)?

हाँ, अगर आप अपने स्थानीय भंडार के सिर के इतिहास को देखें, तो आप सभी सुविधा शाखाओं कि में विलय कर दिया गया देखने के लिए सक्षम हो जाएगा। लेकिन तेज खजाने अंतरिक्ष कुशल उल्लेखनीय हैं। उदाहरण के लिए, मैंने Mercurial के स्रोत को प्राप्त करने के लिए hg clone https://www.mercurial-scm.org/repo/hg किया है, और यह एनटीएफएस फ़ाइल सिस्टम पर केवल 34.3 एमबी है (source code download की तुलना में, जो 1.8 एमबी है)। यदि आपकी फ़ाइल सिस्टम इसका समर्थन करती है तो Mercurial भी हार्डलिंक्स का उपयोग करेगा, इसलिए यदि आप उसी डिस्क पर किसी अन्य स्थान पर एक संग्रह को क्लोन करते हैं तो थोड़ा ओवरहेड होता है।

मैं जानता हूँ कि मर्क्युरियल एक DCVS है, लेकिन कि मतलब है कि हम एक दूसरे से सीधे से धक्का है/पुल परिवर्तन, एक सहकर्मी भंडार के माध्यम से करने के बजाय एक सर्वर पर?

काम करने का एक तरीका वास्तव में प्रत्येक डेवलपर को सार्वजनिक भंडार का पर्दाफाश करना है जिसमें वह अपने स्वयं के परिवर्तनों को धक्का देता है। अन्य सभी डेवलपर्स तब खींच सकते हैं जो वे चाहते हैं।

हालांकि, आम तौर पर आपके पास एक या अधिक "धन्य" भंडार होंगे जहां सभी परिवर्तन एकीकृत होते हैं। सभी डेवलपर्स को केवल आशीर्वाद भंडार से खींचने की आवश्यकता है। यहां तक ​​कि यदि आपके पास स्पष्ट रूप से ऐसी धन्य भंडार नहीं है, तो मुझे लगता है कि लोग स्वचालित रूप से स्वयं को व्यवस्थित करेंगे, उदा। सभी एक लीड डेवलपर से खींचकर।

+0

कोई बाज़ार डॉक से विकेन्द्रीकृत वर्कफ़्लो को अनुकूलित कर सकता है: http://doc.bazaar.canonical.com/bzr.1.18/en/user-guide/index.html#decentralized-with-shared-mainline –

+0

लेकिन यदि यह है प्रत्येक शाखा के लिए अलग रेपो, और प्रत्येक रेपो में केवल एक ही सिर होना चाहिए, फिर "फीचर रिपॉजिटरीज" कहां जाते हैं जब आप उन्हें कहीं सुरक्षित रखना चाहते हैं? आप "धन्य रेपो" में सुविधा कैसे बदलते हैं? –

+0

@Neil: Google कोड जैसे एक Mercurial होस्टिंग सेवा आमतौर पर नई शाखाओं को तेज़ी से और आसानी से बनाने का एक तरीका होगा, ताकि आप अपने प्रयोगात्मक परिवर्तन "कहीं सुरक्षित" रख सकें। –

9

मैं ऊपर लिंक तेज में शाखाओं पर इस गाइड http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial//

+0

+1 मुझे विशेष रूप से इंटरनेट कनेक्शन पर अलग-अलग शाखा भंडार को क्लोन करने के ऊपरी हिस्से से बचने के तरीके पर टिप पसंद आया –

+1

निश्चित रूप से एक अच्छी मार्गदर्शिका है, लेकिन केवल एक लिंक और उठाए गए किसी भी प्रश्न का सीधा जवाब नहीं है। +0 –

5

स्टीव Losh के लेख पढ़ने की सलाह देते बढ़िया है। मुझे कुछ शाखाओं की व्याख्या करने और डीएजी a presentation I gave a couple of months ago on mercurial that's out on slideshare में कैसे काम करता है। प्रासंगिक स्लाइड स्लाइड # 43 पर शुरू होती हैं।

मुझे लगता है कि सभी एक ही भंडार में आने वाली समझ को कुछ सरल नियमों के साथ एक डीएजी (डायरेक्टेड एसाइक्लिक ग्राफ) में संग्रहीत किया जाता है, वास्तव में यह सुनिश्चित करने में मदद करता है कि क्या हो रहा है।

  • कोई भी बच्चा नोड्स के साथ एक नोड एक "सिर"
  • रूट नोड कोई माता-पिता
  • नियमित नोड्स एक एकल अभिभावक
  • नोड्स है कि किसी मर्ज के परिणाम हैं दो माता-पिता
  • है
  • यदि किसी मर्ज नोड के माता-पिता विभिन्न शाखाओं से हैं, चाइल्ड नोड की शाखा पहले माता-पिता से विरासत में मिला है

नाम शाखाओं वास्तव में सिर्फ मीटर कर रहे हैं एटडाटा लेबल काम करता है, लेकिन वास्तव में अज्ञात शाखाओं से अलग नहीं होता है जब आप किसी व्यक्ति को अपने भंडार में काम करते हैं, या यदि आप पहले के संस्करण में वापस जाते हैं और फिर नया सिर बनाने के लिए प्रतिबद्ध करते हैं (जो आप बाद में विलय कर सकते हैं)।

+2

+1 आपकी स्लाइड साझा करने के लिए धन्यवाद। मुझे लगता है कि एकमात्र चीज गायब है 'एचजी प्रत्यारोपण' का उल्लेख है। मेरे अधिकांश svn विलय रखरखाव शाखाओं के लिए बग फिक्स के बैक-पोर्ट हैं, और ऐसे विलय वास्तव में 'एचजी मर्ज' के बराबर नहीं हैं। –

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