सभी को छोड़ दें और नवीनतम संशोधन की स्वच्छ प्रतिलिपि प्राप्त करें?


159

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

सबसे आसान तरीका क्या है कि सभी को त्याग दें और एक स्वच्छ कार्य निर्देशिका प्राप्त करें जिसमें नवीनतम संशोधन हो?

वर्तमान में मैं यह कर रहा हूं:

hg revert --all
<build command here to delete the contents of the working directory, except the .hg folder.>
hg pull
hg update -r MY_BRANCH

लेकिन ऐसा लगता है कि एक सरल तरीका होना चाहिए।

मैं रेपो को हटाने के बराबर करना चाहता हूं, एक ताजा क्लोन और एक अद्यतन करना। लेकिन इसके लिए रेपो बहुत बड़ा है जो काफी तेज है।


1
क्या "(सामग्री हटाएं ...)" "रीवर्ट --all" कमांड या आपके द्वारा निष्पादित किए जाने वाले कदम के लिए एक टिप्पणी है? मैं पूछता हूं क्योंकि "एचजी अपडेट" केवल उन फाइलों को अपडेट करेगा जो बदल गए थे। यदि आप अपडेट करने से पहले अन्य फ़ाइलों को निकालते हैं, तो आप उन्हें वापस नहीं लेंगे, जब तक कि आप नल-संशोधन ( hg update 00) में वापस अपडेट नहीं करते हैं और फिर टिप तक वापस आ जाते हैं। hg revert --allखींचने और अपडेट करने से पहले लगातार काम करने वाले फ़ोल्डर की स्थिति में वापस आने के लिए पर्याप्त क्यों नहीं है?
लास वी। कार्लसन

यह मेरे बिल्ड सॉफ्टवेयर के साथ किया गया एक अलग कदम है। (मैं सिर्फ एक कमांड-लाइन डिलीट का उपयोग कर सकता था, लेकिन नहीं किया।)
रोरी

1
आपको archiveभविष्य में उपयोगी होने का आदेश मिल सकता है । उदाहरण के लिए, आप कर सकते हैं hg archive ../newbuildऔर आखिरी में आपके भंडार का एक स्नैपशॉट hg updateरखा जाएगा। मैं आम तौर पर रात के लिए बनाता है कि सिर्फ इसलिए मैं अपने रेपो को अव्यवस्थित करने का जोखिम नहीं उठाता हूं। जब आपको इसकी आवश्यकता नहीं है तो बस बिल्ड निर्देशिका को हटा दें।
टिम पोस्ट

जवाबों:


212

उन चरणों को छोटा किया जाना चाहिए :

hg pull
hg update -r MY_BRANCH -C

-Cझंडा अद्यतन आदेश बताता है अद्यतन करने से पहले सभी स्थानीय परिवर्तनों को निरस्त करना।

हालाँकि, यह अभी भी आपकी रिपॉजिटरी में अनट्रैक की गई फ़ाइलों को छोड़ सकता है। ऐसा लगता है कि आप उन लोगों से भी छुटकारा पाना चाहते हैं, इसलिए मैं इसके लिए purgeएक्सटेंशन का उपयोग करूंगा :

hg pull
hg update -r MY_BRANCH -C
hg purge

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


6
धन्यवाद, यह 'पर्स' था जिसकी मुझे जरूरत थी। अपडेट -C को अनट्रैक फ़ाइलों से छुटकारा नहीं मिलता है, जो कि मुख्य बात है जिससे मैं जूझ रहा था।
रोरी

4
TortoiseHg का उपयोग आप शुद्ध करने के लिए भी कर सकते हैं। आपको केवल कार्यक्षेत्र की सेटिंग में एक्सटेंशन को चालू करना होगा (या mercurial.ini को संपादित करें)।
डेव

18
यदि पर्ज एक्सटेंशन सक्रिय नहीं है, तो आप इस तरह से कमांड का उपयोग भी कर सकते हैं: hg --config "extensions.purge=" purge --all
सैमुअल डेलिसल

5
@ csharptest.net hg purge --allने मुझे सिर्फ एक अच्छा सिरदर्द दिया, क्योंकि इसने मेरे स्थानीय विन्यासों को भी मिटा दिया, अर्थात: डेटाबेस उपयोगकर्ता / पासवर्ड इत्यादि :)
VMC

@SamuelDelisle आपको धन्यवाद सर, मैं अपनी स्क्रिप्ट में इस एक बार के कमांड के लिए कोई भी विन्यास परिवर्तन नहीं करना चाहता था!
joonas.fi

113
hg up -C

यह सभी बदलावों को हटा देगा और वर्तमान शाखा के नवीनतम प्रमुख को अपडेट कर देगा।

और आप सभी गैर-फ़ाइलों को भी हटाने में सक्षम होने के लिए पर्ज एक्सटेंशन को चालू कर सकते हैं।


क्या इसमें अन-ट्रैक की गई फ़ाइलें शामिल हैं? मैं उन अन्य आदेशों के साथ कुछ समस्याएं थी जिन्हें मैं कोशिश कर रहा था। मैं इसे अभी
आज़माऊँगा

7
@ रोरी: नहीं, hg purgeबिना फाइल के है।
zerkms

10

बिना शुद्ध एक्सटेंशन के * निक्स पर अनट्रैक को हटाने के लिए आप इसका उपयोग कर सकते हैं

hg pull
hg update -r MY_BRANCH -C
hg status -un|xargs rm

जो उपयोग कर रहा है

अपडेट -r --rev REV संशोधन

अद्यतन -C - झुकना विस्थापित परिवर्तन (कोई बैकअप नहीं)

status -u --unknown केवल अज्ञात (ट्रैक नहीं की गई) फ़ाइलें दिखाते हैं

status -n --no-status hide status prefix


4

यदि आप एक ऐसी विधि की तलाश कर रहे हैं जो आसान है , तो आप यह कोशिश करना चाह सकते हैं।

मैं अपने लिए अपने सभी उपकरणों के लिए कमांडलाइन को शायद ही याद रख सकता हूं, इसलिए मैं UI का उपयोग करते हुए इसे करना चाहता हूं:


1. सबसे पहले, "कमिट" चुनें

कमिट

2. फिर, अनदेखा फ़ाइलों को प्रदर्शित करें। यदि आपके पास विस्थापित परिवर्तन हैं, तो उन्हें छिपाएं।

अनदेखा फ़ाइलें दिखाएँ

3. अब, उन सभी का चयन करें और "हटाए गए बिना हटाए" पर क्लिक करें।

उन्हें हटाओ

किया हुआ। यह एक ऐसी प्रक्रिया है जो कमांडलाइन सामान की तुलना में याद रखना बहुत आसान है।


मुझे यकीन नहीं है (मैं खुद SourceTree का उपयोग करता हूं), लेकिन ये स्क्रीनशॉट TortoiseHg Workbench से प्रतीत होते हैं। सामान्य तौर पर, मुझे लगता है कि यूआई-आधारित समाधान सहायक हैं, लेकिन इस उत्तर को बेहतर लेबलिंग की आवश्यकता है। इसके अलावा, "उन्हें छुपाना" मुझे थोड़ा अस्पष्ट लगता है।
जॉन कॉम्ब्स

3

hg स्टेटस आपको सभी नई फाइलें दिखाएगा, और फिर आप उन्हें सिर्फ rm कर सकते हैं।

आम तौर पर मैं अनदेखा और बिना पड़ी फाइलों से छुटकारा पाना चाहता हूं, इसलिए:

hg status -iu                          # to show 
hg status -iun0 | xargs -r0 rm         # to destroy

और फिर उस के साथ पालन करें:

hg update -C -r xxxxx

जो संशोधन xxxx के लिए सभी वर्धित फ़ाइलों को सही स्थिति में रखता है


यह बताने की स्टैक ओवरफ्लो परंपरा का पालन करने के लिए कि आप ऐसा नहीं करना चाहते हैं, मैं अक्सर यह पाता हूं कि इस "न्यूक्लियर ऑप्शन" ने मेरे ख्याल से सामान को नष्ट कर दिया है।

इसे करने का सही तरीका यह है कि अपनी बिल्ड प्रक्रिया में 'मेक क्लीन' का विकल्प हो, और हो सकता है कि 'वास्तव में' बना हो और 'डिस्टेकल भी' हो।

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