2009-09-16 17 views
50

मुझे git pull के बाद कुछ संघर्ष हल करना होगा।गिट खींचने के बाद मैं एक संघर्ष को कैसे हल करूं?

$ git pull 
CONFLICT (rename/add): Renamed vignette_generator_mashed.h->vision_problem_8.h in 49423dd0d47abe6d839a783b5517bdfd200a202f. vision_problem_8.h added in HEAD 
Added as vision_problem_8.h~HEAD_1 instead 
Removed vignette_generator_cross_square.cc 
Automatic merge failed; fix conflicts and then commit the result. 

तो मैं इसे थोड़ा googled, और git mergetool का उपयोग कर कह रही है लोग नहीं मिले। लेकिन यहां मुझे यह मिला है:

$ git mergetool 
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff 
No files need merging 
$ git mergetool opendiff 
merge tool candidates: meld kdiff3 tkdiff xxdiff meld gvimdiff emerge opendiff emerge vimdiff 
opendiff: file not found 

तो क्या इसका मतलब है कि मुझे कुछ इंस्टॉल करना है?

क्या होगा यदि मैं बस सब कुछ ओवरराइट करने के लिए git pull से संस्करण चाहता हूं?

+0

जानकारी के लिए है, यह भी देखें http://stackoverflow.com/ प्रश्न/1064103/आईएस-गिट्स-ऑटो-डिटेक्शन-स्क्रिप्ट-या-इन-इन-गिट-एक्जिक्यूटिव (गिट टूल्स का प्रस्ताव और विलय टूल के लिए खोज के तरीके के बारे में) – VonC

+1

और आप इंस्टॉल/सेटिंग को देख और उदाहरण देख सकते हैं यहां 'mergetool': http://stackoverflow.com/questions/825478/how-to-set-araxis-as-diff-merge-tool-for-msys-git – VonC

उत्तर

24

आपको इसके लिए मेरेटूल की आवश्यकता नहीं है। इसे आसानी से मैन्युअल रूप से हल किया जा सकता है।

आपका संघर्ष यह है कि आपके स्थानीय कामों ने एक फ़ाइल, vision_problem_8.h जोड़ा, कि vignette_generator_mashed.h से नाम से एक दूरस्थ प्रतिबद्धता भी बनाई गई। यदि आप ls -l vision_problem_8.h* चलाते हैं तो आप शायद इस फ़ाइल के कई संस्करण देखेंगे जो गिट आपके लिए संरक्षित है। उनमें से एक तुम्हारा होगा, उनमें से एक दूरस्थ संस्करण होगा। आप विरोधाभासी सामग्री को हल करने के लिए एक संपादक या जो भी टूल्स आप पसंद करते हैं उसका उपयोग कर सकते हैं। जब आप पूरा कर लेंगे, git add प्रभावित फाइलें और विलय को पूरा करने के लिए प्रतिबद्ध होंगी।

यदि आप केवल दूरस्थ प्रतिबद्धता संस्करण का उपयोग करना चाहते हैं, तो आप उस प्रतिलिपि को केवल उस स्थान पर ले जा सकते हैं जिसे आपने जगह में नहीं लिखा था और git add


मर्ज उपकरण के बारे में, git help mergetool पर एक नजर है। असल में, यह प्रत्येक शामिल संभावनाओं को चलाने की कोशिश करने जा रहा है जब तक कि यह एक नहीं पाता, या जिसे आपने स्पष्ट रूप से कॉन्फ़िगर किया है उसका उपयोग करें।

+0

धन्यवाद! आप समस्या को हल करने में मेरी मदद करते हैं। क्या मैं अभी भी पूछ सकता हूं कि मेरे मेरेटूल के साथ क्या गलत है? धन्यवाद एवं शुभकामनाएँ! – Tim

+1

अधिकतर आपके पास आपके mergetool को कॉन्फ़िगर नहीं किया गया है। गिट कॉन्फ़िगरेशन --global mergetool का उपयोग करें। [उपकरण] .cmd = [कमांड लाइन कॉल] आप kdiff3, tkdiff, xxdiff या कई अन्य जैसे कई diff टूल का उपयोग कर सकते हैं। Http://gitguru.com/2009/02/22/integrating-git-with-a-visual-merge-tool/ – Cesar

5

यदि आप अपनी परियोजना की उपनिर्देशिका से अपना विलय चलाते हैं, तो गिट आपके पूरे प्रोजेक्ट के लिए विलय चलाएगा। हालांकि, mergetool केवल कार्यशील निर्देशिका में या नीचे फ़ाइलों को देख (और विलय) कर सकता है। इसलिए, यदि यह परिदृश्य होता है, तो सुनिश्चित करें कि आप अपने प्रोजेक्ट में शीर्ष-स्तरीय निर्देशिका से अपने संघर्ष समाधान को चलाने का प्रयास कर रहे हैं।

6

मुझे लगता है कि आप बस अपनी कमांड लाइन पर "-t" स्विच भूल गए हैं। गिट हेल्प पेज के मुताबिक यह "-t, --tool =" है, इसलिए यह आपके द्वारा किए गए कार्यों को बनाता है।

प्रयास करें:

git mergetool -t gvimdiff 
बेशक आप मेरा gvimdiff के बजाय अपने पसंदीदा मर्ज उपकरण का उपयोग कर सकते हैं के

, मिलकर एक हो जाना महान भी ...

+0

देखें यदि यह वास्तव में स्विच '-t'' के बारे में कुछ स्पष्टीकरण था तो यह एक बेहतर जवाब होगा करता है, और * क्यों * यह समस्या हल करता है। – Stewart

+0

@ स्टीवर्ट हो गया। अंतर्दृष्टि के लिए धन्यवाद! – mano2a0c40