vimdiff और मर्ज विरोध


14

जब स्रोत नियंत्रण के तहत शाखाओं का विलय होता है, तो अक्सर अन्य डेवलपर्स के साथ मर्ज संघर्ष का मुद्दा होता है।

मुझे पता है कि हम स्रोत नियंत्रण के खिलाफ कोड परिवर्तन करने के लिए vimdiff का उपयोग कर सकते हैं , लेकिन एक तरीका यह भी है कि हम vimdiff का उपयोग मर्ज संघर्षों को हल करने में मदद करने के लिए कर सकते हैं।

व्यक्तिगत रूप से मुझे git में अधिक दिलचस्पी है, लेकिन यह समझना उपयोगी होगा कि क्या अन्य स्रोत नियंत्रण उपकरण / सिस्टम के लिए प्लगइन्स / तकनीकें हैं।


क्या आपने कभी मेल्ड को आजमाया है?
एरिक सबेलहॉस

1
@ EricSabelhaus: संघर्षों को हल करने में क्या यह विमडिफ से बेहतर है? यह साइट विम के बारे में सवाल पूछने / जवाब देने के बारे में है।
मार्टिन यॉर्क

यह मेरे उपयोग के मामले पर निर्भर करता है। अगर मैं ऐसे कोड पर काम कर रहा हूं जो दूरस्थ रूप से रहता है, तो मैं सबसे निश्चित रूप से vimdiff का उपयोग करूंगा। अगर मैं अपने देव मशीन पर स्थानीय रूप से काम कर रहा हूं, तो मैं मेल्ड का उपयोग करूंगा, क्योंकि यह जटिल 3 तरह के मर्ज करने में डेवलपर की सहायता करने के लिए एक अमीर यूआई प्रदान करता है।
एरिक सबेलहॉस

1
@EricSabelhaus: मेरे लिए यह शब्द feature rich UIभ्रामक है; vimdiff में अच्छा UI नहीं हो सकता है यह निश्चित रूप से समृद्ध है। मुझे विम का बहुत अधिक उत्पादक वातावरण मिला है जिसका उपयोग मैंने सभी जीयूआई संपादकों (लेकिन मैंने लंबे समय से किया है और यह एक सीखने की अवस्था है)। मैं और अधिक उत्सुक हूं यदि मेल्ड कुछ भी करता है जो विम ऐसा नहीं करता है जो देखने के दौरान भी इसे लायक बना देगा।
मार्टिन यॉर्क

मैं विशेष रूप से यह नहीं कह सकता कि इसमें एक अधिक मजबूत सुविधा सेट है, लेकिन यह निश्चित रूप से एक ही दायरे में है।
एरिक सबेलहॉस

जवाबों:


18

मैं आम तौर पर कमांड लाइन पर गिट का उपयोग करता हूं।

लेकिन जब कोई मर्ज संघर्ष होता है तो मैं उन्हें सुलझाने के लिए विम का उपयोग करता हूं (व्यक्तिगत रूप से मैं इसे भगोड़े प्लगइन के साथ करता हूं)। नोट: भगोड़ा विम के भीतर से बहुत सारे हेरफेर के लिए अच्छा है। मेरी पसंदीदा विशेषता मर्ज संघर्ष का 3 तरीका है।

git मेरिटगुल के माध्यम से vitdiff में git इसका समर्थन करता है। मैंने भगोड़ा स्थापित किया है, लेकिन आप इसे मैन्युअल रूप से सेट कर सकते हैं (धन्यवाद @Jay थॉम्पसन)।

स्वतः व्यवस्था:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

आउटपुट नीचे वर्णित के अनुसार थोड़ा अलग है (मैंने व्यक्तिगत रूप से इसका उपयोग नहीं किया है)। लेकिन सिद्धांत समान है लेकिन आपके पास परिणाम वाली तल पर चौथी विंडो है।

यहाँ छवि विवरण दर्ज करें

भगोड़े के साथ सेट

vim- भगोड़ा Vim के लिए git आवरण / एकीकरण प्लगइन है; यह कई काम कर सकता है, और संघर्षों को हल करना उनमें से एक है।

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. दृश्य 2 (बाएं): वह कोड जो आपकी शाखा पर था।
  2. देखें 1 (मध्य): मर्ज किया गया कोड (संघर्षों के साथ)
  3. देखें 3 (दाएं): वह कोड जो आपके कोड में मिला दिया गया था।

अब आप केंद्रीय दृश्य में दो अन्य दृश्यों से पाठ खींच सकते हैं और प्राप्त कर सकते हैं (जिसमें सभी मैनुअल सुधार शामिल हैं)। एक बार जब आप सभी संघर्षों को मैन्युअल रूप से हल कर लेते हैं, तो बस vimdiff से बाहर निकलें

यहाँ छवि विवरण दर्ज करें

आप उपयोग कर सकते हैं हालांकि :diffget <view number>और :diffput <view number>विचारों के बीच खींच और धक्का बातें करने के लिए। मुझे व्यक्तिगत रूप से वह बहुत उपयोगी नहीं लगता। सभी कोड पहले से ही मध्य दृश्य में है। इसलिए मैं केवल उस दृश्य को मैन्युअल रूप से संपादित करना चाहता हूं जब तक कि संघर्ष हल न हो जाए। हालांकि मेरे संपादक विंडो के दोनों ओर कोड के दोनों संस्करणों को देखने में सक्षम होना बेहद उपयोगी है।

यहाँ भी इसके उपयोग का एक बहुत अच्छा डेमो


1
यदि आप किसी कारण से भगोड़े का उपयोग या स्थापित नहीं करना चाहते हैं, तो आप बस सेट कर सकते हैं git config --global merge.tool vimdiffऔर फिर git mergetoolविधा को अलग मोड में शुरू करने के लिए चला सकते हैं ।
जे थॉम्पसन

क्या यह मर्ज संघर्षों की "diff3" शैली का समर्थन करता है, जहां "मर्ज किए गए सामान्य पूर्वजों" को दिखाया गया है?
alxndr

@alxndr: मैंने पहले diff3 के बारे में नहीं सुना था। लेकिन एक त्वरित गूगल के बाद। Git (और मेरे द्वारा उपयोग किए गए अन्य स्रोत नियंत्रण) में एक मर्ज संघर्ष का आउटपुट एक के समान है diff3 -E। तो ऊपर की छवियां उन फ़ाइलों से उत्पन्न होती हैं जिनमें ये मार्कर होते हैं।
मार्टिन यॉर्क

अब जब मैं बारीकी से देखता हूं, तो पहला स्क्रीनशॉट मर्ज की अलग शैली दर्शाता है; मध्य शीर्ष फलक "आधार" सामान्य पूर्वज है, जिसे बाएं और दाएं पैन से निकाला गया है।
alxndr

1
यह याद रखना महत्वपूर्ण है कि इन 4 विचारों में से प्रत्येक सिर्फ एक बफर है। इसका मतलब है कि आप एक और टैब खोल सकते हैं (या एक ही विंडो में रह सकते हैं) और केवल उसी बफर को चुनें जिसे आप किसी भी समय देखना चाहते हैं। यदि आप उन सभी का उपयोग नहीं कर रहे हैं, तो एक बार में सभी 4 खिड़कियां खुली रखने का कोई कारण नहीं है।
कोडी पोल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.