2009-04-23 12 views
21

मैं सिर्फ Git का उपयोग शुरू कर दिया है और यह संभव मैं कुछ स्पष्ट नहीं छूटा है, लेकिन यहाँ जाता है:मैं msysgit/gitk के साथ डिफमेर्ज कैसे सेटअप करूं?

  • मैं msysgit 1.6.2.2 उपयोग कर रहा हूँ Windows XP
  • जबकि स्थापित करने, मैं विकल्प 1 उठाया पर "केवल गिट बैश का उपयोग करें"

मैं एक रैपर स्क्रिप्ट को एक साथ रखने की कोशिश कर रहा हूं जिसका उपयोग मैं डिफमेज के साथ निर्मित गिट diff को प्रतिस्थापित करने के लिए कर सकता हूं।

@echo off 
REM ---- Switch forward slashes to back slashes ---- 
set oldW=%2 
set oldW=%oldW:/=\% 
set newW=%5 
set newW=%newW:/=\% 

REM ---- Launch DiffMerge ---- 
"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" %oldW% /title2="New Version" %newW% 

इस प्रकार मैं% GIT_INSTALL%/cmd तहत बल्ले फ़ाइल रखा और मेरे .gitconfig फ़ाइल संपादित: this thread आदि पर आधारित है, मैं निम्नलिखित बैच फ़ाइल बनाई

[diff] 
external = C:/Programs/git/cmd/git-diff-wrapper.bat 

तो मैं लांच गिट बैश और निष्पादित करें गिट डिफ हेड हेड ~ - माईफाइल

मुझे एक संदेश मिला है File (\dev\null) not found - जो कि मैं विंडोज पर हूं, आश्चर्यजनक नहीं है।

दबाकर, मैंने गिटक लॉन्च किया और संपादन> प्राथमिकताएं के तहत, मैंने एक ही रैपर स्क्रिप्ट चुना। किसी विशेष फ़ाइल के लिए "बाहरी diff" विकल्प को आज़माने से क्रिप्टिक त्रुटि संदेश Unknown Option "

स्पष्ट रूप से, मुझे नहीं पता कि मैं अब और क्या कर रहा हूं ताकि किसी भी मदद की सराहना की जा सके।

+0

बस, कुछ "DiffMerge" विशिष्ट तत्वों के साथ मेरा उत्तर पूरा के रूप में अनुरोध किया। – VonC

उत्तर

9

मैंने अभी setting Notepad++ as my external editor with msysgit1.6.2.2 के साथ कुछ हद तक समान अनुभव अनुभव किया है।

कुंजी को यह समझना था कि रैपर एक डॉस स्क्रिप्ट नहीं था, लेकिन एक/bin/sh स्क्रिप्ट थी। सभी '\' बनाने के बारे में चिंता मत करो

#!/bin/sh 

# diff is called by git with 7 parameters: 
# path old-file old-hex old-mode new-file new-hex new-mode 

"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" /title1="Old Version" "$2" /title2="New Version" "$5" | cat 

:

तो अपने ".bat" में डाल करने की कोशिश (भले ही यह वास्तव में एक बल्ला स्क्रिप्ट नहीं है, तो एक्सटेंशन यहां महत्वपूर्ण नहीं है) '/' पर जाएं: यह बाहरी diff उपकरण को बुलाते हुए गिट स्क्रिप्ट द्वारा किया जाता है।

मैंने इसे डिफमेर्ज के साथ परीक्षण नहीं किया, लेकिन WinMerge के साथ, यह एक डॉस सत्र या गिट शैल दोनों से ठीक काम करता है।

#!/bin/sh 
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$2" "$5" | cat 

('-e' विकल्प के साथ, मैं 'ESC' पर सिर्फ OT प्रकार को बंद करने और diff उपकरण छोड़ने की है: कि अच्छा काम करता है)


alt textaverage_geek टिप्पणी में कहते हैं :

ने '/bin/sh' हेडर जोड़ा और फिर गिट diff चलाने की कोशिश की।
इस बार त्रुटि है:
Unexpected parameter 'C:/Docume~/avggeek/LOCALS~1/Temp/.diff_b08444
वहाँ मानकों को पारित कर दिया जा रहा है क्या जब मैं git diff फोन को देखने के लिए कोई तरीका है?

1/वास्तव में यह देखने का एक तरीका है कि पैरामीटर पास हो रहे हैं!
C:\Program Files\Git\libexec\git-core\git-sh-setup फ़ाइल में निम्न पंक्ति जोड़ें:

git_editor() { 
    : "${GIT_EDITOR:=$(git config core.editor)}" 
    : "${GIT_EDITOR:=${VISUAL:-${EDITOR}}}" 
    case "$GIT_EDITOR,$TERM" in 
    ,dumb) 
     echo >&2 "No editor specified in GIT_EDITOR, core.editor, VISUAL," 
     echo >&2 "or EDITOR. Tried to fall back to vi but terminal is dumb." 
     echo >&2 "Please set one of these variables to an appropriate" 
     echo >&2 "editor or run $0 with options that will not cause an" 
     echo >&2 "editor to be invoked (e.g., -m or -F for git-commit)." 
     exit 1 
     ;; 
    esac 
#### ADD THIS LINE BELOW 
    echo >&2 "editor is ${GIT_EDITOR:=vi} [email protected]" 
#### END ADDITION ABOVE 
    eval "${GIT_EDITOR:=vi}" '"[email protected]"' 
} 

आप क्या संपादक बुलाया जा रहा है देखेंगे, क्या पैरामीटर के साथ।

अब

, "अप्रत्याशित पैरामीटर" भाग के बारे में:
मैं जब मैं "/e /ub" के बजाय "-e -ub" के साथ WinMergeU.exe कहा जाता है, तो पहला सवाल यह है कि त्रुटि के एक ही तरह था:
क्या आपको यकीन है कि "/title1" बिट का उपयोग "-title1" या "-t1" या "--title1" या "--t1" के रूप में नहीं किया जा सका? chapter 9 "Command Lines Arguments" of the pdf documentation of DiffMerge से यही देख सकता है।
यदि नहीं, तो मुझे संदेह है कि कुछ डबल कोट्स सही पैरामीटर को सही तरीके से सीमित करने के लिए हैं। की तरह कुछ:

"/title1="Old Version"" "$2" "/title2="New Version"" "$5" 
or 
"/title1=\"Old Version\"" "$2" "/title2=\"New Version\"" "$5" 

लेकिन मेरे पैसे नहीं बल्कि "-title1" या "-t1" फ़ॉर्म पर होगा:

-t1="Old Version" "$2" -t2="New Version" "$5" 

ठीक काम करना चाहिए।

+0

मैंने '/ bin/sh' शीर्षलेख जोड़ा और फिर गिट diff चलाने की कोशिश की। इस बार त्रुटि है: अप्रत्याशित पैरामीटर 'सी: /Docume~'/avggeek/LOCALS~1/Temp/.diff_b08444 क्या यह देखने का कोई तरीका है कि जब मैं' git diff' कहता हूं तो पैरामीटर क्या पारित हो रहे हैं? –

+0

"कुंजी को यह समझना था कि रैपर एक डॉस स्क्रिप्ट नहीं था, लेकिन एक/बिन/एस स्क्रिप्ट।" मेरे जैसे लोग "केवल गिट बैश का उपयोग करें" विकल्प को सक्रिय नहीं करते हैं, यह एक विंडोज स्क्रिप्ट होना चाहिए (.cmd अधिक फैशनेबल है ...) आपके जैसा ही है लेकिन $ 2 – PhiLho

4

वॉनसी - स्विचिंग -टी 1 और -टी 2 में त्रुटियों को ठीक किया गया। डिफमेज अब गिट बैश के लिए काम करता है :)

the gitk patch पर थोड़ा सा पोकिंग करने के बाद बाहरी डिफ समर्थन जोड़ा गया, मुझे एहसास हुआ कि यह बाहरी फाइलों को तर्क के रूप में दो फाइलों के साथ सीधे कॉल कर रहा है। इसलिए मैं संशोधित gitk> संपादित करें> प्राथमिकताएं और निम्न आदेश बाहरी Diff उपकरण विकल्प में सीधे डाल:

"C:/Programs/SourceGear/DiffMerge/DiffMerge.exe" -t1="Old Version" -t2="New Version" 

अब मैं DiffMerge gitk के लिए काम किया है वह बहुत :-)

+0

के बजाय% 2 का उपयोग करना बहुत बढ़िया है, यह काम करता है! और गिटक पर प्रतिक्रिया के लिए धन्यवाद। +1 – VonC

+0

नवीनतम डिफमेर मार्ग के साथ अधिक संभावना है "सी:/प्रोग्राम फ़ाइलें/स्रोत गियर/सामान्य/डिफमेज/sgdm.exe" और -t1/-t2 अब और काम नहीं करता है। यदि आप इसे छोड़ देते हैं तो आपको कम से कम तुलना विंडो – Ghita

8

यह इस प्रकार के साथ मेरे लिए काम करता :

~/.gitconfig में:

[merge] 
tool = diffmerge 
[mergetool "diffmerge"] 
cmd = \"C:/Program Files/git/cmd/git-diffmerge-merge.sh\" \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\" 
trustExitCode = false 

C:\Program Files\Git\cmd\git-diffmerge-merge.sh में:

ऋण की
#!/bin/sh 

localPath="$2" 
basePath="$1" 
remotePath="$3" 
resultPath="$4" 

if [ ! -f $basePath ] 
then 
    basePath="~/diffmerge-empty" 
fi 

"C:/Program Files/SourceGear/DiffMerge/DiffMerge.exe" --merge --result="$resultPath" "$localPath" "$basePath" "$remotePath" --title1="Mine" --title2="Merged: $4" --title3="Theirs" 

भाग http://therightstuff.de/2009/01/28/Setting-Up-SourceGear-DiffMerge-With-Git.aspx को जाता है;)

+0

धन्यवाद मिलती है। आपने मुझे इस के साथ बचाया। – Andrei

14

मैं यह सब करने के लिए उत्तर के लिए इंटरनेट पर देखा। मैंने ऊपर और अन्य सभी समाधानों की कोशिश की। मैं मर्ज हिस्सा काम करने के लिए मिल सकता है और diff भाग या इसके विपरीत नहीं। तो आखिरकार मैंने जो किया वह इंटरनेट पर मिली सारी जानकारी से मेरे सरल समाधान को एक साथ हैक करना था जो मेरे लिए काम करता है। इसे किसी भी स्क्रिप्ट की आवश्यकता नहीं है केवल आप अपना .gitconfig संपादित करें जो आमतौर पर निम्न निर्देशिका C:\Documents and Settings\[username] में रहता है आपको पहले से ही डिफमेर्ज प्रोग्राम स्थापित करना होगा।

यहां मेरी .gitconfig फ़ाइल का प्रासंगिक निकास है। आपको केवल उस पथ को संपादित करने की आवश्यकता होगी जहां DiffMerge का आपका संस्करण है। नोट कि मैंने पुराने डॉस 8 का उपयोग किया था।रास्ते में 3 प्रारूप

[diff] 
    tool = diffm 
[difftool "diffm"] 
    cmd = "H:/PROGRA~1/SourceGear/DiffMerge/DiffMerge.exe $LOCAL $REMOTE" 
    prompt = false 

[merge] 
    tool = diffmerge 
[mergetool "diffmerge"] 
    cmd = "H:/PROGRA~1/SourceGear/DiffMerge/DiffMerge.exe --merge --result=$MERGED $LOCAL $BASE $REMOTE" 
    trustExitCode = false 
    keepBackup = false 

तुम भी git config --replace --global [options] इच्छा इसलिए यदि आप आदेशों का उपयोग करते इसे सेट अप कर सकते हैं।


यह सरल समाधान भी मेरे लिए पूरी तरह से काम करता है। DiffMerge (3.3.1) का नवीनतम संस्करण के लिए, आदेश पथ को बदलने की आवश्यकता:

cmd = "C:/PROGRA~1/SourceGear/Common/DiffMerge/sgdm.exe ...etc..." 
+0

एक साधारण समाधान के लिए प्रॉप्स जो सिर्फ समझ में आता है। – Bnjmn

+0

@Bnjmn की तरह, सरल समाधान के लिए +1 केवल संपादन की आवश्यकता है .gitconfig – JeffH

+0

मेरे लिए कुंजी बदल रहा था '.../विलय/प्रतिस्थापन = ... '' '--merge --replace =। ..'; [SourceGear के दस्तावेज़] (https://sourcegear.com/diffmerge/webhelp/sec__git__windows__msysgit.html) गलत प्रतीत होता है। –

संबंधित मुद्दे