2009-03-02 4 views
11

आप निम्न समस्या के लिए Mercurial का उपयोग कैसे करेंगे।निजी और सार्वजनिक संस्करण को अलग करने के लिए Mercurial का उपयोग

मान लीजिए कि मेरे पास लाइब्रेरी कोर है। अब मैं एक्सटेंशन नामक उस लाइब्रेरी में एक एक्सटेंशन विकसित करना चाहता हूं। मैं विस्तार से कोर को भौतिक रूप से अलग रखना चाहता हूं, यानी मान लें कि कोर एक ओपन सोर्स लाइब्रेरी है और एक्सटेंशन एक निजी पुस्तकालय है जो कोर पर बनाता है (शायद इसमें कुछ सामान शामिल हैं जो मैं व्यक्तिगत रखना चाहता हूं। जो भी हो।)। जाहिर है, मैं विस्तार से पूरे स्रोत को सार्वजनिक भंडार में धक्का नहीं देना चाहता हूं। लेकिन दूसरी ओर मैं एक्सटेंशन से कोर में कुछ बदलावों को धक्का देना चाहूंगा (यदि मैं कोर में एक्सटेंशन का "दान" करने का निर्णय लेता हूं) या इसके विपरीत (यदि मैं बग फिक्स को शामिल करना चाहता हूं, तो कहें)।

आप इस बारे में कैसे जाएंगे, कोर को एक्सटेंशन को लीक करने के जोखिम को कम करने के जोखिम को कम करने के बाद (इतिहास को सार्वजनिक सर्वर पर धक्का दिया जाता है, वहां वापस नहीं जा रहा है!), कुछ बदलावों के लिए ऐसा करने के लिए लचीला रहने के दौरान। शाखाओं? क्लोन? MQS? कुछ और?

मैं वर्तमान में केवल क्लोनिंग रिपॉजिटरीज़ से परिचित हूं, और इसकी सादगी की तरह बहुत अधिक हूं।

संपादित करें: मैं इस योजना के साथ आया, लेकिन मैं इसे विंडोज़ के तहत काम करने के लिए काफी कुछ नहीं कर सकता। दो भंडार (कोर और एक्सटेंशन)। विस्तार में दो शाखाएं, कोर और एक्सटेंशन भी हैं। अब, आप Mercurial में एक हुक प्रति रिपोजिटरी पंजीकृत कर सकते हैं, इसलिए मैं कोर रेपो में 'pretxnchangegroup' हुक पंजीकृत करना चाहता हूं जो एक्सटेंशन शाखा से चेकइन को अस्वीकार करता है, जैसा कि in the Mercurial book समझाया गया है। सिवाय इसके कि मुझे खिड़कियों के नीचे काम करने के लिए काफी कुछ नहीं मिलता है। तो:

  • किसी के पास विंडोज़ के तहत इस तरह कुछ (वास्तव में, किसी भी हुक जो संक्रमण के परिणाम को बदलता है) का उदाहरण है?
  • मैं अभी भी विस्तार से कोर शाखा में चेरीपिक परिवर्तनों में ट्रांसप्लेंट का उपयोग करने में सक्षम हूं, है ना?

उत्तर

2

कुछ परीक्षण के बाद, मैं इस योजना को आजमाने की कोशिश कर रहा हूं। दो मुख्य भंडार और दो नामित शाखाएं, कोर और विस्तार।

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

pretxnchangegroup.branch = hg heads --template "current branches: {branches} " | find "Extension" && exit 1 || exit 0

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

दूसरे रेपो में कोर और एक्सटेंशन शाखाएं और परिवर्तन दोनों शामिल हैं, और जहां दो शाखाओं के बीच परिवर्तनों का आदान-प्रदान होता है। कोर से एक्सटेंशन तक सामान्य विलय, और विस्तार से कोर तक प्रत्यारोपण।

उम्मीद है कि यह किसी और की मदद करेगा।

+0

आप हुक को * केवल * कोर को कैसे बदल सकते हैं? क्या यह 0 से बाहर निकल जाएगा || बाहर निकलें 1? –

1

... कि क्या संस्करण नियंत्रण के बारे में है नहीं है (एक बार इतिहास धकेल दिया जाता है, वहाँ कोई वापस जा रहा है!)

सुनिश्चित करें!

मैंने पहले ऐसा कुछ नहीं किया है, लेकिन ऐसा लगता है कि transplant कमांड सहायक होगा। इसके अलावा, आप क्लोन के क्लोन रख सकते हैं, और उनमें से किसी को भी दबा सकते हैं, et cetera।

+0

मेरा मतलब है: इसे धक्का दिया जाने के बाद, इसे सर्वर से वापस लेना असंभव है। तो कोड जो मैं निजी रखना चाहता हूं अब दुनिया के साथ साझा किया गया है। –

+0

हालांकि प्रत्यारोपण के बारे में अच्छी युक्ति। –

+0

हाँ, यह सच है, लेकिन आप जंगलों को भी चाहते हैं (जैसा कि बताया गया है ... मैं हमेशा उनके बारे में मर्कुरियल में भूल जाता हूं। – nlucaroni

1

Forest extension आपको एक बड़े हिस्से के रूप में कई रिपोज़ रखने की अनुमति देता है। ऐसा लगता है कि यहां मदद कर सकता है।

+0

उसे नहीं पता था, लेकिन मुझे यकीन है कि यह कैसे मदद कर सकता है। ऐसा लगता है कि यह एक ऐसी स्थिति के लिए अधिक तैयार है जहां मेरे पास बहुत से सार्वजनिक भंडार होंगे जो मैं एक बार धक्का देना चाहता हूं। ऐसा लगता है कि सार्वजनिक सर्वर को गलती से धक्का देने का जोखिम बढ़ता जा रहा है। –

+0

यह आपको निजी और सार्वजनिक कोड को अलग रखने में मदद करता है, लेकिन सिंक में। जंगल में रेपो के बीच परिवर्तन को धक्का देने का कोई खतरा नहीं है। लेकिन क्या आप कोर को एक्सटेंशन के शुद्ध सबसेट के रूप में रखना चाहते हैं? वह ट्रिकियर होगा। : - | – Macke

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