मैं एक उपयोगकर्ता है जो मर्क्यूरियल के ब्रांचिंग से भ्रमित है। मुझे छोटे परिवर्तनों को कैसे ट्रैक करना चाहिए?


32

मैंने हमेशा पहले git का उपयोग किया है, लेकिन मैं अजगर में योगदान देना चाहता हूं, इसलिए अब मुझे मर्क्यूरियल सीखना है और मुझे यह बहुत निराशाजनक लगता है।

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

अब, मेरा पैच अस्वीकृत हो गया है और मैं अपनी रिपॉजिटरी से अपनी एक बुकमार्क-शाखाएँ निकालना चाहता हूँ। ठीक है, git में मैं बस अपनी शाखा को हटाने और इसके बारे में भूलने के लिए मजबूर करूंगा, इसलिए मैं अपना बुकमार्क हटा देता हूं और अब मुझे निम्नलिखित समस्याएं हैं:

  • TortoiseHG और फिर hg logभी दिखाते हैं कि कमिट और defaultशाखा के 2 प्रमुख हैं। और अगर मैं सही ढंग से समझूं, तो आप अतिरिक्त प्लग इन के बिना hg में कमिट्स को हटा नहीं सकते।

  • मर्क्यूरियल में केवल हैश नहीं है, बल्कि रिविजन नंबर भी हैं। जैसा कि मैंने अपने खुद के एक जोड़े को जोड़ा है, मुख्य केंद्रीय रेपो से अलग-अलग संशोधन संख्याओं के बाद सभी खींचे गए हैं।

  • मैं hg updateअपने masterबुकमार्क को नवीनतम कमेटी में स्वचालित रूप से स्थानांतरित करने के लिए खींचने के बाद करता हूं , लेकिन मुझे टोर्टोइसेएचजी में ऐसा करने का कोई तरीका नहीं मिला।

मैं क्या गलत कर रहा हूं? क्या यह सामान्य और अपेक्षित है और क्या मुझे इन मुद्दों को अनदेखा करना चाहिए? या मुझे अपनी शाखाओं के साथ कैसे काम करना चाहिए?

जवाबों:


22

व्यक्तिगत रूप से, आपके परिदृश्य के लिए, मैं एक शाखा बनाने से भी परेशान नहीं होता, जब तक कि मैं कई बदलावों पर काम नहीं कर रहा था, जिनमें से प्रत्येक को कोर डेवलपर्स द्वारा स्वीकार किए जाने की आवश्यकता होगी।

बस अपनी रिपॉजिटरी क्लोन करें और उसमें काम करें, फिर एक पुल अनुरोध करें।

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

मर्क्यूरियल के पास अपने पूरे विकि पृष्ठ पर " प्रूनिंग डेड ब्रांच " के विभिन्न तरीकों का वर्णन है । "क्लोन का उपयोग करना" विकल्प को आपकी आवश्यकताओं को पूरा करना चाहिए।

अपने अधिक विशिष्ट मुद्दों का जवाब देने के लिए ...

TortoiseHG और hg log अभी भी दिखाते हैं कि प्रतिबद्ध और डिफ़ॉल्ट शाखा के 2 प्रमुख हैं। और अगर मैं सही ढंग से समझूं, तो आप अतिरिक्त प्लग इन के बिना hg में कमिट्स को हटा नहीं सकते।

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

इतिहास को पुनर्जीवित करना मर्क्यूरियल दुनिया में एक बुरी बात माना जाता है, इसलिए वेनिला उत्पाद में हमेशा वह सब कुछ नहीं होता है जो एक Git उपयोगकर्ता को लगता है कि यह होना चाहिए, लेकिन उन लोगों के लिए बहुत सारे प्लगइन्स हैं जो एप्लिकेशन का उपयोग करना चाहते हैं लेकिन उनकी अलग प्राथमिकताएं हैं।

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

संशोधन संख्या के बारे में चिंता न करें। वे सुविधा का विषय हैं, अब और नहीं। हैश कोड महत्वपूर्ण पहचानकर्ता हैं जो रेपो से रेपो तक जाएंगे। संशोधन संख्या रिपॉजिटरी में असंगत हैं। अच्छी व्याख्या के लिए Hg Init देखें ।

एक ही रेपो के साथ काम करते समय रिविजन नंबर सिर्फ एक आसान और अधिक यादगार शॉर्टकट है।

मैं अपने मास्टर बुकमार्क को स्वचालित रूप से नवीनतम कमेटी में ले जाने के लिए अपडेट करने के बाद hg अपडेट करता हूं, लेकिन मुझे TortoiseHG में ऐसा करने का कोई तरीका नहीं मिला।

TortoiseHG का उपयोग करते समय, अन्य उपकरणों के बजाय कार्यक्षेत्र का उपयोग करें । सब कुछ (लगभग) वहाँ है। अद्यतन संशोधन संदर्भ मेनू में है। यह हमेशा सहज नहीं होता है , लेकिन ऊपर दिए गए लिंक पर एक अच्छा मार्गदर्शक है और जैसा कि आपको इसकी आदत है, आप अंत में आत्मविश्वास से भरे हुए त्याग को क्लिक करते हैं।


मैंने निश्चित रूप से तर्क को देखा है इससे पहले कि उचित नामित शाखाओं का अर्थ है कि एचजी
जेके

9

जाहिर तौर पर मर्क्यूरियल में ब्रांचिंग से निपटने के 4 तरीके हैं। 1 और 4 मुझे पूरी तरह से हास्यास्पद लग रहे थे, नाम वाली शाखाएं भारी लग रही हैं

Mercurial में, आप शाखाएँ नहीं बनाते हैं। हर प्रतिबद्ध प्रभावी रूप से एक शाखा है, किसी भी प्रतिबद्ध में कई माता-पिता और कई बच्चे हो सकते हैं। तो वे एक ही संस्थाओं को व्यवस्थित करने के चार अलग-अलग तरीके हैं।

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

TortoiseHG और hg log अभी भी दिखाते हैं कि प्रतिबद्ध और डिफ़ॉल्ट शाखा के 2 प्रमुख हैं।

जो वास्तव में सब कुछ डंप करने के बजाय नामित शाखाओं का उपयोग करने का कारण है default

और अगर मैं सही ढंग से समझूं, तो आप अतिरिक्त प्लग इन के बिना hg में कमिट्स को हटा नहीं सकते।

आप वास्तव में मर्क्यूरियल में कुछ भी नहीं हटा सकते हैं और आपको नहीं करना चाहिए । आप उपयोग कर सकते हैं, hg stripलेकिन यह लॉग इन नहीं है - आप बस अपने स्थानीय रेपो के एक हिस्से को काट देते हैं। आप इसे धक्का नहीं दे सकते हैं, और यदि आप एक रेपो से खींचते हैं, जिसकी शाखा आपके पास स्थानीय रूप से छीन ली गई है, तो यह वापस आती है।

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

नंबरों का कोई मतलब नहीं है। आप उन्हें भ्रमित कर सकते हैं यदि वे आपको भ्रमित करते हैं।

मैं अपने मास्टर बुकमार्क को स्वचालित रूप से नवीनतम कमेटी में ले जाने के लिए अपडेट करने के बाद hg अपडेट करता हूं, लेकिन मुझे TortoiseHG में ऐसा करने का कोई तरीका नहीं मिला।

मैंने TortoiseHG का उपयोग नहीं किया है, लेकिन hg pull -uदोनों pullऔर करेंगे update

मैंने हमेशा पहले git का उपयोग किया है, लेकिन मैं अजगर में योगदान देना चाहता हूं, इसलिए अब मुझे मर्क्यूरियल सीखना है और मुझे यह बहुत निराशाजनक लगता है।

यह ठीक है, कई मर्क्यूरियल यूजर्स Git (मेरे सहित) के बारे में ऐसा ही महसूस करते हैं।


6

यहां तक ​​कि जब मर्क्यूरियल और गिट समान होते हैं, तो उनके पास अलग-अलग डिज़ाइन होते हैं, शायद सबसे महत्वपूर्ण डिज़ाइन अंतर यह है कि मर्क्यूरियल में इतिहास को संशोधित करना उतना आसान नहीं है जितना कि गिट में (क्योंकि यह हतोत्साहित है)।

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

सबसे पहले, आपके द्वारा बताई गई कुछ चीजों पर थोड़ा प्रकाश डालने की कोशिश की जा रही है:

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

  • विधि 2 के संबंध में , ऐसा नहीं है कि शाखाएँ भारी हैं, यह है कि वे स्थायी हैं । जब तक आप पट्टी एक्सटेंशन की तरह कुछ का उपयोग नहीं करते तब तक आप एक शाखा नहीं निकाल सकते। फिर से, मर्क्यूरियल का डिज़ाइन दर्शन इतिहास को संशोधित करने की ओर नहीं जाता है (लेकिन यह उस पर बेहतर हो गया है)।

  • संशोधन संख्याओं के बारे में , वे सभी आदेशों का उपयोग करने के लिए आपके लिए केवल एक स्थानीय और अधिक मानवीय रूप से पठनीय संदर्भ हैं , जिन्हें संशोधन के साथ करना है। यदि आपको हैश का उपयोग करना पसंद है, तो आप अभी भी कर सकते हैं। संशोधन संख्याएं केवल एक शॉर्टकट हैं और विभिन्न रिपॉजिटरी के बीच किसी भी आंतरिक संचालन के लिए मर्क्यूरियल द्वारा अवहेलना की जाती हैं।

अब, आपके अन्य सवालों के जवाब देने के लिए:

  • आप देख सकते हैं कि आपके पास कौन से प्रमुख हैं hg heads, यदि आप एक एकल नामित शाखा में 2+ सिर देखते हैं, तो यह बेहतर है कि उनका विलय हो। शायद यही वह जगह है जहाँ आपका बुकमार्क है
  • आपके द्वारा अभी किए गए संशोधन से छुटकारा पाने के लिए, आप कर सकते हैं hg rollback, लेकिन मैं यह अनुमान लगा रहा हूं कि ऐसा नहीं है।
  • बुकमार्क हटाने के लिए बस करें hg bookmark --delete yourbookmark
  • आप खुश होंगे कि इतिहास में शाखाओं को काटना आसान है। में देखो रिबेस विस्तार और पट्टी आपरेशन
  • मर्क्यूरियल पहले से ही कई एक्सटेंशन के साथ बंडल में आता है, लेकिन वे डिफ़ॉल्ट रूप से सक्रिय नहीं होते हैं । बस किसी भी फ़ोल्डर में जाएं और TortoiseHG संदर्भ मेनू प्राप्त करने के लिए कहीं भी क्लिक करें, ग्लोबल सेटिंग्स और फिर एक्सटेंशन में जाएं: MQ एक्सटेंशन और रिबेस एक्सटेंशन को सक्रिय करें। यह रिपॉजिटरी के बीच संगतता को नुकसान नहीं पहुंचाता है।
  • अब जब आप यहाँ हैं, तो आप या तो:
    • पट्टी जहां आपका बुकमार्क शुरू हुआ (यह संभवतः आपकी समस्या को ठीक करता है)
    • आसान विज़ुअलाइज़ेशन के लिए, हो सकता है कि आप सामने वाले पर अपने बदलावों को फिर से दर्ज कर सकें और बाद में उन्हें हटा दें। मैंने सिर्फ रिबेस का उल्लेख किया क्योंकि यह आपके लिए कुछ अन्य समय के लिए उपयोगी हो सकता है।

इसके अलावा, git में आपके पास "निजी स्थानीय शाखाएं" हो सकती हैं क्योंकि आपको उन्हें स्पष्ट रूप से धक्का देना होगा और आप उन्हें बाद में हटा सकते हैं। Mercurial में आप अपने पास मौजूद सभी चीज़ों को आगे बढ़ाते हैं , हालाँकि, यदि आप इससे बचना चाहते हैं , तो आप चरणों की सुविधा का उपयोग कर सकते हैं और संशोधन के एक सेट को गुप्त के रूप में चिह्नित कर सकते हैं । गुप्त संशोधन धक्का नहीं मिलेगा।

अंत में, आप कुछ भी गलत नहीं कर रहे हैं , बस ध्यान रखें कि वे थोड़े अलग मानसिकता के साथ बनाए गए अलग-अलग उपकरण हैं, जो बहुत ज्यादा उबलते हैं: इतिहास (git) को संशोधित करना या इतिहास (hg) को संशोधित नहीं करना। मर्क्यूरियल में अपने आप को इतिहास (विशेष रूप से चरणों के साथ) को संशोधित करते हुए पैर में गोली मारना कठिन है और इसीलिए कुछ लोग इसे गीट से बेहतर मानते हैं


यह गारंटी देने का कोई तरीका नहीं है कि नामांकित शाखा को रिकॉर्ड करने वाले परिवर्तनों की सभी विकेन्द्रीकृत प्रतियां निष्पादित करने के बाद हटा दी गई हैं hg strip। मुझे लगता है कि कोई भी जीआईटी शाखा के नाम की विकेंद्रीकृत प्रतियों के बारे में बहस कर सकता है, सिवाय इसके कि अंतर शाखाओं का एक वैश्विक नाम स्थान है और गिट शाखा के नाम नहीं हैं। और नाम शाखाओं के कारण कई सिर मौजूद हैं। यह विकेंद्रीकृत वीसीएस के लिए एक संक्रामक डिजाइन त्रुटि है।
शेल्बी मूर तृतीय

1

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

अनाम शाखाओं के साथ चाल उनके चरण को "गुप्त" पर सेट करना है यदि आप उन्हें धक्का नहीं देना चाहते हैं अर्थात यदि आप उन्हें स्थानीय रखना चाहते हैं। यदि आप उन्हें धक्का देना चाहते हैं, लेकिन आप उनके आधार पर कोई और कमिट नहीं चाहते हैं, तो आप उनके ऊपर सिर्फ एक "--close- शाखा" करें, जिसका अर्थ है कि वे अब 'प्रमुखों' की सूची में नहीं हैं उस शाखा के कई प्रमुखों के बारे में शिकायत करना बंद कर देगा।


-1

मुझे लगता है कि हम केवल शाखा के बजाय बुकमार्क का उपयोग कर सकते हैं; हम वैसे भी उत्पाद का समर्थन जारी रखने जा रहे हैं, और लंबी अवधि में दो शाखाओं का विलय करना बड़ा सिरदर्द होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.