Mercurial के साथ, मैं धक्का देने से पहले एक में बदलाव की एक श्रृंखला कैसे "संपीड़ित" कर सकते हैं?




push compression (7)

मान लीजिए कि मेरे पास एक स्थानीय और रिमोट मर्कुरियल रिपोजिटरी है। अब, मैं एक सुविधा पर काम करना शुरू कर देता हूं। मैं इस पर काम करता हूं, और जब मुझे लगता है कि यह हो गया है, तो मैं बदलाव करता हूं। इसे थोड़ा और परीक्षण करते हुए, मुझे लगता है कि मैं कोड में कुछ tweaking करके इस सुविधा को और बेहतर कर सकता हूं। मैं परिवर्तन करता हूं और प्रतिबद्ध करता हूं। 20 मिनट बाद, मुझे लगता है कि इस नई सुविधा में एक बग है, इसलिए मैं इसे ठीक करता हूं और उसे भी प्रतिबद्ध करता हूं।

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

मैं बिना किसी परेशानी के यह कैसे कर सकता हूं? मेरा मानना ​​है कि मैं इसे पैच के साथ कर सकता हूं, लेकिन ऐसा लगता है कि यह बहुत काम करता है।


इस फोल्डिंग के लिए एमक का उपयोग करने की मेरी पसंदीदा विधि यहां वर्णित TortoiseHg का उपयोग कर रही है । हालांकि, यह आसानी से कमांड लाइन से किया जा सकता है:

hg qimport -r <first>:<last> 
    -- where <first> and <last> are the first and last changesets 
    -- in the range of revisions you want to collapse

hg qpop <first>.diff
    -- remove all except for the first patch from the queue
    -- note: mq names patches <#>.diff when it imports them, so we're using that here

hg qfold <next>.diff
    -- where <next> is <first>+1, then <first>+2, until you've reached <last>

hg qfinish -a
    -- apply the folded changeset back into the repository

(Qfold चरण करने का एक बेहतर तरीका हो सकता है, लेकिन मुझे इसके बारे में पता नहीं है, क्योंकि मैं आमतौर पर उस ऑपरेशन के लिए TortoiseHg का उपयोग करता हूं।)

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


क्यों नहीं hg strip --keep आदेश?

फिर आप एक ही प्रतिबद्धता के रूप में सभी परिवर्तन कर सकते हैं।


मैंने कभी भी Mercurial का उपयोग नहीं किया है, लेकिन यह बहुत कुछ लगता है जैसे मार्टिन फाउलर अपने ब्लॉग पर बहुत पहले नहीं बोल रहा था:

http://martinfowler.com/bliki/MercurialSquashCommit.html


यदि आप TortoiseHg का उपयोग कर रहे हैं, तो उपयोग केवल दो संशोधनों का चयन कर सकते हैं (गैर-बाद वाले लोगों का चयन करने के लिए CTRL का उपयोग करें), राइट क्लिक करें और "इतिहास संपीड़ित करें " का चयन करें।

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

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


हिस्टएडिट जो भी आप चाहते हैं वह करेगा, लेकिन शायद यह अधिक है। यदि आपको केवल एक चीज की आवश्यकता है तो कुछ बदलावों को एक साथ जोड़ना संकुचित एक्सटेंशन नौकरी करेगा।



histedit एक्सटेंशन वह वही है जो आप खोज रहे हैं।

hg histedit -o

या

hg histedit --outgoing

आउटगोइंग परिवर्तनों की एक सूची लाएगा। सूची से आप कर सकते हैं

  • एक सिंगल चेंजसेट बनाने वाले 2 या अधिक परिवर्तनों को फोल्ड करें
  • उन्हें इतिहास से हटाए गए परिवर्तनों को छोड़ दें
  • हालांकि आप चाहें परिवर्तनों को पुन: व्यवस्थित करें।

histedit आपको फ़ोल्ड किए गए परिवर्तनों के नए प्रतिबद्ध संदेश के लिए संकेत देगा जो इसे दो संदेशों में डिफ़ॉल्ट करता है "\ n *** \ n" उन्हें अलग करता है।

आप एमक एक्सटेंशन का उपयोग करके समान परिणाम भी प्राप्त कर सकते हैं, लेकिन यह बहुत कठिन है।

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





changeset