2010-11-03 13 views
12

क्या यह देखने का एक आसान तरीका है कि मर्ज/रीबेस वास्तव में मर्ज/रीबेज किए बिना फ़ाइल विवाद उत्पन्न करेगा या नहीं?मैं Mercurial में संभावित विलय/रिबेस संघर्षों की जांच कैसे करूं?

  • rebase अगर छुआ फ़ाइल सेट (मेरा बनाम उनकी) विभिन्न
  • विलय यदि हम एक ही फाइलों के साथ खिलवाड़ किया गया है कर रहे हैं:

    मैं तय करने के लिए कि क्या सक्षम होना चाहते हैं।

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

(हमेशा से सबकुछ जांचना संभव नहीं है, क्योंकि हमारे पास पूरी तरह से व्यापक परीक्षण-सूट नहीं है।)।

और .. मैं विंडोज चला रहा हूं। :)

उत्तर

11

तो, मार्टिन के उत्तर से कुछ सहायता के साथ, मैं पुनर्वितरण विस्तार के साथ आया हूं, जो मैं चाहता हूं।

अनिवार्य रूप से, यह आंतरिक विलय उपकरण का उपयोग करके पुन: प्रयास करने का प्रयास करता है, अगर यह विफल रहता है (जो किसी भी संघर्ष के लिए करता है), यह उपयोगकर्ता के पसंदीदा टूल के साथ विलय करता है और विलय करता है।

विवरण के लिए https://bitbucket.org/marcusl/ml-hgext/src/tip/rebaseif.py देखें।

अद्यतन

हाल के महीनों में, मैं वापस सिर्फ एक मर्ज करने के लिए चले गए हैं, क्योंकि यह स्वाभाविक रूप से सुरक्षित है। एक गैर-विवाद विद्रोह अभी भी चीजों को मक्का कर सकता है क्योंकि निर्भर फाइलें परिवर्तन को प्रभावित कर सकती हैं। (यानी एक पुनर्जन्म जानकारी खो देता है कि कोड विलय से पहले कैसे देखा गया था)।

रीबेससीफ लेखक के रूप में, मैं इसके बजाय सादे पुराने विलय का उपयोग करने की अनुशंसा करता हूं। :)

+0

बहुत बढ़िया विस्तार। –

+2

... कि लेखक भरोसा नहीं करता है। :-) ऐसा कहने के लिए मैके को +1 करें। -1 उन लोगों के लिए जो अपने लेखक की तुलना में कुछ अधिक भरोसा करते हैं। –

3

आप देख सकते हैं अगर दो changesets, Rev1 और Rev2, की तरह कुछ कर रही एक ही फ़ाइलों के किसी भी प्रभावित करते हैं:

(hg status --change REV1 --no-status ; hg status --change REV2 --no-status) | sort | uniq --repeated 

हैं कि किसी भी उत्पादन तो एक ही फाइल दोनों संशोधन में छुआ जाता है।

आसानी से की तरह एक खोल स्क्रिप्ट किया जा सकता है कि:

#!/bin/sh 
(hg status --change $1 --no-status ; hg status --change $2 --no-status) | sort | uniq --repeated 

जो इनमें से किसी भी रूप में चलाया जा सकता है:

./find_overlaps c8f7e56536ab d9e2268e20b9 
./find_overlaps 1 33 

तुम सच में फैंसी पाने के लिए आप के लिए स्क्रिप्ट tweak सकता है चाहता है तो स्वचालित रूप से किसी भी लाइन को मिला या नहीं, इस पर निर्भर करता है कि विलय या रीबेस चलाएं।

यदि आप खिड़कियों पर हैं तो मेरे भगवान आपकी मदद करते हैं। :)

+0

मेरे पास विंडोज़ पर पाइथन है, इसलिए मैं आसानी से एक स्क्रिप्ट लिख सकता हूं जो बस करता है। यद्यपि एक प्लगइन के रूप में अच्छा होगा। :) – Macke

+0

यह वही नहीं लगता जो मैं चाहता हूं। मुझे संशोधन के पूरे सेट की जांच करने की आवश्यकता है, यह निर्धारित करने के लिए कि क्या दो अज्ञात शाखाओं में विवाद होते हैं, उनके सामान्य पूर्वजों के लिए सभी तरह से, केवल दो संशोधन की जांच नहीं करते हैं। – Macke

+0

आप विंडोज पर सिगविन स्थापित कर सकते हैं। :-) जीआईटी के रंग, आह? –

4

hg merge उपयोग करने के लिए करता है, तो परिवर्तन ओवरलैप और hg rebase अन्यथा hg rebase के बाद से आंतरिक रूप से मर्ज कर सकते हैं और आप hg merge रूप में एक ही उपकरण का उपयोग कर इसे हल करने देगा कोई कारण नहीं है। परीक्षण के लिए

के रूप में अगर किसी मर्ज या rebase संघर्ष का कारण होगा, तो आप

$ hg merge --tool internal:merge 

मर्क्युरियल 1.7 में उपयोग कर सकते हैं अपने सामान्य merge tool configuration ओवरराइड करने के लिए। (--tool internal:merge हिस्सा नया है, मर्क्युरियल के पुराने संस्करणों में --config ui.merge=internal:merge का उपयोग करें।)

मर्ज के बाद,

$ hg resolve --list 

आप परिणाम बता देंगे और आप के लिए जहां

$ hg update --clean . 
साथ शुरू किया था वापस मिल जाएगा
+5

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

+1

मार्कस: मुझे लगता है कि विलय पसंद करने के लिए यह एक दिलचस्प और वैध कारण है। मैंने पहले कभी इस तरह के अंतर के बारे में सोचा नहीं था। –

संबंधित मुद्दे