2009-05-14 9 views
27

मैं Git के साथ p4merge उपयोग करने के लिए कोशिश कर रहा हूँ, लेकिन मैं हो रही है:p4merge त्रुटि [GIT]

त्रुटि p4merge शुरू कर: "पथ/myFile" है (या करने के लिए अंक) अमान्य फ़ाइल (इस आधार को सूचीबद्ध करता है , स्थानीय, रिमोट, और फ़ाइल के मानक संस्करण)।

गिट मुझे संघर्ष के बारे में बताता है तो यह पूछता है कि क्या मैं mergetool कॉन्फ़िगर (p4merge) शुरू करना चाहता हूं और फिर मुझे ऊपर त्रुटि मिलती है।

अतिरिक्त नोट: यह किसी भी फ़ाइल के साथ होता है!

इस बारे में कोई संकेत है कि यह क्या है और इसे कैसे ठीक किया जाए?

+0

शायद .gitconfig में अपना सेक्शन शामिल करें जहां आप मर्ज टूल और पूर्ण त्रुटि संदेश कॉन्फ़िगर करते हैं? क्या आपके पास फ़ाइल नाम या कुछ जगह हैं? – araqnid

+0

फ़ाइल नाम में कोई स्थान नहीं है - मैंने इस प्रश्न का उपयोग करके गिट कॉन्फ़िगर किया है: http://stackoverflow.com/questions/426026/git-on-windows-how-do-you-set-up-a-mergetool – JohnIdol

+0

संभावित डुप्लिकेट [ Windows 7 पर बाहरी प्रोग्राम का उपयोग करते समय गिट diff tmp फ़ाइल विंडो पर अमान्य] [http://stackoverflow.com/questions/16551253/git-diff-tmp-file-invalid-on-windows-when-using-external-program- ऑन-विंडोज -7) – Powerslave

उत्तर

38

यह मेरे लिए काम किया विंडोज 7 पर msysGit का उपयोग कर: मेरे लिए ऊपर

git config --global merge.tool p4merge 
git config --global mergetool.p4merge.cmd 'p4merge $BASE $LOCAL $REMOTE $MERGED' 

सुनिश्चित नहीं क्यों, लेकिन हवाले से खराब कर दिया है बातें ।

+0

साइगविन में भी काम किया! – Ben

+0

एक विन 8 मशीन से दूसरे में स्विच किया गया, दोनों गिट बैश का उपयोग करके और इसे भी करना था, धन्यवाद! –

+0

cmd.exe पर काम नहीं किया लेकिन MINGW32 पर काम करता है। – Roberto

8

आप see here डिफमेर्ज या केडीएफ 3 के लिए मेरी कॉन्फ़िगरेशन करेंगे।

उस आधार पर, मैं p4merge के लिए सिफारिश करेंगे:

git config --global merge.tool merge 
git config --global mergetool.merge.cmd "merge.sh \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"$PWD/$MERGED\"" 

और merge.sh एक आवरण (एक निर्देशिका अपने PATH वातावरण चर द्वारा संदर्भित में नकल) किया जा रहा है, उसे ध्यान में मामला उठाने में सक्षम है जहाँ कोई BASE मौजूद है।

#!/bin/sh 

# Passing the following parameters to mergetool: 
# local base remote merge_result 

alocal=$1 
base=$2 
remote=$3 
result=$4 

if [ -f $base ] 
then 
    p4merge.exe -dl "$base" "$alocal" "$remote" "$result" 
else 
    p4merge.exe -dl "$result" "$alocal" "$remote" "$result" 
fi 

आप नोट कर सकते हैं (जब एक फ़ाइल दो अलग-अलग शाखाओं किया जा रहा है तो विलय कर में बनाई गई है, वहाँ उस फ़ाइल के लिए कोई आम पूर्वज होगा):

  • config में PWD के उपयोग मर्ज
  • मर्ज.टोल नाम के नाम के रूप में "merge" का उपयोग (क्योंकि वास्तविक उपकरण को merge.sh स्क्रिप्ट में कहा जाता है, जहां आप इच्छित मर्ज टूल के बीच स्विच कर सकते हैं)
  • स्क्रिप्ट
  • भीतर चारों ओर $base, $alocal, $remote, $result दोहरे उद्धरण चिह्नों के उपयोग के उपकरण, एक "आधार" फ़ाइल के अस्तित्व के आधार पर फोन करने के लिए सशर्त पथ।
  • हमेशा पैरामीटर के रूप में विलय करने के लिए 3 फ़ाइलों की आवश्यकता (तब भी जब 'आधार' मौजूद नहीं है ...)

बस इसे परीक्षण किया (यह पता चला है, आप कर सकते हैं download and install only p4merge - अनुभाग क्लाइंट/विजुअल मर्ज टूल - भले ही आपके पास कोई अन्य पी 4 उत्पाद इंस्टॉल न हो)।

सेटिंग के साथ

ऊपर का वर्णन है, MSysGit1.6.3, डॉस सत्र या Git बैश सत्र:
यह सिर्फ टीएम काम करता है।


अद्यतन 1.7 msysgit।एक्स

Benjol टिप्पणी में उल्लेख है:

p4merge is now supported natively by msysgit.

This means you can just do:

git config --global merge.tool p4merge 
# and I recommend 
git config --global mergetool.keepBackup false 
+0

अच्छा लगता है - मैं इसे एक शॉट एएसपी दूंगा और आपको बता दूंगा! – JohnIdol

+0

आपको अपने पहले कोड ब्लॉक की दूसरी पंक्ति में "merge.sh दो बार मिल गया है, लेकिन इसके साथ सबकुछ ठीक हो गया है। धन्यवाद! – Benjol

+0

@ बेंजोल धन्यवाद। मैंने टाइपो को ठीक किया है। – VonC