2009-03-11 12 views
19

मैं विंडोज मशीन पर स्रोत नियंत्रण के लिए msys Git का उपयोग कर रहा हूं और मैं यह समझने की कोशिश कर रहा हूं कि गिट के साथ काम करने के लिए मेरा विलय टूल, WinMerge कैसे प्राप्त करें।मैसी गिट मर्ज टूल कमांड विकल्प जारी

मैंने अपनी क्षमता के अनुसार the instructions on this blog का पालन किया है क्योंकि यह सबसे नज़दीक है जो मैंने पाया है कि मैं क्या करने की कोशिश कर रहा हूं। असल में क्या मैंने किया था:

मेरी .gitconfig फ़ाइल को संशोधित निम्नलिखित शामिल करने के लिए:

 
[merge] 
    tool = winmerge 

[mergetool "winmerge"] 
    cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe\" "$PWD/$LOCAL" "$PWD/$REMOTE" "$PWD/$MERGED" 
     trustExitCode = false 
    keepBackup = false 

यह लगभग काम कर रहा है।

 
C:\MY\WORKING\DIRECTORY\-e 
C:\MY\WORKING\DIRECTORY\-ub 

ऐसा लगता है: जब मैं Git से मर्ज उपकरण चलाने का प्रयास, WinMerge मुझे कहा कि यह फाइल, जो पूरी समझ में आता है के रास्ते नहीं मिल सकता है के बाद से रास्तों इसके लिए लग रही है कर रहे हैं एक त्रुटि देता है जैसे कि गिट स्थानीय & दूरस्थ फ़ाइल नामों के बजाय मर्ज टूल में विकल्प पास कर रहा है, जो कि अगर सब ठीक से काम कर रहा था तो मैं पास होने की उम्मीद करता हूं।

मैंने गिट के विलय दस्तावेज के लिए ऑनलाइन खोज की है, लेकिन मुझे जो कुछ करने की कोशिश कर रहा है उससे संबंधित कुछ भी नहीं मिल रहा है।

  1. बदलें सही मान को $LOCAL & $REMOTE चर, यह मानते हुए $LOCAL & $REMOTE गलत कर रहे हैं: मेरा अनुमान है कि समाधान निम्न में से एक हो जाएगा।
  2. WinMergeU को कॉल करने के लिए .bat स्क्रिप्ट लिखें, और तर्कों को संभालें गिट मेरे .bat स्क्रिप्ट के तर्क के भीतर विलय टूल को भेजता है।

उत्तर

7

WinMerge Command line manual से:

cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /ub /e \" 
cmd = \"C:\\Program Files (x86)\\WinMerge\\WinMergeU.exe /u /e \" 

अपने mergetool खंड में बेहतर एक कमांड के रूप में काम कर सकते हैं (/ u नवीनतम WinMerge के साथ नए/यूबी है)।

हालांकि, आपको इस कॉल को एक स्क्रिप्ट में लपेटना पड़ सकता है, जैसा कि इस SO answer में वर्णित है।

C:\myGitRepo>git config --global merge.tool winmerge 
C:\myGitRepo>git config --global mergetool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\"" 
C:\myGitRepo>git config --global mergetool.prompt false 
winmerge.sh साथ

अपने PATH की एक निर्देशिका भाग में संग्रहीत:

#!/bin/sh 
echo Launching WinMergeU.exe: $1 $2 
"C:/Program Files/WinMerge/WinMergeU.exe" -e -ub "$1" "$2" 
अपने कस्टम के साथ mergetool को विन्यस्त diff उपकरण के लिए

प्रैक्टिकल मामला:

निकालें merge.tool के लिए अनुकूलित

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

+0

परिणामस्वरूप "सही पथ अमान्य है" संकेत –

+0

@ टोबियास: एक ठोस उदाहरण (उत्तर अपडेट) के साथ तय किया गया है। – VonC

+0

+1। (अगर मैं कर सकता था। लेकिन कम से कम मैं अपने डाउनवोट को पूर्ववत कर सकता हूं ... एक [बग] लगता है (http://meta.stackexchange.com/questions/23147/change-a-vote-from-downvote-to- अपवोट-थ्रू-एडिटिंग) वास्तव में, यदि आप अपने पथ में winmerge जोड़ते हैं (या 'mergetool.winmerge.path' मुझे लगता है) सेट करें –

4
[mergetool "winmerge"] 
    cmd = winmergeu -e -ub -wl -dl "Remote" -dr "Local" "$PWD/$REMOTE" "$PWD/$LOCAL" "$PWD/$MERGED" 
    keepBackup = false 

आप अंदर C:\Program Files\Git\share\git-gui\lib\mergetool.tcl देखो यह आम मर्ज उपकरण के लिए वाक्य रचना है।

मैं अभी भी यह पता लगाने की Git जीयूआई से सीधे mergetool आह्वान करने के लिए कैसे कोशिश कर रहा हूँ ...

11

आप फ़ाइल है कि विरोध हुआ है पर देखो, तो आप मानक Theirs >>>>>>> और <<<<<< Mine मार्करों पर ध्यान देंगे। WinMerge इन विवादों को विलय के रूप में समझता है, इसलिए इसे स्पष्ट रूप से निर्दिष्ट करने के लिए 'उनका' और 'मेरा' की आवश्यकता नहीं है; इसे सिर्फ यह बताया जाना चाहिए कि यह कौन सी फाइल है जिसमें संघर्ष मार्कर हैं।

  1. हम जानते हैं कि कार्यशील निर्देशिका में फ़ाइल मार्कर शामिल है।
  2. यह समझ में आता है कि जिस फ़ाइल में हम विलय कर रहे हैं वह भी यह फ़ाइल होगी - हम यह भी जानते हैं कि git mergetool$MERGED वेरिएबल उपलब्ध है जो उस फ़ाइल को नाम देता है।

    [mergetool "winmerge"] 
        cmd = 'C:/Program Files/WinMerge/WinMergeU.exe' \"$MERGED\" 
    

यह सब आप मर्ज/संघर्ष समाधान के लिए WinMerge साथ Git ऊपर हुक करने की जरूरत है; कोई स्क्रिप्ट या कमांड लाइन स्विच की आवश्यकता नहीं है। दस्तावेज़ों में तीसरे कमांड-लाइन फॉर्म (ऊपर ओपी द्वारा लिंक) और conflictfile तर्क के स्पष्टीकरण का संदर्भ लें।

+0

परिणामस्वरूप "सही पथ अमान्य है" संकेत –

+1

कोई सही रास्ता नहीं है? WinMerge दस्तावेज़ों से 'विरोधाभास एक विवाद फ़ाइल निर्दिष्ट करता है, आमतौर पर एक संस्करण नियंत्रण प्रणाली द्वारा उत्पन्न किया जाता है। फ़ाइल फ़ाइल की तुलना में विवाद फ़ाइल खुलती है, जहां आप संघर्ष फ़ाइलों को हल करने में वर्णित अनुसार विवादों को विलय और हल कर सकते हैं। ध्यान दें कि किसी भी अन्य पथ का उपयोग किसी विवाद फ़ाइल के साथ नहीं किया जा सकता है। '(लंग उद्धरण को क्षमा करें) शायद आप नवीनतम संस्करण का उपयोग नहीं कर रहे हैं, आपको केवल एक फ़ाइल निर्दिष्ट करने की आवश्यकता है –

+0

यह एकमात्र समाधान है जो मेरे लिए काम करता है। –

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