2011-10-31 12 views
12

मैंने हाल ही में एमक्यू के साथ काम करना शुरू कर दिया है क्योंकि मुझे पृथक पैच पर काम करने का विचार पसंद है और रिपो को प्रभावित किए बिना रेपो को प्रभावित किए बिना काम करना पसंद नहीं है। इससे पहले, मैं Mercurial के अलमारियों के विस्तार के साथ काम करता था, लेकिन यह थोड़ा अस्थिर पाया। जो भी मैं अभी भी एमक्यू में पता लगाने की कोशिश कर रहा हूं वह है कि पैच को एक दूसरे से अलग कैसे रखें और उन्हें किसी विशेष क्रम में और विभिन्न शाखाओं में लागू न करें। यहाँ मेरी सामान्य प्रवाह है -Mercurial - अलमारियों के समान कतारों के साथ काम करना?

1. प्रारंभ एक नया पैच पर काम कर रहा:

hg qnew fix-bug-1234 -m "fix bug 1234" 
# do some work 
hg qrefresh 

2. पर काम करने के लिए एक नई सुविधा/बग प्राप्त करें:

hg qpop fix-bug-1234 
hg qnew some-feature -m "implement feature X" 
# some work on feature X (perhaps in a different branch) 
hg qrefresh 

इस बिंदु पर, मैं बगफिक्स पर काम करने के लिए वापस जाना चाहता हूं, और सुविधा कार्य को अलग करना चाहता हूं। मैंने सोचा कि यह रूप में सरल रूप में है:

hg qpop some-feature 
hg qpush fix-bug-1234 
# wrap up bug fix 
hg qfinish fix-bug-1234 
# get back to work on feature 

हालांकि, MQ हमेशा नवीनतम पैच श्रृंखला में बनाया का उपयोग करने के लिए, और qpop/qpush आदेश मैं उपयोग कर रहा हूँ की परवाह किए बिना इसे लागू लगता है। मुझे ध्यान रखना चाहिए कि जिन फाइलों पर मैं काम करता हूं वे पूरी तरह से अलग हैं (हालांकि वे कभी-कभी समान हो सकते हैं)।

क्या मुझे यहां कुछ याद आ रही है? क्या मुझे इसके लिए hg qqueue का उपयोग करना चाहिए? धन्यवाद।

उत्तर

10

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

आपके मामले में एक उदाहरण होगा:

hg qnew bugfix 
# ..hack hack.. 
hg qrefresh 
# want to switch over to working on some feature now 
hg qpop 
hg qnew feature 
# ..hack hack.. 
hg qrefresh 

इस बिंदु पर, आप एक स्थिति है जहाँ पैच feature अपने ढेर में bugfix से पहले आता है में हैं।

hg qpop -a 
hg qguard feature +featureguard 
hg qguard bugfix +bugfixguard 

आप feature पर काम करना चाहते हैं::

hg qselect featureguard 
hg qpush 
applying feature 
now at: feature 

आप bugfix पर काम करना चाहते हैं:

अब आप एक या अन्य का चयन करें, और दोनों के बीच स्विच करने के लिए गार्ड उपयोग कर सकते हैं
hg qpop -a 
hg qselect bugfixguard 
hg qpush 
applying bugfix 
now at: bugfix 

ध्यान दें कि सकारात्मक गार्डbugfixguard, MQसे अधिक छलांग की frogged के बाद से आपके द्वारा चयनित(क्योंकि यह सकारात्मक गार्ड एक चयनित से अलग था) और इसके बजाय पैच bugfix लागू किया (जो चयनित गार्ड से मेल खाता था)।

कुछ उपयोगी उपकरणों जब गार्ड के साथ काम करने hg qseries -v है, जो एक पहरा, लागू न किए गए पैच के लिए हमेशा की तरह U के बजाय एक G प्रदर्शित करेगा, और hg qselect -l जो प्रत्येक पैच के साथ जुड़े गार्ड को प्रदर्शित करेगा कर रहे हैं।

4

नहीं, आप कुछ भी याद नहीं कर रहे हैं। mq एक्सटेंशन एक बहुत मजबूत धारणा बनाता है कि पैच कतार रैखिक हैं। यदि आप मल्टी-पैच फीचर्स/फिक्स बनाने जा रहे हैं तो qqueue काम करेगा ... लेकिन यदि आपकी विशेषताएं/फिक्सेस केवल एक ही पैच हैं और आप दूसरों को लागू करने के साथ एक को लागू करने में सक्षम होना चाहते हैं, तो बस यह आसान हो सकता है .hg/patches/series पुन: व्यवस्थित करें (जो ऑर्डर स्टोर करता है कि पैच लागू किए जाएंगे)।

मैं यह कर (और हाथ से संपादन पैच) पर्याप्त है कि मैं एक खोल उर्फ ​​मिल गया है:

alias viq='vim $(hg root)/.hg/patches/series' 

वैकल्पिक रूप से, अगर आप एक साथ कई पैच लागू करने से परहेज नहीं करते, तो आप इस्तेमाल कर सकते हैं qgoto:

$ hg qser 
0 U bug-1234 
1 U feature-4321 
$ hg qgoto feature-4321 
$ hg qser 
0 A bug-1234 
1 A feature-4321 
9
  1. निष्पादित hg qpop -a ढेर से सभी पैच को दूर करने के
  2. निष्पादित hg qpush --move some-patch को लागू करने के लिए जो भी अन्य पैच ढेर