2010-11-17 12 views
5

मेरे पास इसके अंदर कई उप रिपॉजिटरीज़ के साथ एक मेरकोरियल रिपोजिटरी है। भंडार में एक दृश्य स्टूडियो समाधान होता है जिसमें भंडार और उप-क्षेत्रीय परियोजनाएं होती हैं।क्या मैं एक नई नामांकित शाखा में एकाधिक मर्कुरियल सब्रेप में परिवर्तन कर सकता हूं?

मान लीजिए कि मैं एक नई सुविधा को कार्यान्वित करना चाहता हूं जिसके लिए भंडार में मुख्य प्रोजेक्ट में परिवर्तन की आवश्यकता होगी और समाधान में इसकी निर्भरता परियोजनाओं में से एक में परिवर्तन (मान लें, निर्भरता में एक नया साझा इंटरफ़ेस जोड़ना, और कार्यान्वयन मुख्य परियोजना में इंटरफ़ेस का)।

मैं फिर परिवर्तन करना चाहता हूं, लेकिन एक नई नामित शाखा में क्योंकि यह अधूरा है और बाद में विलय हो जाएगा। TortoiseHg का उपयोग करके मैं भंडार में परिवर्तन करता हूं, बनाने के लिए एक नई शाखा निर्दिष्ट करता हूं। बदले में प्रतिबद्धता उप रेपो के परिवर्तनों को करती है, लेकिन मेरे परीक्षणों में यह अपने भंडार में एक नई शाखा नहीं बनाती है, लेकिन केवल मौजूदा शाखा में बदलाव जोड़ती है।

मैं उप-रेपो को स्पष्ट रूप से प्रतिबद्धता कर सकता हूं और उस समय शाखा का नाम निर्दिष्ट कर सकता हूं, लेकिन मैं एक ही समय में प्रत्येक भंडार में नई शाखाओं में भंडारों में पूरे परिवर्तन सेट को करने का एक तरीका उम्मीद कर रहा था, इसलिए मेरा वर्कफ़्लो है सफाई वाला। क्या यह संभव है?

उत्तर

6

पहले उप-रेपो प्रतिबद्ध करें और वहां एक नामित शाखा बनाएं।

बाद में मुख्य प्रतिबद्धता को उसी शाखा में उस उप-रेपो को पहले जारी रखना जारी रखना चाहिए।

सबसे पहले आपको दो रिपॉजिटरीज़ को अलग, पूरी तरह से अलग के बारे में सोचना चाहिए। दूसरे शब्दों में, आप एक भंडार में कुछ करते हैं और प्रतिबद्ध करते हैं। फिर आप दूसरे भंडार में कुछ करते हैं, और प्रतिबद्ध करते हैं।

दो रिपॉजिटरीज के संबंध यह है कि मुख्य भंडार एक फ़ाइल, .hgsubstate फ़ाइल संग्रहीत करता है, जिसमें प्रत्येक उप-भंडार के कार्य फ़ोल्डर के पैरेंट के हैश शामिल हैं।

दूसरे शब्दों में, उप-भंडार को स्वयं में कोई ज्ञान नहीं है कि यह एक बड़ी तस्वीर का हिस्सा है। हालांकि, मुख्य भंडार उस उप-भंडार में वर्तमान चेक आउट संशोधन को जानता है। सामान्य ज्ञान के हिस्से के रूप में यह ज्ञान भंडार में किया जाता है।

इसका मतलब है कि यदि आप उप-भंडार में कुछ करते हैं, तो प्रतिबद्ध करें, उप-संग्रह अब एक नए संशोधन पर है। जब आप बाद में मुख्य भंडार में प्रतिबद्ध होते हैं, तो उप-भंडार में उस नए संशोधन के हैश को .hgsubstate फ़ाइल में अद्यतन किया जाता है, और फिर प्रतिबद्ध किया जाता है।

इसका उद्देश्य यह है कि यदि आप मुख्य भंडार में पुराने संशोधन में अपडेट करते हैं, तो .hgsubstate फ़ाइल की पुरानी प्रति को कार्य फ़ोल्डर में भी लाया जाता है, और उसके बाद उप-संग्रह को अद्यतन किया जाता है उस संशोधन के लिए, जिस पर घड़ी को वापस करने का असर पड़ता है, जब उप-भंडार कैसा दिखता है, जब उन संशोधनों में खेल होता है।

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

इसलिए टिप्पणियों में अपने प्रश्न का उत्तर देने के लिए।

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

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

तो हाँ, आपको बाद में, दोनों में भी विलय करने की आवश्यकता है।

+0

धन्यवाद। मुझे लगता है कि परिवर्तनों को विलय करने के लिए भी यही सच है? –

+0

मुझे कुछ और जानकारी के साथ अपना जवाब संपादित करने दें। –

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

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