version control Mercurial में भ्रष्टाचार का उपयोग करने के नतीजे




version-control branch (2)

Mercurial में रिलीज शाखाओं को बनाए रखने के दौरान हाल ही में कई प्रश्नों को छोड़ने के बारे में कई सवाल हुए हैं। उदाहरण के लिए:

चूंकि इसे 2.0 में पेश किया गया था, इसलिए मैंने इस समस्या से बचने के लिए graft का उपयोग करने के बारे में सोचा है। इस तरह के एक संशोधन पेड़ को देखते हुए:

A---B---C---D---E---F---G---H---I---J

मान लीजिए कि हमें रिलीज शाखा बनाने की ज़रूरत है जो ईविल चेंज E छोड़ देता है।

hg update -r D
hg graft "F::J"

हमें देना:

A---B---C---D---E---F---G---H---I---J
             \
              --F'--G'--H'--I'--J'
  • प्रश्न 1: बस यहाँ क्या हुआ? मैं समझ सकता हूं कि transplant ने F::J से पैच उत्पन्न किए होंगे, और फिर उन्हें D पर लागू किया होगा, लेकिन graft को पैच के बजाय 3-तरफा विलय का उपयोग करने के लिए कहा जाता है। तो वह कैसे काम करता है? यह बेहतर क्यों है?

आइए कहें कि अब मैं E ठीक करता हूं, और इसे मेरी रिलीज शाखा में विलय करता हूं।

                  --E2-----------------
                 /                     \
A---B---C---D---E---F---G---H---I---J---M1
             \                            \
              --F'--G'--H'--I'--J'---------M2--

एम 1 एक सीधा विलय है; वहां कुछ खास नहीं है। एम 2 शाखाओं को विलय कर रहा है जिसमें "समान" (या कम से कम समकक्ष) परिवर्तन होते हैं।

  • प्रश्न 2: क्या यह D , J' और M1 का उपयोग कर एक सामान्य 3-तरफा विलय है?
  • प्रश्न 3: मर्ज के साथ मदद करने के लिए भ्रष्टाचार के संचालन के बारे में अतिरिक्त जानकारी संग्रहीत / उपयोग की गई है?

और अंत में...

  • प्रश्न 4: इस तरह के प्रवाह के साथ संभावित समस्याएं क्या हैं?

प्रश्न 1: संघर्ष होने पर यह मदद करता है। आप अपने सामान्य मर्ज टूल का उपयोग कर सकते हैं (मेरे लिए यह इनलाइन विवाद मार्कर है, जिसे मैं Emacs 'स्मेर्ज-मोड के साथ संपादित करता हूं)।

प्रश्न 2: यह एक सामान्य विलय है।

प्रश्न 3: संख्या

प्रश्न 4: मुझे लगता है कि यह दो लगभग समान शाखाओं के बदसूरत है।


जब आप D और भ्रष्टाचार F::J अपडेट करते हैं, तो Mercurial कई विलय चलाता है। यह इस विलय से शुरू होगा:

M = three_way_merge(local=D, other=F, base=E)

यदि हम राज्य C और D बीच डेल्टा के लिए +d लिखते हैं, तो हम इसके साथ शुरू करते हैं:

        +d     +e     +f
---- C ---- D ---- E ---- F ----

ग्राफ़ 90 डिग्री घड़ी की दिशा को चालू करें और उपरोक्त तीन-तरफा विलय इस तरह दिखता है:

    -e  
  .---- D
 /
E
 \
  '---- F
    +f

यही है, हम दिखाते हैं कि हमने E साथ शुरुआत की और D लिए इसके विपरीत लागू किया। मैं +e के रिवर्स पैच के रूप में सोचता हूं। E में शुरू होने से हम सामान्य एफटीए +f F साथ राज्य F भी गए। यहां कुछ भी अजीब बात नहीं है - हमारे पास पहले से ही भंडार में सभी राज्य ( D , E , और F ) हैं। तो इस तरह देखा, यह स्पष्ट है कि हम D और F विलय कर सकते हैं।

विलय "हीरा को पूरा करने" का मामला है। इसलिए हमें एक नया राज्य M जो D और F का मिश्रण है और जहां D से M का अंतर +f समान होता है और F से M का अंतर समान होता है। यह इस तरह दिख रहा है:

    -e     +f'
  .---- D ----.
 /             \
E               M
 \             /
  '---- F ----'
    +f     -e'

+f डेल्टा +f' और -e डेल्टा बन गया- -e' । यह सिर्फ एक सामान्य तीन-तरफा विलय है, लेकिन प्रभाव दिलचस्प है: हमने E बजाय F पर F लागू किया है!

विलय के बाद, M से F के दूसरे माता-पिता को गिरा दिया गया है:

    -e     +f'
  .---- D ----.
 /             \
E               M
 \
  '---- F
    +f

दोहराने के लिए: हमने F पर "प्रभाव" की प्रतिलिपि बनाई है, यानी, हमें एक डेल्टा ( +f' ) मिला है जो D लागू होता है, वही प्रभाव देता है जब E पर E लागू किया गया था। हम ग्राफ को थोड़ा सा प्राप्त करने के लिए सीधे कर सकते हैं:

       +f'
--- D ---- M
     \
      '---- E ---- F
        +e     +f

नतीजा यह है कि F को पूर्ण तीन-तरफा मशीनरी का उपयोग करके D पर बनाया गया है।

  • प्रश्न 1: बस यहाँ क्या हुआ? तो वह कैसे काम करता है? यह बेहतर क्यों है?

    ए 1: विलय का उपयोग पैच से बेहतर है क्योंकि विलय मशीनरी खाते में नामों की तरह चीजें लेती है।

  • प्रश्न 2: क्या यह डी, जे 'और एम 1 का उपयोग कर एक सामान्य 3-तरफा विलय है?

    ए 2: हां, ग्राफ्टिंग ग्राफ़ की टोपोलॉजी में बदलाव नहीं करती है।

  • प्रश्न 3: मर्ज के साथ मदद करने के लिए भ्रष्टाचार के संचालन के बारे में अतिरिक्त जानकारी संग्रहीत / उपयोग की गई है?

    ए 3: संख्या

  • प्रश्न 4: इस तरह के प्रवाह के साथ संभावित समस्याएं क्या हैं?

    ए 4: मर्ज परिप्रेक्ष्य से इसे ठीक काम करना चाहिए। यह कुछ इतिहास को डुप्लिकेट करेगा जो लोगों के लिए भ्रमित हो सकता है।







cherry-pick