मर्क्यूरियल में किसी फ़ाइल का विशिष्ट संस्करण कैसे प्राप्त करें?


114

मैं मर्क्यूरियल में नया हूं। बस सही कमांड नहीं मिल रही है। बिना किसी भाग्य के अपडेट / चेकआउट की कोशिश की। मैं स्थानीय भंडार का उपयोग कर रहा हूं। धन्यवाद


@Omnifarious: मैंने फ़ाइल का एक स्थिर संस्करण तैयार किया है। फिर फ़ाइल पर काम करना जारी रखा लेकिन जल्द ही महसूस किया कि मुझे अंतिम "अच्छा" संस्करण की आवश्यकता है। यह svn में अपडेट के द्वारा किया जा सकता है, लेकिन जब मैं hg अपडेट की कोशिश करता हूं, तो यह "0 फाइलें ..." कहता है
कोडमिज़्म

जवाबों:


153

मुझे लगता है कि आप चाहते हैं hg revert -r<rev> <file>(यह उस फ़ाइल को बदल देगा जैसा कि दिए गए संशोधन में था)।


हां, यही वह चाहता है। :-)
सर्वव्यापी

9
या बस hg रिवर्ट करें <फ़ाइल का नाम> यदि आप अपने वर्तमान परिवर्तनों को छोड़ना चाहते हैं, और नवीनतम प्राप्त करें
ब्लैकटीगरएक्स

@BlackTigerX संशोधन के बिना एक गैर-संशोधित फ़ाइल को कुछ भी वापस नहीं किया जाएगा, भले ही वह हाल ही में प्रतिबद्ध संस्करण न हो। मैं कभी-कभी इसका उपयोग संशोधन के बीच 'चेरी पिक' फ़ाइलों के लिए करता हूं, इसलिए यह महत्वपूर्ण है।
user2864740

83

जैसा कि djc ने कहा कि revertपूर्व संशोधन के साथ मेल करने के लिए एक फ़ाइल को बदल देता है। यदि आप यह चाहते हैं कि आप उस जगह का उपयोग नहीं कर सकते हैं hg cat -r revisionid filename(जो संशोधन और फ़ाइल नाम बदलना है), जो फ़ाइल को स्टडआउट में आउटपुट करेगा, जिसे आप कहीं भी पुनर्निर्देशित करना चाहते हैं।


4
purrrfect, वास्तव में मैं क्या चाहता था।
योता

बहुत बढ़िया, ऐसा कुछ सुनना हमेशा अच्छा होता है।
Ry4an Brase

24

hg revertवास्तव में इस समस्या को हल करता है। लेकिन मुझे लगता है कि आप अपने प्रश्न के उत्तर की तुलना में चीजों की व्यापक श्रेणी के बारे में उलझन में हैं और अधिक पूरी तरह से उत्तर देने की कोशिश करना चाहते हैं।

hg updateपूरी तरह से रिपोजिटरी कमांड है और व्यक्तिगत फाइलों पर काम नहीं करेगा। यह svn updateइस तरह से तोड़फोड़ के विपरीत है । यदि आप करते हैं तो hg --help updateआप देख सकते हैं कि यह मामला है क्योंकि कमांड कोई फ़ाइल तर्क नहीं लेता है। इसका उपयोग आपकी संपूर्ण रिपॉजिटरी को एक विशेष स्नैपशॉट में ले जाने के लिए किया जा सकता है, लेकिन इसका उपयोग केवल एक फ़ाइल के लिए नहीं किया जा सकता है।

यदि आप टाइप hg --helpकरते हैं तो आपको कमांड की एक सूची दिखाई देती है। यह एक बड़ी और कुछ हद तक कठिन सूची है, लेकिन यदि आप इसके माध्यम से पढ़ते हैं, तो आपको यह पंक्ति मिलेगी:

revert       restore individual files or directories to an earlier state

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

मर्कुरियल के अलग-अलग updateआदेश होने का कारण यह है कि मर्क्यूरियल में कुछ ऐसा करना संभव है जो कि तोड़फोड़ में असंभव है। आप updateपहले वाले संस्करण में बदलाव कर सकते हैं, फिर प्रतिबद्ध कर सकते हैं। यह एक शाखा बनाएगा। updateआदेश भी वर्तमान कार्यशील निर्देशिका की मूल संशोधन को बदलने के साथ ही है कि माता-पिता संशोधन के संस्करण के लिए है कि निर्देशिका में सभी फ़ाइलों की सामग्री को बदलने के प्रभाव है।

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

आप hg parentsकमांड का उपयोग करके वर्तमान कामकाजी प्रति के मूल संशोधन (या मर्ज के मामले में संशोधन) का पता लगा सकते हैं ।

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


13

किसी विशिष्ट फ़ाइल का एक विशिष्ट संशोधन निकालने के लिए आप इसे Windows पर कर सकते हैं:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

यहां, 9 संशोधन संख्या है।

या इससे भी बेहतर:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"

1

यहाँ पिछले संस्करण को प्राप्त करने की कोशिश कर रहे हैं, तो यहाँ सटीक कमांड है:

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