Git: केडीएफ 3 को मर्ज टूल और डिफरेंट टूल के रूप में कैसे कॉन्फ़िगर करें


219

हाल ही में मैं GitExtension 2.46 का उपयोग कर रहा था, लेकिन Git संस्करण जो है वही 1.9.4.msysgit.2 है। केवल Git कमांड का उपयोग करने की इच्छा रखते हुए, मैंने GitExtension की स्थापना रद्द की और Git और KDiff3 के उपलब्ध नवीनतम संस्करण को स्थापित किया ।

जब मैं मर्ज करता हूं और टकराव होता है, तो मैं निम्नलिखित कमांड चलाता हूं:

$ git mergetool

तब मुझे संदेश प्राप्त होता है:

मर्ज टूल kdiff3 'kdiff3' के रूप में उपलब्ध नहीं है।

मुझे लगता है कि यह केडीडी 3 रास्ते से होना चाहिए।

वातावरण

  • ओएस: विंडोज 10
  • Git 2.6.1.windows.1
  • KDiff3 0.9.98 (64 बिट)

प्रशन:

  • मैं आदेश के लिए .gitconfig फ़ाइल में कॉन्फ़िगर करने के लिए क्या है $ git mergetoolसंस्करणों के साथ KDiff3 जीयूआई को खोलने के लिए स्थानीय , REMOTE , आधार और विलय विरोध हुआ फ़ाइल का?

  • इसका उपयोग करने के लिए इसे कैसे कॉन्फ़िगर करें यह अलग-उपकरण है?


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

जवाबों:


374

इन साइटों, बहुत मददगार थे लगभग, mergetool और difftool । मैंने वैश्विक कॉन्फ़िगरेशन का उपयोग किया, लेकिन समस्याओं के बिना रिपॉजिटरी द्वारा उपयोग किया जा सकता है। आपको बस निम्नलिखित कमांड निष्पादित करने की आवश्यकता है:

git config --global merge.tool kdiff3
git config --global mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global mergetool.kdiff3.trustExitCode false

git config --global diff.guitool kdiff3
git config --global difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global difftool.kdiff3.trustExitCode false

trustExitCodeविकल्प का उपयोग निर्भर करता है कि आप क्या करना चाहते हैं जब अलग-अलग टूल रिटर्न करते हैं। से प्रलेखन :

git-difftool प्रत्येक फ़ाइल पर व्यक्तिगत रूप से एक अलग टूल को आमंत्रित करता है। डिफाल्ट टूल द्वारा बताई गई त्रुटियों को डिफ़ॉल्ट रूप से नजरअंदाज कर दिया जाता है। जब गैर-शून्य निकास कोड लौटाता है, तो git-difftool निकास बनाने के लिए --trust-exit-code का उपयोग करें


5
फिर भी, मैं क्यों चाहता हूँ कि अगर जीटीएफ 3 विफल हो जाए तो मैं नहीं देख पाऊंगा?
डेविड टोरेस

9
मेरे लिए विज़ुअल स्टूडियो 2015 द्वारा मान्यताप्राप्त उपकरण को अलग करने के लिए, मुझे इस लाइन git config --global --add diff.guitool kdiff3 को इस पर बदलना होगा: git config --global --add diff.tool kdiff3
गुइल्यूम रेमंड

2
@DavidTorres शायद इसलिए क्योंकि बुरी तरह से व्यवहार किए गए विंडोज टूल (जो सफलता पर गैर-शून्य कोड से बाहर निकलते हैं) सभी के लिए इसे बर्बाद कर देते हैं।
मैथ्यू फ्लशेन

2
डिफेंड डॉक्स सेटिंग के अनुसार ट्रस्ट एक्सिटकोड को गलत तरीके से सेट करना अनावश्यक है, क्योंकि डिफॉल्ट को वैसे भी अनदेखा करना है।
मैट विल्की

7
AFAIK, --addकई बार आह्वान करने पर दूसरी या तीसरी प्रविष्टि जोड़ेगा। बाद में इसे ठीक करना मुश्किल है, क्योंकि इसे केवल हटाया नहीं जा सकता है --remove। बिना मूल्य तय किए बस --addठीक होना चाहिए।
थॉमस वेलर

58

बस @ जोसेफ के जवाब का विस्तार करने के लिए :

इन आदेशों को लागू करने के बाद आपकी वैश्विक .gitconfigफ़ाइल में निम्नलिखित लाइनें होंगी (प्रक्रिया को गति देने के लिए आप उन्हें केवल फ़ाइल में कॉपी कर सकते हैं) :

[merge]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false
[diff]
    guitool = kdiff3
[difftool "kdiff3"]
    path = C:/Program Files/KDiff3/kdiff3.exe
    trustExitCode = false

@ एलेक्स78191, मेरा उत्तर जोसेफ के उत्तर को दर्शाता है और वहां आप इस सेटिंग के बारे में अधिक जानकारी प्राप्त कर सकते हैं।
इगोर कुस्तोव

5
इस अधिकार को पाने में मुझे लंबा समय लगा। 2 चीजों ने मुझे भटका दिया: (1) .gitconfigमैं जिस फाइल का संपादन कर रहा था , वह इस्तेमाल नहीं की जा रही थी। एक लोड हो रहा है की पहचान के लिए stackoverflow.com/questions/2114111/… देखें । (2) मिक्स एंड मैच न करें cmd =और path =gitconfig, TL में? DR: cmd को डिलीट करें और सिर्फ पाथ का उपयोग करें
मैट विल्की

1
अब git bash यूज़ पर .... git difftool <filename> या सिंपल git difftool को चलाने के लिए आप जो gui kdiff3 सेट करें।
विवेक

32

मैक उपयोगकर्ताओं के लिए

यहाँ @ जोसेफ का स्वीकृत जवाब है, लेकिन डिफ़ॉल्ट मैक के साथ पथ स्थान स्थापित है kdiff3

(ध्यान दें कि आप इसे कॉपी और पेस्ट कर सकते हैं और इसे एक बार में चला सकते हैं)

git config --global --add merge.tool kdiff3 
git config --global --add mergetool.kdiff3.path  "/Applications/kdiff3.app/Contents/MacOS/kdiff3" 
git config --global --add mergetool.kdiff3.trustExitCode false

git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "/Applications/kdiff3.app/Contents/MacOS/kdiff3"
git config --global --add difftool.kdiff3.trustExitCode false

4
--addअगर आप दो बार कमांड चलाते हैं, तो 2 कॉन्फिग एंट्रीज़ के परिणामस्वरूप इसका उपयोग न करें । यह एक गड़बड़ सफाई है, क्योंकि आप किसी एक प्रविष्टि को और अधिक नहीं हटा सकते हैं। देखें git-scm.com/docs/git-config : "कई लाइनों को एक विकल्प में जोड़ा जा सकता है"
थॉमस वेलर

11

वैसे, समस्या यह है कि GIT% PATH% में केडीडी 3 नहीं पा सकता है।

एक ठेठ यूनिक्स स्थापना में सभी निष्पादन योग्य कई प्रसिद्ध स्थानों (में रहते हैं /bin/, /usr/bin/, /usr/local/bin/, आदि), और दूसरी बस एक खोल प्रोसेसर में अपने नाम लिखकर (जैसे द्वारा एक कार्यक्रम आह्वान कर सकते हैं cmd.exe:))।

माइक्रोसॉफ्ट विंडोज में, प्रोग्राम आमतौर पर समर्पित रास्तों में स्थापित किए जाते हैं ताकि आप बस kdiff3एक cmdसत्र में टाइप न कर सकें और केडीएफ 3 चला सकें।

कठिन समाधान: आपको यह बताना चाहिए कि पूर्ण पथ निर्दिष्ट करके केडीआईफ़ 3 को कहाँ खोजें kdiff3.exe। दुर्भाग्य से, Git इसके विनिर्देश में पथ विनिर्देश में रिक्त स्थान पसंद नहीं करता है, इसलिए पिछली बार जब मुझे इसकी आवश्यकता थी, तो मैंने उन प्राचीन "C: \ Progra ~ 1 ... \ kdiff3.exe" के साथ समाप्त किया जैसे कि यह देर हो गई 1990 के दशक :)

सरल समाधान: अपनी कंप्यूटर सेटिंग्स को संपादित करें और निर्देशिका को% PATH% में kdiff3.exe के साथ शामिल करें। फिर परीक्षण करें यदि आप इसे cmd.exe से इसके नाम से आमंत्रित कर सकते हैं और फिर Git चला सकते हैं।


8

मुझे कमांड लाइन के मापदंडों को जोड़ने की जरूरत थी या केडीआईएफ 3 केवल फाइलों के बिना खुलेगा और मुझे आधार, स्थानीय और रिमोट के लिए संकेत देगा। मैंने TortoiseHg के साथ आपूर्ति किए गए संस्करण का उपयोग किया ।

इसके अतिरिक्त, मुझे अच्छे पुराने डॉस 8.3 फ़ाइल नामों का सहारा लेना चाहिए।

[merge]
    tool = kdiff3

[mergetool "kdiff3"]
    cmd = /c/Progra~1/TortoiseHg/lib/kdiff3.exe $BASE $LOCAL $REMOTE -o $MERGED

हालाँकि, यह अब सही ढंग से काम करता है।


6

Gris 2.20 (Q4 2018) से शुरू होने वाले kris के उत्तर में संशोधन करने के लिए , उचित आदेश git mergetoolहोगा

git config --global merge.guitool kdiff3 

ऐसा इसलिए है क्योंकि " git mergetool" " --[no-]gui" की तरह, " " विकल्प लेना सीखाgit difftool " है।

देखें c217b93 प्रतिबद्ध , प्रतिबद्ध 57ba181 , प्रतिबद्ध 063f2bd (24 अक्टू 2018) द्वारा डेंटन लियू ( Denton-L)
(द्वारा विलय Junio सी Hamano - gitster- में प्रतिबद्ध 87c15d1 30 अक्टूबर 2018)

mergetool: -g/--[no-]guiतर्क के रूप में स्वीकार करते हैं

difftoolकिसी -g/--[no-]guiविकल्प को स्वीकार करने के अनुरूप , चर का mergetoolउपयोग merge.guitoolकरने के लिए डिफ़ॉल्ट मेरिजूल को खोजने के लिए उसी विकल्प को स्वीकार करें merge.tool


5

(जब WSL git से kdiff3 का उपयोग करने का तरीका जानने की कोशिश की जा रही है, तो मैं यहीं समाप्त हो गया और अंतिम टुकड़े मिल गए, इसलिए मैं किसी और के लिए अपना समाधान पोस्ट करूँगा, जबकि उस उत्तर को खोजने की कोशिश कर रहा था)

WSL गिट के लिए अलग / मर्ज टूल के रूप में kdiff3 का उपयोग कैसे करें

विंडोज अपडेट 1903 के साथ यह बहुत आसान है; बस wslpath का उपयोग करें और Windows से WSL के लिए TMP को साझा करने की कोई आवश्यकता नहीं है क्योंकि Windows पक्ष की अब WSL फाइल सिस्टम तक \ wsl $ के माध्यम से पहुंच है:

[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    # Unix style paths must be converted to windows path style
    cmd = kdiff3.exe \"`wslpath -w $LOCAL`\" \"`wslpath -w $REMOTE`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false

विंडोज अपडेट से पहले 1903

Windows 10 पर स्थापित kdiff3 का उपयोग करने के लिए कदम WSL में git के लिए अलग / मर्ज उपकरण के रूप में:

  1. Windows पथ में kdiff3 स्थापना निर्देशिका जोड़ें।
  2. WSLENV Windows परिवेश चर (WSLENV = TMP / up) में TMP जोड़ें। TMP dir का उपयोग अस्थायी फ़ाइलों के लिए git द्वारा किया जाएगा, फ़ाइलों के पिछले संशोधनों की तरह, इसलिए यह काम करने के लिए पथ विंडोज़ सिस्टम पर होना चाहिए।
  3. TMPDIR को TMP में .bashrc पर सेट करें:
# If TMP is passed via WSLENV then use it as TMPDIR
[[ ! -z "$WSLENV" && ! -z "$TMP" ]] && export TMPDIR=$TMP
  1. Kdiff3 को कॉल करते समय यूनिक्स-पथ को विंडोज़-पथ में परिवर्तित करें। मेरा .gitconfig का नमूना:
[merge]
    renormalize = true
    guitool = kdiff3
[diff]
    tool = kdiff3
[difftool]
    prompt = false
[difftool "kdiff3"]
    #path = kdiff3.exe
    # Unix style paths must be converted to windows path style by changing '/mnt/c/' or '/c/' to 'c:/'
    cmd = kdiff3.exe \"`echo $LOCAL | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\" \"`echo $REMOTE | sed 's_^\\(/mnt\\)\\?/\\([a-z]\\)/_\\2:/_'`\"
    trustExitCode = false
[mergetool]
    keepBackup = false
    prompt = false
[mergetool "kdiff3"]
    path = kdiff3.exe
    trustExitCode = false
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.