अपने git difftool और mergetool के रूप में Meld की स्थापना और उपयोग करना


255

हालांकि इस सवाल और जवाब की अधिकांश जानकारी स्टैकऑवरफ्लो पर उपलब्ध है , लेकिन यह बहुत सारे पृष्ठों में और अन्य उत्तरों के बीच फैला हुआ है जो या तो गलत हैं या भ्रामक हैं। मुझे जो कुछ भी जानना था, उसे एक साथ करने में मुझे थोड़ा समय लगा।

बहुत सारे अलग-अलग प्रोग्राम हैं जिनका उपयोग आपके git difftool और mergetool के रूप में किया जा सकता है, और निश्चित रूप से कोई आम सहमति नहीं है, जो कि सबसे अच्छी है (राय, आवश्यकताएं और OSes स्पष्ट रूप से भिन्न होंगे)।

मेल्ड एक लोकप्रिय स्वतंत्र, ओपन-सोर्स और क्रॉस-प्लेटफॉर्म (UNIX / Linux, OSX, विंडोज) पसंद है जैसा कि स्टैकऑवरफ्लो प्रश्न में दिखाया गया है , Git के लिए सबसे अच्छा दृश्य मर्ज उपकरण क्या है? जिसमें मेल्ड का जवाब देने वाला उत्तर किसी अन्य उपकरण के रूप में 3 गुना से अधिक वोटों का होता है।

नीचे दिए गए 2 प्रश्नों के उत्तर मेरे उत्तर में दिए जाएंगे:

  • मैं अपने git difftool के रूप में Meld को कैसे सेट और उपयोग कर सकता हूं?
  • मैं अपने git मेरिजेट के रूप में Meld को कैसे सेट अप और उपयोग कर सकता हूं?

नोट: एक ही प्रोग्राम को अपने difftool और mergetool दोनों के रूप में उपयोग करना आवश्यक नहीं है, दोनों के लिए अलग-अलग प्रोग्राम सेट किए जा सकते हैं।


1
संबंधित पोस्ट - सामान्य रूप से गिट में एक अलग टूल को कैसे कॉन्फ़िगर करें ।
RBT

जवाबों:


423

मैं अपने git difftool के रूप में Meld को कैसे सेट और उपयोग कर सकता हूं?

git difftool आपके टर्मिनल में भिन्न आउटपुट को प्रदर्शित करने के बजाय GUI diff प्रोग्राम (यानी Meld) का उपयोग करके भिन्न को प्रदर्शित करता है।

यद्यपि आप GUI प्रोग्राम को कमांड लाइन पर सेट कर सकते हैं -t <tool> / --tool=<tool>इसका उपयोग करके इसे अपनी .gitconfigफ़ाइल में कॉन्फ़िगर करने के लिए अधिक समझ में आता है । [नोट: नीचे उद्धरण और विंडोज पथ से बचने के बारे में अनुभाग देखें।]

# Add the following to your .gitconfig file.
[diff]
    tool = meld
[difftool]
    prompt = false
[difftool "meld"]
    cmd = meld "$LOCAL" "$REMOTE"

[नोट: ये सेटिंग्स व्यवहार में परिवर्तन नहीं git diffकरेंगी जो हमेशा की तरह काम करती रहेंगी।]

आप git difftoolठीक उसी तरह से उपयोग करते हैं जैसे आप उपयोग करते हैं git diff। जैसे

git difftool <COMMIT_HASH> file_name
git difftool <BRANCH_NAME> file_name
git difftool <COMMIT_HASH_1> <COMMIT_HASH_2> file_name

यदि ठीक से कॉन्फ़िगर किया गया है तो एक Meld विंडो खुलेगी जो GUI इंटरफ़ेस का उपयोग करके डिस्प्ले प्रदर्शित करेगी।

मेल्ड जीयूआई विंडो पैन के आदेश को $LOCALऔर के क्रम से नियंत्रित किया जा सकता $REMOTEहै cmd, यह कहना है कि कौन सी फ़ाइल बाएं फलक में और कौन सी दाएँ फलक में दिखाई गई है। यदि आप उन्हें दूसरे तरीके से चाहते हैं तो बस उन्हें इस तरह से चारों ओर स्वैप करें:

    cmd = meld "$REMOTE" "$LOCAL"

अंत में prompt = falseलाइन आपको तुरंत यह बताने से रोकती है कि आप मेल्ड लॉन्च करना चाहते हैं या नहीं, डिफ़ॉल्ट रूप से गिट एक संकेत जारी करेगा।


मैं अपने git मेरिजेट के रूप में Meld को कैसे सेट अप और उपयोग कर सकता हूं?

मर्ज के दौरान होने वाले मर्ज के टकराव को हल करने के लिए git mergetool आपको GUI मर्ज प्रोग्राम (यानी Meld) का उपयोग करने की अनुमति देता है।

Difftool की तरह आप GUI प्रोग्राम को कमांड लाइन पर सेट कर सकते हैं -t <tool> / --tool=<tool>, लेकिन पहले की तरह, यह आपकी .gitconfigफ़ाइल में इसे कॉन्फ़िगर करने के लिए अधिक समझ में आता है । [नोट: नीचे उद्धरण और विंडोज पथ से बचने के बारे में अनुभाग देखें।]

# Add the following to your .gitconfig file.
[merge]
    tool = meld
[mergetool "meld"]
    # Choose one of these 2 lines (not both!) explained below.
    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"

आप git mergetoolवास्तविक मर्ज करने के लिए उपयोग नहीं करते हैं। उपयोग git mergetoolकरने से पहले आप सामान्य तरीके से गिट के साथ मर्ज करते हैं। जैसे

git checkout master
git merge branch_name

यदि कोई मर्ज संघर्ष git कुछ इस तरह प्रदर्शित करेगा:

$ git merge branch_name
Auto-merging file_name
CONFLICT (content): Merge conflict in file_name
Automatic merge failed; fix conflicts and then commit the result.

इस बिंदु पर file_nameमर्ज संघर्ष जानकारी के साथ आंशिक रूप से मर्ज की गई फ़ाइल होगी (वह फ़ाइल जिसमें सभी >>>>>>>और <<<<<<<प्रविष्टियाँ हैं)।

मर्जटूल का उपयोग अब मर्ज संघर्षों को हल करने के लिए किया जा सकता है। आप इसे बहुत आसानी से शुरू करते हैं:

git mergetool

यदि ठीक से कॉन्फ़िगर किया गया एक Meld विंडो 3 फ़ाइलों को प्रदर्शित करेगा। प्रत्येक फ़ाइल अपने GUI इंटरफ़ेस के एक अलग फलक में समाहित होगी।

.gitconfigऊपर के उदाहरण प्रविष्टि में, 2 पंक्तियों को [mergetool "meld"] cmdरेखा के रूप में सुझाया गया है । वास्तव में उन्नत उपयोगकर्ताओं के लिए cmdलाइन को कॉन्फ़िगर करने के सभी प्रकार के तरीके हैं , लेकिन यह इस उत्तर के दायरे से परे है।

इस उत्तर में 2 विकल्प हैं cmd लाइनें हैं, जो उनके बीच, अधिकांश उपयोगकर्ताओं को पूरा करेगी, और उन्नत उपयोगकर्ताओं के लिए एक अच्छा शुरुआती बिंदु होगा जो टूल को जटिलता के अगले स्तर पर ले जाना चाहते हैं।

सबसे पहले यहाँ मापदंडों का मतलब क्या है:

  • $LOCAL वर्तमान शाखा में फ़ाइल है (उदाहरण के लिए मास्टर)।
  • $REMOTE शाखा में फ़ाइल को मर्ज किया जा रहा है (जैसे शाखा_नाम)।
  • $MERGED इसमें मर्ज संघर्ष जानकारी के साथ आंशिक रूप से मर्ज की गई फ़ाइल है।
  • $BASEकी साझा प्रतिबद्ध पूर्वज है, $LOCALऔर $REMOTEयह उस फ़ाइल को कहना है जैसा कि उस समय था जब $REMOTEमूल रूप से युक्त शाखा बनाई गई थी।

मेरा सुझाव है कि आप या तो उपयोग करें:

[mergetool "meld"]
    cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"

या:

[mergetool "meld"]
    cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
    # See 'Note On Output File' which explains --output "$MERGED".

चुनाव है कि क्या उपयोग करना है $MERGEDया $BASEबीच में $LOCALऔर $REMOTE

किसी भी तरह से मेल्ड 3 पैन के साथ $LOCALऔर $REMOTEबाएं और दाएं पैन में और या तो $MERGEDया $BASEमध्य फलक में प्रदर्शित करेगा।

BOTH मामलों में मध्य फलक वह फ़ाइल है जिसे आपको मर्ज विरोधों को हल करने के लिए संपादित करना चाहिए। अंतर सिर्फ इतना है जिसमें आप जिस स्थान को पसंद करते हैं उसे संपादित करना शुरू करें; $MERGEDउस फ़ाइल के लिए जिसमें मर्ज संघर्ष जानकारी के साथ आंशिक रूप से मर्ज की गई फ़ाइल है या $BASEके साझा किए गए पूर्वजों के लिए $LOCALऔर $REMOTE। [चूँकि दोनों cmdपंक्तियाँ उपयोगी हो सकती हैं इसलिए मैं उन दोनों को अपनी .gitconfigफ़ाइल में रखता हूँ । ज्यादातर समय मैं $MERGEDलाइन का उपयोग करता हूं और $BASEलाइन पर टिप्पणी की जाती है, लेकिन अगर मैं $BASEइसके बजाय लाइन का उपयोग करना चाहता हूं तो टिप्पणी को बाहर स्वैप किया जा सकता है ।]

आउटपुट फ़ाइल पर ध्यान दें: चिंता मत करो कि --output "$MERGED"में प्रयोग किया जाता है cmd, चाहे $MERGEDया $BASEमें पहले इस्तेमाल किया गया था cmdलाइन। --outputविकल्प बस मिलकर एक हो जाना क्या फ़ाइल नाम Git में सहेजने की संघर्ष समाधान फ़ाइल चाहता है बताता है। मिलकर एक हो जाना है कि क्या आप का उपयोग की परवाह किए बिना कि फाइल में अपने संघर्ष संपादन की बचत होगी $MERGEDया $BASEअपने शुरू कर संपादित बिंदु के रूप में।

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

git ने .origमूल फ़ाइल नाम के साथ जोड़कर इसमें मर्ज संघर्ष जानकारी के साथ आंशिक रूप से मर्ज की गई फ़ाइल का बैकअप बनाया होगा । उदा file_name.orig। यह जांचने के बाद कि आप मर्ज से खुश हैं और आप जो भी परीक्षण करना चाहते हैं, उसे चलाकर .origफाइल को डिलीट किया जा सकता है।

इस बिंदु पर अब आप बदलावों के लिए प्रतिबद्ध कर सकते हैं।

यदि, जब आप मेलड में मर्ज संघर्षों को संपादित कर रहे हैं, तो आप मेल्ड के उपयोग को छोड़ना चाहते हैं, फिर मध्य फलक में मर्ज रिज़ॉल्यूशन फ़ाइल को सहेजे बिना मेल्ड को छोड़ दें। git संदेश के साथ प्रतिक्रिया करेगा file_name seems unchangedऔर फिर पूछेगा Was the merge successful? [y/n], यदि आप उत्तर देते हैं nतो मर्ज संघर्ष रिज़ॉल्यूशन समाप्त कर दिया जाएगा और फ़ाइल अपरिवर्तित रहेगी। ध्यान दें कि यदि आपने किसी भी बिंदु पर फ़ाइल को मेल्ड में सहेजा है, तो आपको चेतावनी प्राप्त नहीं होगी और गिट से संकेत मिलेगा। [बेशक आप फ़ाइल को हटा सकते हैं और बैकअप .origफ़ाइल के साथ बदल सकते हैं जो आपके लिए बनाई गई है।]

यदि आपके पास मर्ज संघर्षों के साथ 1 से अधिक फ़ाइल है, तो git प्रत्येक के लिए एक के बाद एक नई मेल्ड विंडो खोलेगा, जब तक कि वे सभी काम न कर लें। वे सभी एक ही समय में नहीं खोले जाएंगे, लेकिन जब आप एक में संघर्षों को संपादित करना समाप्त कर देते हैं, और मेल्ड को बंद कर देते हैं, तो git अगले एक को खोलेगा, और तब तक जब तक कि सभी मर्ज टकरावों का समाधान नहीं हो जाता।

लाइव प्रोजेक्ट git mergetoolपर उपयोग करने से पहले उपयोग करने के लिए परीक्षण करने के लिए डमी प्रोजेक्ट बनाना समझदारी होगी । अपने परीक्षण में एक स्थान रखने वाले फ़ाइलनाम का उपयोग करना सुनिश्चित करें, यदि आपके ओएस को आपको पंक्ति में उद्धरण से बचने की आवश्यकता है , तो नीचे देखें।cmd


भागने के पात्र

कुछ ऑपरेटिंग सिस्टम को cmdबच निकलने में उद्धरण की आवश्यकता हो सकती है । कम अनुभवी उपयोगकर्ताओं को यह याद रखना चाहिए कि कॉन्फ़िगरेशन कमांड लाइनों को उन फ़ाइलनामों के साथ परीक्षण किया जाना चाहिए जिसमें रिक्त स्थान शामिल हैं, और यदि cmdलाइनें उन फ़ाइल नाम के साथ काम नहीं करती हैं जिनमें रिक्त स्थान शामिल हैं, तो उद्धरणों से बचने का प्रयास करें। जैसे

cmd = meld \"$LOCAL\" \"$REMOTE\"

कुछ मामलों में अधिक जटिल उद्धरण से बचने की आवश्यकता हो सकती है। नीचे दिए गए विंडोज पथ लिंक के 1 में प्रत्येक उद्धरण में ट्रिपल-बचने का उदाहरण है। यह एक बोर है लेकिन कभी-कभी आवश्यक है। जैसे

cmd = meld \\\"$LOCAL\\\" \\\"$REMOTE\\\"

विंडोज पथ

विंडोज उपयोगकर्ताओं को शायद मेल्ड cmdलाइनों में अतिरिक्त कॉन्फ़िगरेशन की आवश्यकता होगी । उन्हें पूर्ण पथ का उपयोग करने की आवश्यकता हो सकती है meldc, जिसे कमांड लाइन से विंडोज पर कॉल करने के लिए डिज़ाइन किया गया है, या उन्हें रैपर का उपयोग करने की आवश्यकता हो सकती है। उन्हें नीचे दिए गए StackOverflow पृष्ठ को पढ़ना चाहिए जो सही मेलड सेट करने के बारे में हैंcmd विंडोज के लिए लाइन । चूंकि मैं एक लिनक्स उपयोगकर्ता हूं, मैं विभिन्न विंडोज cmdलाइनों का परीक्षण करने में असमर्थ हूं और इस विषय पर कोई अन्य जानकारी नहीं है कि मेरे उदाहरणों का उपयोग करने के लिए मेलड के पूर्ण पथ के साथ या meldcआपके लिए मेल्ड प्रोग्राम फ़ोल्डर को जोड़ने की सिफारिश की जाए path

मेल्ड के साथ अनुगामी व्हॉट्सएप को नजरअंदाज करना

मेल्ड में कई वरीयताएँ हैं जिन्हें GUI में कॉन्फ़िगर किया जा सकता है।

वरीयताओं के Text Filtersटैब में, चीजों को अनदेखा करने के लिए कई उपयोगी फिल्टर होते हैं, जो एक प्रदर्शन करते समय टिप्पणियों की तरह होते हैं। हालाँकि अनदेखी करने के लिए फ़िल्टर हैं All whitespaceऔर Leading whitespace, कोई भी अनदेखा Trailing whitespaceफ़िल्टर नहीं है (यह मेल्ड मेलिंग सूची में एक अतिरिक्त के रूप में सुझाया गया है लेकिन मेरे संस्करण में उपलब्ध नहीं है)।

अनुगामी व्हाट्सएप को नजरअंदाज करना अक्सर बहुत उपयोगी होता है, खासकर जब सहयोग करते हैं, और मेल्ड वरीयताओं के Text Filtersटैब में एक सरल नियमित अभिव्यक्ति के साथ मैन्युअल रूप से आसानी से जोड़ा जा सकता है ।

# Use either of these regexes depending on how comprehensive you want it to be.
[ \t]*$
[ \t\r\f\v]*$

मुझे उम्मीद है कि इससे सभी को मदद मिलेगी।


2
धन्यवाद, यह इतना उपयोग करने में आसान [mergetool "meld"] cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"है ~/.gitconfig, तो बस बीच पैन में लाल रंग में हाइलाइट किए गए संघर्षों को हल करें और बचाएं! यह डिफ़ॉल्ट सेटिंग होना चाहिए।
क्रिस्बडेव

1
$LOCAL $MERGED $REMOTEसेटिंग का उपयोग मैं ज्यादातर समय करता हूं, जब इसे हल करने के लिए बस कुछ संघर्ष होते हैं और यह मेरा डिफ़ॉल्ट भी है। $LOCAL $BASE $REMOTEवास्तव में अपने आप में आता है जब बहुत कुछ करना होता है और आप वास्तव में जानते हैं कि कौन से कोड किस फ़ाइल से आ रहे हैं; साझा प्रतिबद्ध पूर्वज एक महान अव्यवस्था मुक्त प्रारंभिक बिंदु हो सकता है, कभी-कभी वास्तव में उजागर होने वाला संघर्ष रास्ते में हो जाता है और एक क्लीनर आधार एक आशीर्वाद है।
मैस्ट

4
नोट: यदि आप OSX पर हैं और होमब्रे के माध्यम से =cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output="$MERGED"
मेल्ड

2
मैक उपयोगकर्ताओं के लिए जिन्होंने .dmg को स्थापित किया है और पाया है कि 'मेल्ड' उनके रास्ते में नहीं है, यहाँ निर्देशों के वैकल्पिक सेट का पालन करना सुनिश्चित करें: yousseb.github.io/meld
KC

3
Git कॉन्फ़िगरेशन - git मेरिजेट पर स्पष्टीकरण की तुलना में यह बहुत बेहतर है । विशेष रूप से $ MERGED और $ BASE के बीच के अंतर को समझाने के लिए आपका बहुत-बहुत धन्यवाद। मुझे पागल होने से बचाया!
क्रिस जी

81

जबकि दूसरा उत्तर सही है, यहाँ सबसे तेज़ तरीका है कि आप आगे बढ़ें और मेल्ड को आपके विज़ुअल डिफ टूल के रूप में कॉन्फ़िगर करें। बस इसे कॉपी / पेस्ट करें:

git config --global diff.tool meld
git config --global difftool.prompt false

अब git difftoolएक डायरेक्टरी में रन करें और प्रत्येक अलग फाइल के लिए मेल्ड लॉन्च किया जाएगा।

साइड नोट: Meld आश्चर्यजनक रूप से CSV फ़ाइलों की तुलना करने में धीमा है , और मेरे द्वारा पाया गया कोई भी Linux diff टूल इस तुलना में विंडोज टूल की तुलना में तेज़ नहीं है ! (अंतिम बार 2010 में अपडेट किया गया)।


13
आप शायद git config --global difftool.meld.cmd 'meld "$LOCAL" "$REMOTE"'वहां भी एक लाइन चाहते हैं। यह "डिफ़ॉल्ट" है, लेकिन जैसे ही आप एक कॉन्फ़िगर करते हैं mergetool, difftoolतो डिफ़ॉल्ट कॉन्फ़िगरेशन के रूप में मर्जेट कॉन्फ़िगरेशन का उपयोग करना शुरू कर देगा , यदि विस्तृत कॉन्फ़िगरेशन पाया जाता है। चूंकि मर्ज को 3-वे मर्ज के लिए तीन फ़ाइलों को पास करने के लिए आम तौर पर कॉन्फ़िगर किया गया है, इसका मतलब है कि आपकी meld अंतर विंडो में अचानक तीन पैन होंगे, जिसका कोई मतलब नहीं है।
20

$ Git config -l
agfe2

56

विंडोज के लिए । Git Bash में ये कमांड चलाएँ:

git config --global diff.tool meld
git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global difftool.prompt false

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"
git config --global mergetool.prompt false

(यदि आप अलग हैं, तो Meld.exe के लिए फ़ाइल पथ अपडेट करें।)

लिनक्स के लिए । Git Bash में ये कमांड चलाएँ:

git config --global diff.tool meld
git config --global difftool.meld.path "/usr/bin/meld"
git config --global difftool.prompt false

git config --global merge.tool meld
git config --global mergetool.meld.path "/usr/bin/meld"
git config --global mergetool.prompt false

आप इस आदेश का उपयोग करके मेल्ड के मार्ग को सत्यापित कर सकते हैं:

which meld

1
जब मुझे git difftool चलाते हैं तो मुझे एक त्रुटि मिली "अंतर उपकरण मेल्ड 'D: \ software \ melddiff \ Meld.exe' के रूप में उपलब्ध नहीं है
एलन वॉर्क

@AllenVork: क्या आपने पुष्टि की है कि Meld.exe आपके द्वारा निर्दिष्ट फ़ोल्डर में है? क्या आप इसे सफलतापूर्वक Git के बाहर चला सकते हैं? जब आप दौड़ते हैं तो Git क्या लौटाता है git config --global --get-regex diff*?
MarredCheese

मैंने इसे हल किया। मैं इसे "D: /software/melddiff/Meld.exe" में बदलता हूं और यह काम करता है। .itconfig का प्रारूप ubuntu नहीं खिड़कियां है।
एलन वोर

क्या यह नहीं होना चाहिए git config --global difftool.meld.path "C:\Program Files (x86)\Meld\Meld.exe":?
जोनाथन रोजेन

@AllenVork, क्या आप cygwin के लिए git का उपयोग कर रहे हैं?
एड्रियन

25

मैं एक अलग कमांड के रूप में मेल्ड सेटअप करना पसंद करता हूं, जैसे:

git config --global alias.meld '!git difftool -t meld --dir-diff'

यह इसे git-meld.pl स्क्रिप्ट के समान बनाता है: https://github.com/wmanley/git-meld

तुम तो बस चला सकते हो

git meld

मैं बस Cygwin के साथ काम कर रहा था, और अब यह टूट गया है। यह तय किया। धन्यवाद! (हालाँकि मैंने इस --dir-diffहिस्से को व्यक्तिगत पसंद के रूप में हटा दिया है ।)
पफुनग्य

3

विंडोज 10 के लिए मुझे इसे अपने .itconfig में डालना था:

[merge]
  tool = meld
[mergetool "meld"]
  cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
  prompt = false

आपको जो कुछ भी जानने की ज़रूरत है वह इस सुपर जवाब में लिखा गया है में मैट्स द्वारा ऊपर है।

पुनश्च: किसी कारण से, यह केवल Meld 3.18.x के साथ काम करता है, Meld 3.20.x मुझे एक त्रुटि देता है।


1

यह मुख्य रूप से विंडोज़ का उपयोग करने वाले डेवलपर्स को लक्षित करने वाला एक उत्तर है, क्योंकि भिन्न टूल के पथ सिंटैक्स अन्य प्लेटफार्मों से भिन्न होते हैं।

मैं Gd mergetool के रूप में Kdiff3 का उपयोग करता हूं, लेकिन Git difftool को Meld के रूप में सेट करने के लिए, मैंने पहली बार Meldmerge.org से Meld का नवीनतम संस्करण स्थापित किया, फिर निम्नलिखित का उपयोग करके अपने वैश्विक .gitconfig में जोड़ा:

git config --global -e

ध्यान दें, यदि आप मूल विरूप के रूप में डिफ़ॉल्ट विम के बजाय उदात्त पाठ 3 चाहते हैं, तो आप इसे .gitconfig फ़ाइल में जोड़ सकते हैं:

[core]
editor = 'c:/Program Files/Sublime Text 3/sublime_text.exe'

फिर आप difftool के रूप में inn Meld जोड़ें

[diff]
tool = meld
guitool = meld 

[difftool "meld"]
cmd = \"C:/Program Files (x86)/Meld/Meld.exe\" \"$LOCAL\" \"$REMOTE\" --label \"DIFF 
(ORIGINAL MY)\"
prompt = false
path = C:\\Program Files (x86)\\Meld\\Meld.exe

विंडोज पर ऊपर दिए गए cmd में प्रमुख स्लैश पर ध्यान दें, यह आवश्यक है।

वर्तमान git को एक --dir-diff के साथ दिखाने के लिए एक उपनाम स्थापित करना भी संभव है विकल्प के । यह मेल्ड के अंदर बदली हुई फाइलों को सूचीबद्ध करेगा, जो तब होता है जब आपने कई फाइलों को बदल दिया हो (वास्तव में एक बहुत ही सामान्य परिदृश्य)।

यह उपनाम .itconfig फ़ाइल के अंदर दिखता है, [alias] अनुभाग के नीचे :

showchanges = difftool --dir-diff

मेरे द्वारा कोड में किए गए परिवर्तनों को दिखाने के लिए, बस निम्नलिखित कमांड दर्ज करें:

git showchanges

निम्न छवि दिखाती है कि यह --dir-diff विकल्प परिवर्तित फ़ाइलों की एक सूची दिखा सकता है (उदाहरण): $ LOCAL और $ REMOTE के बीच बदलाव के साथ फाइलों की सूची दिखाने वाला मेल

फिर प्रत्येक फ़ाइल पर क्लिक करना और मेलड के अंदर परिवर्तन दिखाना संभव है।


0

यह $ MERGED में अलग-अलग वर्गों से आपके सिर में एक अंतर की गणना करने और इसे लागू करने के लिए जटिल हो सकता है। मेरे सेटअप में, meld आपको ये दिखाते हुए, नेत्रहीन रूप से भिन्न का उपयोग करके मदद करता है:

[merge]
    tool = mymeld
    conflictstyle = diff3

[mergetool "mymeld"]
    cmd = meld --diff $BASE $REMOTE --diff $REMOTE $LOCAL --diff $LOCAL $MERGED

यह अजीब लगता है, लेकिन तीन टैब का उपयोग करते हुए एक बहुत ही सुविधाजनक काम-प्रवाह प्रदान करता है:

  1. टैब 1 में आप मर्ज संघर्ष को हल करने के लिए टैब 2 में जो परिवर्तन करना चाहते हैं उसे (बाएं से दाएं) देखें।

  2. टैब 2 के दाईं ओर आप "परिवर्तन जिसे आपको करना चाहिए" लागू करें और संपूर्ण फ़ाइल सामग्री को क्लिपबोर्ड पर कॉपी करें (ctrl-a और ctrl-c का उपयोग करके)।

  3. टैब 3 में क्लिपबोर्ड सामग्री के साथ दाईं ओर बदलें। यदि सब कुछ सही है, तो आप अब देखेंगे - बाएं से दाएं - जैसा कि टैब 1 में दिखाया गया है (लेकिन विभिन्न संदर्भों के साथ)। इस टैब में किए गए परिवर्तनों को सहेजें।

टिप्पणियाँ:

  • टैब 1 में कुछ भी संपादित न करें
  • टैब 2 में कुछ भी न सहेजें क्योंकि यह टैब 3 में कष्टप्रद पॉपअप का उत्पादन करेगा

क्या यह एकल टैब में 3-तरफ़ा मर्ज (स्थानीय / आधार / रिमोट) से बेहतर है?
एंड्रे वेरलांग

@ AndréWerlang एक ही टैब में 3-तरफा मर्ज का लाभ यह है कि आपको केवल परस्पर विरोधी परिवर्तनों (अन्य परिवर्तनों को स्वचालित रूप से विलय कर दिया जाता है) से निपटने की आवश्यकता है। लेकिन मैं उन मामलों में "मेरा" दृष्टिकोण पसंद करता हूं जहां 3-तरह के मर्ज में समझना मुश्किल है कि क्या बदल गया, और कैसे एक तरह से विलय हो जो सभी परिवर्तनों को संरक्षित करता है। यदि किसी बिंदु पर 3-तरफा विलय अब मुझे भ्रमित नहीं करता है तो मैं इसे वापस स्विच कर सकता हूं।
11

जैसा कि उपयोगकर्ता मैटस्ट ने बताया, आप मर्ज ऑपरेशन शुरू करने के $BASEबजाय उपयोग कर सकते हैं$MERGED
एंड्रे वेर्लंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.