2013-03-10 4 views
27

मैं mergetool जीयूआई कैसे मजबूर कर सकता है हमेशा दिखाया जा सकता है और अक्षम किसी भी स्वत: हल करने?मैं मेरेटूल जीयूआई (केडीएफ 3) को हमेशा दिखाया जा सकता हूं?

कभी कभी जब वहाँ एक मर्ज के दौरान एक संघर्ष है और मैं mergetool उपयोग करते हैं, यह बस immediatelly के बाद मैं सवाल पर दर्ज "वापसी मारो मर्ज संकल्प उपकरण (kdiff3) शुरू करने के लिए" मारा और कोई जीयूआई दिखाया गया है और वापसी संघर्ष हल किया प्रतीत होता है।

मैं Git अब mergetool रूप kdiff3 उपयोग करने के लिए कॉन्फ़िगर किया गया है, लेकिन यह भी जब मैं mergetool निर्दिष्ट के रूप में codecompare है क्या हुआ। मैं जानता हूँ कि वहाँ एक विकल्प "ऑटो बचाने के लिए और संघर्ष के बिना मर्ज पर छोड़ दिया" kdiff3 में, जो सैद्धांतिक रूप से वर्णित व्यवहार का कारण बन सकता है, लेकिन मैं यह विकल्प अक्षम है/अनियंत्रित सब समय है।

इसके अलावा, वहाँ trustExitCode Git mergetool gitconfig, जो मैं सही पर सेट किया गया है, लेकिन यहां तक ​​कि अगर मैं इसे गलत पर सेट, जीयूआई नहीं दिखाया गया है में विकल्प सीधे है।

मुझे यकीन है कि जो ऑटो वैसे भी हल करने नहीं करता हूँ। कुछ preprocessing या kdiff3 में Mergetool?

मैं Windows पर चल रहा हूँ और Git-एक्सटेंशन स्थापित की है।

simillar kdiff3 के लिए विशिष्ट सवाल है, यहां भी पूछा गया था: Kdiff3 won't open with mergetool command

उत्तर

31

Git --auto कठिन kdiff3 को आदेश पंक्ति विकल्प है, जो दिखाने के लिए नहीं है, तो सभी संघर्ष ऑटो समाधान योग्य kdiff3 द्वारा कर रहे हैं जीयूआई का कारण बनता है के रूप में कोडित है। kdiff3 सेटिंग में आप आदेश पंक्ति विकल्प की अनदेखी करने के लिए निर्दिष्ट कर सकते हैं, लेकिन --auto वहाँ डाल मेरे लिए काम नहीं किया।

समाधान के लिए मैं मर्ज उपकरण के रूप में kdiff3 के अपने खुद के संस्करण के लिए कॉन्फ़िगर:

git config --global mergetool.kdiff3NoAuto.cmd "kdiff3 --L1 \"\$MERGED (Base)\" --L2 \"\$MERGED (Local)\" --L3 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$BASE\" \"\$LOCAL\" \"\$REMOTE\"" 

यह बहुत समान है क्या Git kdiff3 लिए डिफ़ॉल्ट रूप से उपयोग करता है, लेकिन --auto ध्वज के बिना करने के लिए।

अब आप git mergetool -t kdiff3NoAuto पर कॉल कर सकते हैं या kdiff3NoAuto को वैश्विक स्तर पर mergetool के रूप में कॉन्फ़िगर कर सकते हैं और kdiff3 हमेशा संघर्षों को हल करते समय दिखाई देंगे।

अद्यतन:, आपके सवाल का दूसरा भाग के बारे में यदि आप वास्तव में किसी भी स्वत: हल करने को निष्क्रिय करना चाहते, बस ऊपर kdiff3 कमांड लाइन के लिए --qall जोड़ें। लेकिन फिर आपको फ़ाइल में मैन्युअल रूप से सभी परिवर्तनों को मैन्युअल रूप से हल करना होगा, यहां तक ​​कि जिन लोगों ने गिट संघर्ष नहीं किया है। सर्वश्रेष्ठ परिदृश्य होगा: kdiff3 दिखाता है कि गिट ने फ़ाइलों को कैसे विलय किया और उपयोगकर्ता को चुनने के लिए संघर्षों को छोड़ दिया। कोई भी जानता है कि यह कैसे करें?

+0

वाउ, यह बहुत अच्छा है। धन्यवाद! आप लिंक किए गए प्रश्न का उत्तर देने के लिए भी विचार कर सकते हैं या कुछ टिप्पणी टिप्पणी कर सकते हैं क्योंकि यह शायद अंत में एक ही समस्या है। –

+0

धन्यवाद। मैंने इस सवाल से दूसरे प्रश्न में लिंक किया है। – PiQuer

+1

अनदेखा कमांड लाइन विकल्प में '--auto' जोड़ना मेरे लिए KDiff3 0.9.98 (64 बिट) के साथ काम करता है। सेटिंग्स मेनू -> KDiff3 -> एकीकरण टैब कॉन्फ़िगर करें। स्वत: हल जानकारी जानकारी प्रकट होती है, लेकिन फिर परिणामस्वरूप विलय प्रदर्शित होता है, जिससे आगे संपादन की अनुमति मिलती है। –

0
इसके बजाय mergetool कॉन्फ़िगर करने की

जो केवल जब वहाँ एक संघर्ष है, बस सेटअप kdiff साथ मर्ज ड्राइवर है कहा जाता है:

git config merge.kdiff.driver 'kdiff3 "%O" "%A" "%B" -o "%A" --L1 "Nearest Common ancestor" -L2 "Working Copy" --L3 "Version from Other Branch"' 

आप इस ड्राइवर --global जोड़कर वैश्विक बना सकते हैं। लेकिन आप अपने रेपो में एक .gitattribute जोड़ने की जरूरत:

* merge=kdiff 
0

git mergetool के व्यवहार पूरी तरह से चुना मर्ज उपकरण और कमांड लाइन Git इसे करने के लिए गुजरता है पर निर्भर है।इसलिए, इसके व्यवहार को बदलने के लिए, आपको एक कमांड लाइन ढूंढनी होगी जो आप चाहते हैं और उस कमांड लाइन का उपयोग करने के लिए गिट को कॉन्फ़िगर करें।

मेरे पास यह सवाल स्वयं था (विशेष रूप से केडीएफ 3 के संबंध में), और PiQuer's answer ने मुझे रास्ता तय किया, लेकिन यह मुझे सोचने के लिए मिला। --auto विकल्प के बिना छोड़कर किटिफ़ 3 के लिए गिट के डिफ़ॉल्ट व्यवहार को दोहराने का एक तरीका होना चाहिए (जो कि KDiff3 को GUI प्रदर्शित नहीं करता है)।

ऐसा लगता है कि kdiff3 विलय उपकरण के लिए डिफ़ॉल्ट कमांड के स्रोत को git/mergetools/kdiff3 फ़ाइल में है। यह शेल स्क्रिप्ट की तरह दिखता है, इसलिए हमें इसे कॉपी करने में सक्षम होना चाहिए! , एक पंक्ति में लाना है कि --auto को हटाने, और चीजों से बचने हमें देता है यह:

git config --global mergetool.kdiff3.cmd "if \"\$base_present\"; then \"\$merge_tool_path\" --L1 \"\$MERGED (Base)\" --L2 \"\$MERGED (Local)\" --L3 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$BASE\" \"\$LOCAL\" \"\$REMOTE\" >/dev/null 2>&1; else \"\$merge_tool_path\" --L1 \"\$MERGED (Local)\" --L2 \"\$MERGED (Remote)\" -o \"\$MERGED\" \"\$LOCAL\" \"\$REMOTE\" >/dev/null 2>&1; fi" 

base_present और merge_tool_path चर विशेष रूप से, mergetool.<tool>.cmd में उपयोग करने के लिए उपलब्ध होने के रूप में Git दस्तावेज में वर्णित नहीं हैं तो यह कुछ संभव है भविष्य में इंगित करें कि यह आदेश काम नहीं कर सकता है। हालांकि, उन्हें जांचने के लिए आसानी से एक कमांड के साथ प्रतिस्थापित किया जा सकता है कि BASE क्रमशः एक फ़ाइल को संदर्भित करता है, और क्रमशः केडीएफ 3 के लिए एक हार्ड-कोडित पथ है।

ध्यान दें कि उपरोक्त आदेश अलग-अलग बनाने के बजाय गिट के kdiff3 विलय टूल के लिए डिफ़ॉल्ट कमांड को प्रतिस्थापित करता है।

मूल प्रश्न में अन्य बिंदुओं की एक जोड़ी के बारे में:

  • trustExitCode सेटिंग Git बताता मर्ज उपकरण के निकास कोड की है कि क्या मर्ज सफल रहा था एक उचित संकेत है या नहीं। मर्ज टूल के बाहर होने के बाद यह मर्ज टूल के व्यवहार को प्रभावित नहीं करेगा बल्कि गिट के व्यवहार को प्रभावित करेगा। manual for git-mergetool देखें।
  • git mergetool टाइप करने के बाद आप जो स्वचालित रिज़ॉल्यूशन देख रहे हैं वह सब मर्ज टूल द्वारा ही किया जाता है। git mergetool केवल उन फ़ाइल संस्करणों पर बाहरी उपकरण को आमंत्रित करता है जिन्हें विलय करने की आवश्यकता है।
संबंधित मुद्दे