विकिपीडिया का कहना है कि 3-वे मर्ज 2-वे मर्ज की तुलना में कम त्रुटि वाला है, और अक्सर समय के लिए उपयोगकर्ता के हस्तक्षेप की आवश्यकता नहीं होती है। यह एक केस क्यों है?
एक उदाहरण जहां 3-तरफ़ा मर्ज सफल होता है और 2-तरफ़ा मर्ज विफल होता है।
विकिपीडिया का कहना है कि 3-वे मर्ज 2-वे मर्ज की तुलना में कम त्रुटि वाला है, और अक्सर समय के लिए उपयोगकर्ता के हस्तक्षेप की आवश्यकता नहीं होती है। यह एक केस क्यों है?
एक उदाहरण जहां 3-तरफ़ा मर्ज सफल होता है और 2-तरफ़ा मर्ज विफल होता है।
जवाबों:
आप और आपके मित्र दोनों ने एक फ़ाइल की जाँच की, और उसमें कुछ बदलाव किए। आपने शुरुआत में एक लाइन निकाली, और आपके दोस्त ने आखिर में एक लाइन जोड़ी। फिर उसने अपनी फाइल बनाई, और आपको उसकी प्रति अपनी कॉपी में मर्ज करने की जरूरत है।
यदि आप दो-तरफा मर्ज कर रहे थे (दूसरे शब्दों में, एक भिन्न), उपकरण दो फाइलों की तुलना कर सकता है, और देख सकता है कि पहली और आखिरी लाइनें अलग-अलग हैं। लेकिन यह कैसे पता चलेगा कि मतभेदों के साथ क्या करना है? मर्ज किए गए संस्करण में पहली पंक्ति शामिल होनी चाहिए? क्या इसमें अंतिम पंक्ति शामिल होनी चाहिए?
तीन-तरफ़ा मर्ज के साथ, यह दो फ़ाइलों की तुलना कर सकता है, लेकिन यह उनमें से प्रत्येक की मूल प्रतिलिपि के खिलाफ तुलना भी कर सकता है (इससे पहले कि आप इसे बदल दें)। तो यह देख सकते हैं कि आपने पहली पंक्ति को हटा दिया है, और आपके मित्र ने अंतिम पंक्ति जोड़ दी है। और यह उस जानकारी का उपयोग मर्ज किए गए संस्करण का उत्पादन करने के लिए कर सकता है।
एक प्रस्तुति प्रस्तुति से यह स्लाइड दिलचस्प है:
तीन-तरफ़ा मर्ज टूल का आवश्यक तर्क सरल है:
- आधार, स्रोत और लक्ष्य फ़ाइलों की तुलना करें
- स्रोत और लक्ष्य फ़ाइल फ़ाइल में "विखंडू" को पहचानें:
- आधार से मेल नहीं खाता है
- आधार से मेल खाने वाले विखंडू
- फिर, एक मर्ज किए गए परिणाम को एक साथ रखें:
- चंक्स जो सभी 3 फाइलों में एक दूसरे से मेल खाते हैं
- चंक्स जो स्रोत या लक्ष्य में आधार से मेल नहीं खाते, लेकिन दोनों में नहीं
- चंक्स जो आधार से मेल नहीं खाते हैं, लेकिन एक दूसरे से मेल खाते हैं (यानी, उन्हें स्रोत और लक्ष्य दोनों में एक ही तरह से बदल दिया गया है)
- उस संघर्ष के लिए प्लेसहोल्डर, उपयोगकर्ता द्वारा हल किया जाना है।
ध्यान दें कि इस चित्रण में "विखंडू" विशुद्ध रूप से प्रतीकात्मक हैं। प्रत्येक एक फ़ाइल में लाइनों का प्रतिनिधित्व कर सकता है, या एक पदानुक्रम में नोड्स, या एक निर्देशिका में फ़ाइलें भी। यह सब इस बात पर निर्भर करता है कि कोई विशेष मर्ज उपकरण किसके लिए सक्षम है।
आप पूछ सकते हैं कि 2-तरफ़ा मर्ज पर 3-तरफ़ा मर्ज क्या लाभ प्रदान करता है। वास्तव में, दो-तरफा मर्ज जैसी कोई चीज नहीं है, केवल उपकरण हैं जो दो फाइलों को अलग करते हैं और आपको एक फ़ाइल या दूसरे से चुन चुनकर "मर्ज" करने की अनुमति देते हैं।
केवल 3-तरफा मर्ज आपको यह जानने की क्षमता देता है कि क्या एक ठग मूल से एक बदलाव है या नहीं और संघर्ष को बदलता है या नहीं।
मैंने इसके बारे में एक बहुत विस्तृत पोस्ट लिखी । मूल रूप से आप डिलीट / ट्रैक दो तरह से नहीं जोड़ सकते हैं, बहुत, बहुत अनुत्पादक।
तीन तरह से विलय होता है जहां एक आधार फ़ाइल में दो बदलावों को विलय कर दिया जाता है क्योंकि वे लागू होते हैं, एक को लागू करने का विरोध करते हैं, फिर दूसरे के साथ परिणाम का विलय करते हैं।
उदाहरण के लिए, दो परिवर्तन होने पर जहां एक रेखा को एक ही स्थान पर जोड़ा जाता है, उसे दो जोड़ के रूप में देखा जा सकता है, एक रेखा का परिवर्तन नहीं।
उदाहरण के लिए
फ़ाइल को दो लोगों द्वारा संशोधित किया गया है, एक जोड़ जोड़, एक माउस जोड़ रहा है।
#File a
dog
cat
#diff b, a
dog
+++ mouse
cat
#diff c, a
dog
+++ moose
cat
अब, यदि हम परिवर्तनों को मर्ज करते हैं, जैसा कि हम उन्हें लागू करते हैं, हम प्राप्त करेंगे (3-तरफ़ा मर्ज)
#diff b and c, a
dog
+++ mouse
+++ moose
cat
लेकिन अगर हम बी लागू करते हैं, तो बी से सी में बदलाव को देखें तो ऐसा लगेगा कि हम सिर्फ 'यू' को 'ओ' में बदल रहे हैं (2-वे मर्ज)
#diff b, c
dog
--- mouse
+++ moose
cat