मैं अपने 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]*$
मुझे उम्मीद है कि इससे सभी को मदद मिलेगी।