[git] मैं अपने पसंदीदा diff टूल / दर्शक के साथ 'गिट diff' आउटपुट कैसे देखूं?



Answers

उपरोक्त मेरे पिछले "diff.external" कॉन्फ़िगरेशन उत्तर को पूरा करने के लिए:

जैकब द्वारा वर्णित अनुसार , गिट 1.6.3 ने गिट difftool पेश किया, मूल रूप से सितंबर 2008 में प्रस्तावित:

'[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]' = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
(इस उत्तर के अंतिम भाग में --extcmd देखें)

$LOCAL में प्रारंभिक संशोधन से फ़ाइल की सामग्री शामिल है और $REMOTE में अंतिम संशोधन में फ़ाइल की सामग्री शामिल है।
$BASE में $BASE में फ़ाइल की सामग्री शामिल है

यह मूल रूप से गिट इंडेक्स / वर्कट्री पर काम करने के लिए संशोधित git-mergetool मेरेटूलूल है।

इस स्क्रिप्ट के लिए सामान्य उपयोग केस तब होता है जब आपके पास या तो चरणबद्ध या अस्थिर परिवर्तन होते हैं और आप एक साइड-बाय-साइड xxdiff व्यूअर (जैसे xxdiff , tkdiff , आदि) में परिवर्तन देखना चाहते हैं।

git difftool [<filename>*]

एक अन्य उपयोग का मामला तब होता है जब आप एक ही जानकारी देखना चाहते हैं लेकिन मनमाने ढंग से काम करने की तुलना कर रहे हैं (यह वह हिस्सा है जहां रिवर्ज पार्सिंग बेहतर हो सकती है)

git difftool --start=HEAD^ --end=HEAD [-- <filename>*]

अंतिम उपयोग केस तब होता है जब आप अपने वर्तमान वर्कट्री की तुलना HEAD के अलावा किसी अन्य चीज़ से करना चाहते हैं (उदाहरण के लिए एक टैग)

git difftool --commit=v1.0.0 [-- <filename>*]

नोट: चूंकि गिट 2.5, git config diff.tool winmerge पर्याप्त है!
" गिट mergetool winmerge " देखें

गिट 2.5 से पहले:

अपने कस्टम diff उपकरण के साथ difftool को विन्यस्त करने के लिए व्यावहारिक मामला:

C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false

Winmerge.sh के साथ आपके पथ के एक निर्देशिका भाग में संग्रहीत:

#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"

यदि आपके पास कोई अन्य टूल है (kdiff3, P4Diff, ...), एक और खोल स्क्रिप्ट बनाएं, और उचित difftool.myDiffTool.cmd कॉन्फ़िगरेशन निर्देश difftool.myDiffTool.cmd
फिर आप diff.tool कॉन्फ़िगरेशन के साथ आसानी से टूल स्विच कर सकते हैं।

डेव द्वारा अन्य विवरण जोड़ने के लिए आपके पास यह ब्लॉग प्रविष्टि भी है।
(या winmergeu विकल्पों के लिए यह सवाल )

इस सेटिंग के साथ ब्याज winmerge.sh स्क्रिप्ट है : आप विशेष मामलों को ध्यान में रखकर इसे अनुकूलित कर सकते हैं।

उदाहरण के लिए डेविड मार्बल का उदाहरण उदाहरण के लिए देखें जो इस बात से संबंधित है:

  • मूल या गंतव्य में नई फाइलें
  • मूल या गंतव्य में फ़ाइलों को हटा दिया

जैसा कि केम मेसन ने अपने जवाब में उल्लेख किया है, आप --extcmd विकल्प का उपयोग कर किसी भी रैपर से भी बच सकते हैं:

--extcmd=<command>

Diffs देखने के लिए एक कस्टम कमांड निर्दिष्ट करें। git-difftool कॉन्फ़िगर किए गए डिफ़ॉल्ट को अनदेखा करता है और यह विकल्प निर्दिष्ट होने पर $command $LOCAL $REMOTE चलाता है।

उदाहरण के लिए, इस प्रकार gitk किसी भी diff उपकरण को चलाने / उपयोग करने में सक्षम है

Question

जब मैं git diff टाइप करता हूं, तो मैं अपने दृश्य diff टूल (विंडोज़ पर SourceGear "diffmerge") के साथ आउटपुट देखना चाहता हूं। मैं ऐसा करने के लिए गिट को कैसे कॉन्फ़िगर कर सकता हूं?




परिचय

संदर्भ के लिए मैं वॉनसी के उत्तर पर अपनी विविधता शामिल करना चाहता हूं। ध्यान रखें कि मैं संशोधित पाथ के साथ गिट के MSys संस्करण (1.6.0.2 इस समय) का उपयोग कर रहा हूं, और बैश खोल नहीं, बल्कि पावरहेल (या cmd.exe) से गिट चला रहा हूं।

मैंने एक नया आदेश, gitdiff । इस आदेश को चलाने से अस्थायी रूप से आपकी पसंद के विज़ुअल डिफ प्रोग्राम का उपयोग करने के लिए git diff को रीडायरेक्ट किया जाता है (वॉनसी के समाधान के विपरीत जो इसे स्थायी रूप से करता है)। यह मुझे डिफ़ॉल्ट गिट diff कार्यक्षमता ( git diff ) के साथ ही दृश्य diff कार्यक्षमता ( gitdiff ) दोनों की अनुमति देता है। दोनों आदेश एक ही पैरामीटर लेते हैं, उदाहरण के लिए किसी विशेष फ़ाइल में दृश्यमान रूप से भिन्न परिवर्तनों के लिए आप टाइप कर सकते हैं

gitdiff path/file.txt

सेट अप

ध्यान दें कि $GitInstall को उस निर्देशिका के लिए प्लेसहोल्डर के रूप में उपयोग किया जाता है जहां गिट स्थापित है।

  1. एक नई फ़ाइल बनाएं, $GitInstall\cmd\gitdiff.cmd

    @echo off
    setlocal
    for /F "delims=" %%I in ("%~dp0..") do @set path=%%~fI\bin;%%~fI\mingw\bin;%PATH%
    if "%HOME%"=="" @set HOME=%USERPROFILE%
    set GIT_EXTERNAL_DIFF=git-diff-visual.cmd
    set GIT_PAGER=cat
    git diff %*
    endlocal
    
  2. एक नई फ़ाइल बनाएं, $GitInstall\bin\git-diff-visual.cmd (अपनी पसंद के diff प्रोग्राम के पूर्ण पथ के साथ [visual_diff_exe] प्लेसहोल्डर को प्रतिस्थापित करें)

    @echo off
    rem diff is called by git with 7 parameters:
    rem path old-file old-hex old-mode new-file new-hex new-mode
    echo Diffing "%5"
    "[visual_diff_exe]" "%2" "%5"
    exit 0
    
  3. अब आप कर चुके हैं एक गिट भंडार के भीतर से gitdiff चलाना अब बदला गया था कि प्रत्येक फ़ाइल के लिए अपने दृश्य diff कार्यक्रम का आह्वान करना चाहिए।




यदि आप कमांड लाइन के लिए नहीं हैं तो अगर आप कछुए गिट स्थापित करते हैं तो आप "डिफ बाद में" विकल्प के साथ टोर्टोइजिट सबमेनू प्राप्त करने के लिए फ़ाइल पर राइट क्लिक कर सकते हैं।

जब आप पहली फ़ाइल पर इसे चुनते हैं तो आप दूसरी फ़ाइल पर राइट क्लिक कर सकते हैं, कछुए सबमेनू पर जाएं और "==ffilehere == "के साथ डिफ चुनें, यह परिणाम के लिए कछुआ गिटमेर गूई देगा।




मैंने यहां फैंसी सामान की कोशिश की (tkdiff के साथ) और मेरे लिए कुछ भी काम नहीं किया। तो मैंने निम्नलिखित लिपि, tkgitdiff लिखा था। ऐसा करता है जो मुझे करने की ज़रूरत है।

$ cat tkgitdiff
#!/bin/sh

#
# tkdiff for git.
# Gives you the diff between HEAD and the current state of your file.
#

newfile=$1
git diff HEAD -- $newfile > /tmp/patch.dat
cp $newfile /tmp
savedPWD=$PWD
cd /tmp
patch -R $newfile < patch.dat
cd $savedPWD
tkdiff /tmp/$newfile $newfile



विंडोज / एमएसआईएस गिट के लिए समाधान

जवाब पढ़ने के बाद, मैंने एक आसान तरीका खोजा जिसमें केवल एक फ़ाइल को बदलना शामिल है।

  1. तर्क 2 और 5 के साथ, अपने diff प्रोग्राम को आमंत्रित करने के लिए बैच फ़ाइल बनाएं। यह फ़ाइल कहीं आपके पथ में होनी चाहिए। (यदि आपको नहीं पता कि वह कहां है, तो इसे c: \ windows में रखें)। इसे कॉल करें, उदाहरण के लिए, "gitdiff.bat"। मेरा है:

    @echo off
    REM This is gitdiff.bat
    "C:\Program Files\WinMerge\WinMergeU.exe" %2 %5
    
  2. अपनी बैच फ़ाइल को इंगित करने के लिए पर्यावरण चर सेट करें। उदाहरण के लिए: GIT_EXTERNAL_DIFF=gitdiff.bat । या git config --global diff.external gitdiff.bat टाइप करके git config --global diff.external gitdiff.bat माध्यम से git config --global diff.external gitdiff.bat

    उद्धरणों का उपयोग न करना, या किसी भी पथ की जानकारी निर्दिष्ट करना महत्वपूर्ण है, अन्यथा यह काम नहीं करेगा। यही कारण है कि gitdiff.bat आपके रास्ते में होना चाहिए।

अब जब आप "गिट diff" टाइप करते हैं, तो यह आपके बाहरी diff दर्शक को आमंत्रित करेगा।




यदि आप मैक पर हैं और XCode है, तो आपके पास FileMerge इंस्टॉल है। टर्मिनल कमांड opendiff है, तो आप केवल git difftool -t opendiff कर सकते हैं




मैं उबंटू पर कॉम्पारे का उपयोग करता हूं:

sudo apt-get install kompare

दो शाखाओं की तुलना करने के लिए:

git difftool -t kompare <my_branch> master



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

उदाहरण के लिए यदि आपने मेल किया है, तो आप शाखाओं के master और डेवेल को संपादित कर सकते हैं:

git config --global diff.external meld
git difftool master..devel



मिलाया स्थापित करें

 # apt-get install meld

फिर इसे difftool के रूप में चुनें

 $ git config --global diff.tool meld

यदि टूर इसे कंसोल प्रकार पर चलाने के लिए चाहते हैं:

 $ git difftool

यदि आप ग्राफिक मोड प्रकार का उपयोग करना चाहते हैं:

 $ git mergetool

और आउटपुट होगा:

 'git mergetool' will now attempt to use one of the following tools:
 meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse
 diffmerge ecmerge p4merge araxis bc3 codecompare emerge vimdiff
 Merging:
 www/css/style.css
 www/js/controllers.js

 Normal merge conflict for 'www/css/style.css':
   {local}: modified file
   {remote}: modified file
 Hit return to start merge resolution tool (meld):

तो बस meld (डिफ़ॉल्ट) का उपयोग करने के लिए एंटर दबाएं, यह ग्राफ़िक मोड खोल देगा, जादू को सहेज देगा और विलय को हल करने के लिए दबाएगा। बस इतना ही




मेरे पास इसके अलावा एक जोड़ा है। मैं नियमित रूप से एक diff ऐप का उपयोग करना चाहता हूं जो डिफ़ॉल्ट उपकरण (जैसे कैलिडोस्कोप) के रूप में समर्थित नहीं है, के माध्यम से

git difftool -t

मुझे डिफ़ॉल्ट diff भी नियमित कमांड लाइन होना पसंद है, इसलिए GIT_EXTERNAL_DIFF चर सेट करना एक विकल्प नहीं है।

आप इस आदेश के साथ एक-एक के रूप में एक मनमानी diff ऐप का उपयोग कर सकते हैं:

git difftool --extcmd=/usr/bin/ksdiff

यह आपके द्वारा निर्दिष्ट कमांड में 2 फाइलों को पास करता है, इसलिए आपको शायद एक रैपर की आवश्यकता नहीं है।




यह विंडोज 7 पर मेरे लिए काम करता है। मध्यस्थ sh स्क्रिप्ट के लिए कोई ज़रूरत नहीं है

.gitconfig की सामग्री:

    [diff]
      tool = kdiff3

    [difftool]
       prompt = false

    [difftool "kdiff3"]
      path = C:/Program Files (x86)/KDiff3/kdiff3.exe
      cmd = "$LOCAL" "$REMOTE"



चूंकि गिट संस्करण 1.6.3 के बाद " गिट difftool " है जिसे आप अपने पसंदीदा ग्राफिकल diff उपकरण का उपयोग करने के लिए कॉन्फ़िगर कर सकते हैं। वर्तमान में आउट ऑफ़ द बॉक्स बॉक्स केडीएफ 3, कॉम्पारे, टीकेडीफ, मेल्ड, एक्सएक्सडीफ, उभरा, विमडिफ, जीवीमडिफ, इमरज, डिफ्यूज और ऑपेन्डिफ़ हैं ; यदि आप जिस उपकरण का उपयोग करना चाहते हैं वह इस सूची पर नहीं है, तो आप हमेशा ' difftool.<tool>.cmd ' कॉन्फ़िगरेशन विकल्प का उपयोग कर सकते हैं।

"गिट difftool" एक ही विकल्प स्वीकार करता है जैसे "गिट diff"।




Links