2009-06-06 12 views
15

मैं Mercurial का उपयोग नहीं करता, लेकिन मैं शुरू करना चाहता हूं, इसलिए मैं इसके बारे में पढ़ रहा हूं। एकमात्र एससीएम प्रणाली जिसका मैंने बड़े पैमाने पर उपयोग किया है वह सीवीएस है। Mercurial के बारे में मैंने जो कुछ पढ़ा है, वह समझ में आता है, और अच्छा लगता है। लेकिन मैं वैकल्पिक रूप से चौंक गया हूं और इस तरह से परेशान हूं कि यह टैग करता है।मैं Mercurial में सभी टैग के बारे में हमेशा कैसे जान सकता हूं?

एक टैग सिर्फ एक changeset लिए एक उपनाम है (और 'changeset' से हम वास्तव में मतलब राज्य changeset से उत्पन्न)। ठंडा। टैग्स से चेंजेट आईडी में मैपिंग .hgtags फ़ाइल में संग्रहीत है। भी शांत है। .hgtags फ़ाइल का संस्करण है।

क्या?

यह counterintuitive परिणामों के बहुत सारे है। उदाहरण के लिए, यदि मैं एक परिवर्तन करता हूं जिसे मैं टैग करना चाहता हूं (कहें, कोड जो रिलीज 1.0 होगा), मुझे टैगिंग के बाद फिर से प्रतिबद्ध करना होगा, अद्यतन टैग फ़ाइल को भंडार में रखना होगा। और यदि मैं बाद में उस टैग किए गए परिवर्तन को कुछ बाद की तारीख में अपडेट करता हूं, तो कार्यशील प्रति में उस टैग का कोई ज्ञान नहीं होगा। अगर मैं कुछ काम करता हूं, इस प्रकार एक नई शाखा (कहें, बगफिक्स के लिए, 1.1 की तरफ बढ़ रहा है), उस शाखा को टैग के बारे में कोई जानकारी नहीं होगी, जिससे यह बढ़ता है। जब तक मैं इसे मैन्युअल रूप से कॉपी नहीं करता, वह है।

और जैसा कि विकास महत्वपूर्ण ट्रंक और मेरी नई शाखा दोनों पर जारी रहता है, महत्वपूर्ण परिवर्तनों को चिह्नित करने के लिए टैग बनाए जा रहे हैं (ट्रंक पर 2.0 रिलीज, 1.1 और 1.2 बगफिक्स शाखा पर रिलीज़), दोनों शाखाएं आगे बढ़ेगी अन्य शाखा के टैग की अज्ञानता। इसलिए, यदि मैं एक शाखा पर काम करना समाप्त करता हूं, और किसी अन्य बदलाव में स्विच करना चाहता हूं (कहें, मैं 1.2 बगफिक्स रिलीज को समाप्त करता हूं, लेकिन अब 2.0 के आधार पर 2.1 बगफिक्स पर शुरू करना है), अब मैं भरा हुआ हूं। मेरा वर्तमान परिवर्तन 2.0 के बारे में नहीं जानता!

मैं क्या कर सकता हूं?

  • मैं किसी ऐसे व्यक्ति से पूछ सकता हूं जो 2.0 के लिए वास्तविक परिवर्तन आईडी को पढ़ने के लिए 2.x शाखा पर काम कर रहा है, और स्पष्ट रूप से इसका उपयोग करता है, लेकिन यह अपमानजनक है।
  • मैं अपनी शाखाओं का नाम दे सकता हूं, साथ ही टैग का उपयोग कर सकता हूं, ताकि मैं 2.x शाखा के सिर पर जा सकूं, इस प्रकार नए टैग के बारे में सीख सकूं, और फिर 2.0 टैग पर वापस जा सकूं। यह मानते हुए कि टैग के विपरीत, शाखाएं सार्वभौमिक रूप से दिखाई देती हैं - क्या यह मामला है? यहां तक ​​कि अगर यह है, यह गुंजाइश लगता है।
  • मैं भंडार के बाहर एक भी वैश्विक hgtags फ़ाइल को बनाए रखने सकता है, और एक अद्यतन पर एक कॉपी में खींचने के लिए, स्थानीय प्रतिलिपि को अधिलेखित हुक के एक जोड़े का उपयोग करें, और एक प्रतिबद्ध पर किसी भी परिवर्तन वापस कॉपी करने के लिए। मुझे यकीन नहीं है कि यह एक बहु-उपयोगकर्ता वातावरण में कैसे काम करेगा, जहां डेवलपर्स एक साझा भंडार में परिवर्तन को दबा रहे हैं; मुझे hgtags फ़ाइल के लिए एक अलग भंडार की आवश्यकता हो सकती है।
  • मैं स्थानीय टैग का उपयोग कर सकता हूं, जो संस्करण तंत्र के बाहर खड़ा है, और इसलिए पूरी समस्या से बचें। साझा वैश्विक टैग के साथ, मुझे डेवलपर्स के बीच localtags फ़ाइल को सिंक्रनाइज़ करने के लिए एक तंत्र स्थापित करना होगा।

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

यहाँ एक धारणा है कि मैं एक भी भंडार में नामित शाखाओं का उपयोग कर शाखाओं प्रबंध कर रहा हूँ, बल्कि भंडार-प्रति-शाखा के अलावा है। अगर मैं बाद वाले करता तो क्या स्थिति बेहतर होगी?

+0

@SilentGost: 'mergurial' टैग के बाद से मैंने 'hg' टैग हटा दिया है और अधिक उपयोग किया जाता है। लेकिन शायद यह एक गलती थी? –

उत्तर

19

.hgtags फ़ाइल का संस्करण

  • टैग संपादित करने की अनुमति देता हैं और देखते हैं जो उन्हें संपादित सामान्य तंत्र
का उपयोग कर खजाने के बीच
  • हस्तांतरण टैग (और क्यों अगर वे एक उचित प्रतिबद्ध संदेश छोड़)

    हालांकि, यहां कुछ भ्रम चल रहा है।

    • आप लिखते हैं कि

      [...] और अगर मैं फिर कुछ बाद की तारीख में है कि टैग changeset को अद्यतन करते हैं, काम कर प्रतिलिपि है कि टैग की किसी भी जानकारी शामिल नहीं होंगे। [...]

      यह गलत है, टैग सभी सिर में पाया .hgtags फाइलों से एकत्र कर रहे हैं। इसका मतलब है कि आप एक पुराने टैग (hg update 0.1) के लिए अद्यतन और अभी भी अपने सभी टैग (hg tags) देख सकते हैं।

    • आप से पूछें कि शाखाओं सार्वभौमिक दिखाई दे रहे हैं। हां वे हैं - नामित शाखाओं के नाम किसी भी संदर्भ में उपयोग किए जा सकते हैं जहां आपको एक टैगसेट के रूप में एक परिवर्तन निर्दिष्ट करने की आवश्यकता है।

    सुनिश्चित करें कि आप समझते हैं कि आप नामों का उपयोग शुरू करने से पहले क्या नाम हैं। वे वास्तव में बगफिक्स शाखा बनाने के लिए आवश्यक हैं। आप इसके बजाय बस वापस जा सकते हैं (hg update 1.0) और बग ठीक करें और फिर प्रतिबद्ध करें। इससे एक नया सिर बन जाएगा, जो 1.1 की ओर आपकी विकास की रेखा है (यह आपको multiple heads देता है)। तो आपको अपने भंडार में विकास की एक नई शाखा जोड़ने के लिए नामित शाखा बनाने की आवश्यकता नहीं है।

    कई सिर होने पूरी तरह से कई क्लोन होने के बराबर है। तुम भी आगे पीछे परिवर्तित कर सकते हैं: आप

    % hg clone -r X-head repo repo-X 
    

    उपयोग कर सकते हैं repo में अन्य changesets से X-head changeset और अपने पूर्वजों को सुलझाना। और आप सभी परिवर्तनों को एक बड़े क्लोन में खींचकर कई क्लोन जोड़ सकते हैं।

    Named branches समान है, फिर भी अलग हैं। वे आपको प्रत्येक परिवर्तन में नामित करने की अनुमति देते हैं। तो आपके नाम में "foo" नाम से कई बदलाव हो सकते हैं। जब आप hg update foo करते हैं तो आप इन परिवर्तनों में से अधिकांश को टिप पर समाप्त कर देंगे। इस तरह, नामित शाखाएं एक प्रकार के फ़्लोटिंग टैग के रूप में कार्य करती हैं।

    आप अपने changesets के लिए एक स्थायी लेबल के विचार के साथ असहज महसूस करते हैं, तो आप के बजाय bookmarks extension कोशिश कर सकते हैं। यह आपको "फ़्लोटिंग टैग" भी देगा जो आप अपडेट करने के लिए उपयोग कर सकते हैं, लेकिन वे संस्करण के स्थायी रूप से इतिहास का हिस्सा नहीं होंगे क्योंकि उनका संस्करण नहीं है।

    मुझे आशा है कि यह एक बिट में मदद करता है।

  • +0

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

    +0

    आप सही हैं, आपको परिवर्तन आईडी जानना होगा। "एचजी हेड" आपको बता सकता है, और बुकमार्क एक्सटेंशन उन्हें एक नाम दे सकता है। कई क्लोनों का उपयोग करने का सबसे आसान तरीका जैसे कि हम इसे Mercurial प्रोजेक्ट में ही करते हैं। वहां हमारे पास एचजी और एचजी-स्थिर क्लोन हैं और बगफिक्स एचजी-स्थिर में जाते हैं। हम शाखाओं का नाम भी इस्तेमाल कर सकते थे, मुझे लगता है कि हम ऐसा नहीं करते हैं क्योंकि एचजी/एचजी-स्थिर योजना का उपयोग करने के बाद नामित शाखाओं को लंबे समय तक जोड़ा गया था। –

    +3

    अब हम मर्कुरियल प्रोजेक्ट में नामित शाखाओं का उपयोग करते हैं। साथ ही, बुकमार्क एक्सटेंशन अब मुख्य कार्यक्षमता का हिस्सा है, जिसका अर्थ है कि यह Mercurial 1.8 में अपग्रेड करने के बाद हमेशा सक्षम होता है। –

    1

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

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

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