.Gitconfig के साथ अलग उपकरण को कॉन्फ़िगर करना


159

मैं .itconfig फ़ाइल के साथ अंतर करने के लिए एक अलग टूल का उपयोग करने के लिए Git को कैसे कॉन्फ़िगर करूं?

मैं इसे अपने .gitconfig में रखता हूं:

[diff]
    tool = git-chdiff #also tried /bin/git-chdiff

यह काम नहीं करता; यह सिर्फ नियमित कमांड लाइन अंतर को खोलता है। जब मैं करता हूं

export GIT_EXTERNAL_DIFF=git-chdiff

फिर git diffबाहरी डिफरेंशियल टूल को खोलेगा (इसलिए मुझे पता है कि एक्सटर्नल डिफरेंट टूल स्क्रिप्ट ठीक काम करती है)। क्या मैं अलग उपकरण के लिए अपने .gitconfig विन्यास के साथ कुछ गलत है?


1
देखें stackoverflow.com/questions/255202/... (संभवतः पास इस डुप्लीकेट के रूप में)
स्टीन जी Strindhaug

जवाबों:


140

Git पूर्व-कॉन्फ़िगर "आउट-ऑफ-द-बॉक्स" (kdiff3, kompare, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, diffuse, opendiff, p4merge और araxis) की एक सीमा प्रदान करता है, और आपको अनुमति भी देता है। अपने खुद के निर्दिष्ट करने के लिए। पूर्व-कॉन्फ़िगर किए गए कई पहलुओं में से एक का उपयोग करने के लिए (उदाहरण के लिए, "विम्डीफ"), आप निम्न पंक्तियों को अपने साथ जोड़ते हैं ~/.gitconfig:

[diff]
    tool = vimdiff

अब, आप "git difftool" चला सकते हैं और अपनी पसंद के उपकरण का उपयोग कर सकते हैं।

दूसरी ओर, अपने स्वयं के difftool को निर्दिष्ट करना, थोड़ा और अधिक काम करता है, देखें कि मैं अपने पसंदीदा डिफरेंशियल टूल / दर्शक के साथ 'git diff' आउटपुट कैसे देखता हूं?


पहला लिंक टूट गया है। ऐसा लगता है कि डोमेन से बदल गया .comहै .org। मैं jeetworks.org/software
RBT

1
पूर्व-कॉन्फ़िगर किए गए "आउट-ऑफ-द-बॉक्स" डिफ़फ़ल से आपका क्या मतलब है? बाहरी अंतर टूल "winMerge" को सेट करने के लिए जो आपकी सूची में नहीं है मुझे वही सेटिंग करनी थी जो आपने अपनी पोस्ट में बताई है और सब कुछ बिना किसी अतिरिक्त कॉन्फ़िगरेशन के काम करना शुरू कर दिया है। तो क्या इसका मतलब यह है कि git "winMerge" के साथ-साथ बॉक्स से बाहर का समर्थन करता है क्योंकि जितना मैं आपके पोस्ट से समझ सकता हूं कि एक अलग टूल को सेटअप करने के लिए कुछ अतिरिक्त काम / सेटिंग्स / कॉन्फ़िगरेशन की आवश्यकता होती है जो आउट-ऑफ का समर्थन नहीं करता है बॉक्स git द्वारा।
RBT

169

ऐसा करने का एक अतिरिक्त तरीका (कमांड लाइन से):

git config --global diff.tool tkdiff
git config --global merge.tool tkdiff
git config --global --add difftool.prompt false

पहली दो पंक्तियाँ difftool और mergetool tkdiff- को आपकी प्राथमिकताओं के अनुसार बदल देंगी । तीसरी पंक्ति कष्टप्रद संकेत को निष्क्रिय कर देती है, इसलिए जब भी आप git difftoolटकराएंगे यह स्वचालित रूप से difftool लॉन्च करेगा।


11
मैंने किया था, git config --global diff.tool diffmergeलेकिन जब मैंने किया था git diff myfile.txtतब भी मुझे डिफॉल्ट यूनिक्स
डिफरेंस

शायद आपके पास एक स्थानीय कॉन्फ़िगरेशन है जो किसी अन्य उपकरण को परिभाषित करता है?
ओमर डेगन

1
शायद आपको अलग करने के लिए सही मापदंडों को पारित करने की आवश्यकता है: यह लिंक बताता है कि इसे कैसे करना है: मेल्ट
rptp

5
@amphient: टूल का उपयोग करने के लिए git diff टूल myfile.txt को आज़माएं ।
JBRWilkinson

72

अन्य लोगों ने इस पर 99% उत्तर दिया है, लेकिन एक चरण बाकी है। (मेरा जवाब ओएस एक्स से आ रहा होगा इसलिए आपको तदनुसार फ़ाइल पथ बदलना होगा।)

आप इन परिवर्तनों को अपने लिए करते हैं ~/.gitconfig:

[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /Applications/Diffmerge.app/Contents/MacOS/diffmerge $LOCAL $REMOTE

यह अलग उपकरण को ठीक करेगा। आप ~/.gitconfigटर्मिनल से इन आदेशों को दर्ज करके सीधे संपादित किए बिना भी इसे ठीक कर सकते हैं :

git config --global diff.tool diffmerge
git config --global difftool.diffmerge.cmd "/Applications/DiffMerge.appContents/MacOS/diffmerge \$LOCAL \$REMOTE"

1% जिसे बाकी सभी लोग उल्लेख करने में विफल रहे हैं, इसका उपयोग करते समय आप बस नहीं चला सकते हैं git diff myfile.txt; आपको दौड़ने की जरूरत है git difftool myfile.txt


23
उस अंतिम 1% के लिए अपग्रेड किया गया। पूरी तरह से अंकित नाखून के रूप में संतोषजनक के रूप में कुछ भी नहीं है;)
तैटू

1
क्या इसे डिफ़ॉल्ट टूल बनाने का कोई तरीका है?
math0ne

6
महान, आप कदम याद कर रहे हैं git config --global --add difftool.prompt false, यद्यपि। ;)
सुमा

36

यहाँ मेरा ~ / .itconfig का हिस्सा है जहाँ मैं अलग और विलय उपकरणों को कॉन्फ़िगर करता हूँ। मुझे SourceGear द्वारा अलग होना पसंद है। (मुझे यह बहुत पसंद है, तथ्य की बात के रूप में)।

[merge]
        tool = diffmerge
[mergetool "diffmerge"]
        cmd = "diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$(if test -f \"$BASE\"; then echo \"$BASE\"; else echo \"$LOCAL\"; fi)\" \"$REMOTE\""
        trustExitCode = false
[diff]
        tool = diffmerge
[difftool "diffmerge"]
        cmd = diffmerge \"$LOCAL\" \"$REMOTE\"

तो, आप देखते हैं, आप [difftool "diffmerge"]लाइन में "डिफार्मेज" नामक टूल को परिभाषित कर रहे हैं । तब मैं [diff] tool =अनुभाग में डिफ़ॉल्ट के रूप में टूल "डिफरेंश" सेट कर रहा हूं ।

मैं स्पष्ट रूप से मेरे रास्ते में, यहाँ "diffmerge" कमांड रखता हूँ। अन्यथा मुझे निष्पादन योग्य के लिए एक पूर्ण मार्ग देने की आवश्यकता होगी।


सभी के पीछे भागने के बिना:diffmerge --merge --result="$MERGED" "$LOCAL" "$(if test -f "$BASE"; then echo "$BASE"; else echo "$LOCAL"; fi)" "$REMOTE"
टिम लवेल-स्मिथ

1
मैं diffmerge --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
टिम लवेल-स्मिथ

और इसे एक आसान 'sgdm_cygwin.sh' स्क्रिप्ट मिल गई है ताकि विंडोज वर्जन को Cygwin से इस्तेमाल करना आसान बनाया जा सके।
thoni56

तो आप बस कर सकते हैं ln-s <pathtodiffmerge>/sgdm_cygwin.sh /usr/local/bin/diffmergeऔर आप ऊपर दिए गए विन्यास का उपयोग करने के लिए बिल्कुल तैयार हैं। साथ ही साथ diffmergeसीधे साइबरविन कमांड लाइन से साइबरविन पथ।
thoni56

यह sgdm.exeआजकल होगा
kzu

22

इस उत्तर से मेरे उत्तर को फिर से प्रस्तुत करना जो कि गिट के लिए अलग उपकरण के रूप में तुलना करने से अधिक विशिष्ट था। मेरे द्वारा साझा किए गए सभी विवरण समान रूप से किसी भी उपकरण के लिए समान रूप से उपयोगी हैं, इसलिए इसे यहां साझा करें:

हमारे द्वारा चलाया जाने वाला पहला आदेश नीचे दिया गया है:

git config --global diff.tool bc3

उपरोक्त आदेश निर्देशिका में .gitconfigमिली प्रविष्टि के नीचे बनाता है %userprofile%:

[diff]
    tool = bc3

फिर आप नीचे कमांड चलाते हैं ( इस कमांड को रन करना इस विशेष मामले में बेमानी है और केवल कुछ विशेष मामलों में ही आवश्यक है। आप इसे थोड़ी देर में जान जाएंगे ):

git config --global difftool.bc3.path "c:/program files/beyond compare 3/bcomp.exe"

ऊपर कमांड .gitconfigफ़ाइल में नीचे प्रविष्टि बनाता है :

[difftool "bc3"]
    path = c:/program files/Beyond Compare 3/bcomp.exe

यहां जानने योग्य बात यह है bc3। यह बाजार में उपलब्ध प्रसिद्ध तुलना उपकरणों के एक विशेष संस्करण के अनुरूप होने के लिए एक अच्छी तरह से ज्ञात कुंजी है ( bc3उपकरण की तुलना में परे के तीसरे संस्करण से मेल खाती है)। यदि आप सभी पूर्व-निर्धारित कुंजियों को देखना चाहते हैं तो बस git difftool --tool-helpgit bash पर कमांड चलाएं । यह सूची के नीचे लौटता है:

vimdiff
vimdiff2
vimdiff3
araxis
bc
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
emerge
examdiff
gvimdiff
gvimdiff2
gvimdiff3
kdiff3
kompare
meld
opendiff
p4merge
tkdiff
winmerge
xxdiff

आप उपरोक्त किसी भी कुंजी का उपयोग कर सकते हैं या अपनी खुद की एक कस्टम कुंजी परिभाषित कर सकते हैं। यदि आप किसी नए टूल को पूरी तरह से सेटअप करना चाहते हैं (या किसी प्रसिद्ध टूल का नया जारी किया गया संस्करण) जो ऊपर सूचीबद्ध किसी भी कुंजी को मैप नहीं करता है, तो आप इसे ऊपर सूचीबद्ध किसी भी कुंजी या नए में मैप करने के लिए स्वतंत्र हैं। अपने खुद के कस्टम कुंजी।

क्या होगा यदि आपको एक तुलना टूल सेटअप करना है जो है

  • बाजार में बिल्कुल नया

या

  • एक मौजूदा प्रसिद्ध उपकरण का एक नया संस्करण जारी किया गया है जिसे गिट में किसी भी पूर्व-परिभाषित कुंजी से मैप नहीं किया गया है ?

मेरे मामले की तरह, मैंने तुलना से परे स्थापित किया था 4. परे तुलना करने के लिए एक प्रसिद्ध उपकरण है, लेकिन इसके संस्करण 4 रिलीज को डिफ़ॉल्ट रूप से किसी भी मौजूदा कुंजी से मैप नहीं किया गया है। तो आप नीचे दिए गए किसी भी दृष्टिकोण का अनुसरण कर सकते हैं:

  1. मैं 4 टूल की तुलना में पहले से मौजूद कुंजी से तुलना कर सकता हूं bc3जो कि 3 संस्करण की तुलना से परे है। मेरे पास अपने कंप्यूटर पर संस्करण 3 की तुलना करने से परे नहीं था, इसलिए मुझे परवाह नहीं थी। अगर मैं चाहता तो मैं इसे उपरोक्त सूची में किसी भी पूर्व-परिभाषित कुंजी में भी मैप कर सकता था examdiff

    यदि आप पहले से ही मौजूद / अच्छी तरह से ज्ञात कुंजी के लिए अच्छी तरह से ज्ञात टूल के संस्करण को मैप करते हैं, तो आपको दूसरी कमांड को चलाने की आवश्यकता नहीं होगी क्योंकि उनके इंस्टॉल पथ को पहले से ही जाना जाता है

    उदाहरण के लिए, अगर मैंने अपने बॉक्स पर संस्करण 3 की तुलना से परे स्थापित किया था, तो मेरी .gitconfigफ़ाइल में कॉन्फ़िगरेशन नीचे होना पर्याप्त होता है:

    [diff]
    tool = bc3
    

    लेकिन अगर आप डिफॉल्ट संबद्ध टूल को बदलना चाहते हैं तो आप pathविशेषता को अलग से उल्लेख करना चाहते हैं ताकि गिट को उस रास्ते का पता चल जाए जहां से आपको नए टूल का एक्सई लॉन्च करना है। यहाँ प्रविष्टि है जो लोमड़ियों के बजाय 4 की तुलना में लॉन्च करने के लिए पकड़ती है। निर्गमन पथ पर ध्यान दें:

    [difftool "bc3"]
    path = c:/program files/Beyond Compare 4/bcomp.exe
    
  2. सबसे साफ दृष्टिकोण नए तुलना उपकरण या एक प्रसिद्ध उपकरण के नए संस्करण के लिए पूरी तरह से एक नई कुंजी को परिभाषित करना है। मेरे मामले की तरह मैंने एक नई कुंजी को परिभाषित किया bc4ताकि याद रखना आसान हो। ऐसे मामले में आपको दो कमांड चलाने होंगे, लेकिन आपका दूसरा कमांड आपके नए टूल के एक्जीक्यूटेबल का रास्ता तय नहीं करेगा। इसके बजाय आपको cmdनीचे दिखाए गए अनुसार अपने नए टूल के लिए विशेषता सेट करना होगा :

    git config --global diff.tool bc4
    
    git config --global difftool.bc4.cmd "\"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"\$LOCAL\" -d \"\$REMOTE\""
    

    ऊपर दिए गए आदेशों को चलाने से आपकी .gitconfigफ़ाइल में नीचे प्रविष्टियाँ बनती हैं :

    [diff]
    tool = bc4
    [difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\bcomp.exe\" -s \"$LOCAL\" -d \"$REMOTE\"
    

मैं आपको भविष्य में अपने लिए किसी भी भ्रम से बचने के लिए दृष्टिकोण # 2 का पालन करने की दृढ़ता से सलाह दूंगा।


16

मेरे विंडोज और लिनक्स विकास के वातावरण के लिए केडीएफ 3 का उपयोग करने के लिए मेरे नीचे काम करता है। यह एक अच्छा सुसंगत क्रॉस-प्लेटफ़ॉर्म अंतर और मर्ज टूल बनाता है।

लिनक्स

[difftool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = /usr/bin/kdiff3
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

खिड़कियाँ

[difftool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[difftool]
    prompt = false
[diff]
    tool = kdiff3
[mergetool "kdiff3"]
    path = C:/Progra~1/KDiff3/kdiff3.exe
    trustExitCode = false
[mergetool]
    keepBackup = false
[merge]
    tool = kdiff3

क्या आपने सिंगल क्रॉस प्लेटफॉर्म .gitconfig फ़ाइल बनाने का एक तरीका खोजा है जो लिनक्स और खिड़कियों दोनों के लिए सशर्त रूप से सही रास्तों को निर्दिष्ट करता है?
जेरी अशर

1
ईमानदारी से, मैंने हर जगह पिघलने के लिए स्विच किया है, और यह सिर्फ काम करने लगता है।
मूडब्लूम

क्या TrustExitCode = false सेट करने का कोई कारण है? मेरी समझ से यदि गलत सेट किया गया है, तो git आपके टूल से गैर शून्य निकास कोड को अनदेखा करेगा। इसलिए यदि आपका टूल क्रश गिट गलती से सोचता है कि मर्ज सफल है। लेकिन हो सकता है कि इसे गलत बताने का कोई कारण हो, कृपया समझाएं।
अपोलो

मेरा मानना ​​है कि trustExitCode = falseयह म्यूट करने का कारण होगा कि क्या यह मर्ज सफल था, बजाय इस बात पर भरोसा करने के कि क्या उपकरण सही या गलत स्थिति से बाहर निकलने के लिए हुआ था।
मूडबॉम

4

यदि आप कई अलग-अलग टूल का उपयोग करने का विकल्प चाहते हैं, तो .gitconfig में एक उपनाम जोड़ें

[alias]
    kdiff = difftool --tool kdiff3

--toolविकल्प का उल्लेख करने के लिए। धन्यवाद
itMaxence

0

Microsoft vscode-tips-and-tricks का संदर्भ लें । अपने टर्मिनल में बस ये कमांड चलाएं:

git config --global merge.tool code

लेकिन सबसे पहले आपको codeअपने PATH में कमांड जोड़ने की आवश्यकता है । यहां छवि विवरण दर्ज करें


0

विंडोज में हमें $git difftool --tool-helpविभिन्न विकल्पों को देखने के लिए कमांड चलाने की आवश्यकता है :

    'git difftool --tool=<tool>' may be set to one of the following:
                    vimdiff
                    vimdiff2
                    vimdiff3

    The following tools are valid, but not currently available:
                    araxis
                    bc
                    bc3
                    codecompare
                    deltawalker
                    diffmerge
                    diffuse
                    ecmerge
                    emerge
                    examdiff
                    gvimdiff
                    gvimdiff2
                    gvimdiff3
                    kdiff3
                    kompare
                    meld
                    opendiff
                    p4merge
                    tkdiff
                    winmerge
                    xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.

और हम उनमें से किसी को भी जोड़ सकते हैं (उदाहरण के लिए विनमर) जैसे

$  git difftool --tool=winmerge

नोट करने के लिए फ़ाइलों को देखने के लिए नोटपैड ++ कॉन्फ़िगर करने के लिए:

 git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

और उपयोग $ git commitकरने से नोटपैड ++ में प्रतिबद्ध जानकारी खुल जाएगी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.